{
  "openapi": "3.1.1",
  "info": {
    "title": "Sales v2",
    "description": "Entur's sales API, based on the Open Mobility Sales API (OMSA) standard, for searching, selecting, and purchasing public transport tickets.",
    "termsOfService": "https://developer.entur.no/terms-of-service",
    "contact": {
      "name": "Team Selgerintegrasjoner",
      "url": "https://github.com/entur/omsa"
    },
    "version": "2026.10.0",
    "x-stability-level": "draft"
  },
  "servers": [
    {
      "url": "https://api.entur.io/sales/v2",
      "description": "Production environment"
    },
    {
      "url": "https://api.dev.entur.io/sales/v2",
      "description": "Development environment"
    },
    {
      "url": "https://api.staging.entur.io/sales/v2",
      "description": "Staging environment"
    }
  ],
  "tags": [
    {
      "name": "discovery",
      "description": "Discovery endpoints for landing page, conformance, and API metadata."
    },
    {
      "name": "collections",
      "description": "Collection endpoints for retrieving 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": {
    "/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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/bbox"
          }
        ],
        "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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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"
        }
      ]
    },
    "/processes/add-traveller/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Add traveller to package",
        "description": "Adds a traveller to an existing package.",
        "operationId": "addTravellerHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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/update-traveller/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Update traveller in package",
        "description": "Updates traveller details in an existing package.",
        "operationId": "updateTravellerHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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/remove-traveller/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Remove traveller from package",
        "description": "Removes a traveller from an existing package.",
        "operationId": "removeTravellerHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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/assign-asset/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Assign asset to package leg",
        "description": "Assigns an asset to a specific package leg.",
        "operationId": "assignAssetHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "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/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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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-offers/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Purchase selected offers directly",
        "description": "Purchases selected offers directly and returns the resulting package.",
        "operationId": "purchaseOffersProcessHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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/purchase-package/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Purchase existing package",
        "description": "Purchases a previously created package.",
        "operationId": "purchasePackageProcessHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/bbox"
          }
        ],
        "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/release-package/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Release package reservation",
        "description": "Releases a package reservation.",
        "operationId": "releasePackageProcessHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/bbox"
          }
        ],
        "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/extend-expiry-time/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Extend package reservation expiry",
        "description": "Extends the expiry time for a reserved package.",
        "operationId": "extendExpiryTimeProcessHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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/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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          }
        ],
        "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"
        }
      ]
    },
    "/processes/cancel-package/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Cancel package",
        "description": "Cancels an existing purchased or reserved package.",
        "operationId": "cancelPackageProcessHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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/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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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"
        }
      ]
    },
    "/processes/confirm-refund-option/execute": {
      "post": {
        "tags": [
          "processes"
        ],
        "summary": "Confirm claimed refund option",
        "description": "Confirms a previously claimed refund option.",
        "operationId": "confirmRefundClaimProcessHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "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/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": [
          {
            "$ref": "#/components/parameters/packageId"
          },
          {
            "$ref": "#/components/parameters/legId"
          },
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/bbox"
          }
        ],
        "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/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": [
          {
            "$ref": "#/components/parameters/packageId"
          },
          {
            "$ref": "#/components/parameters/legId"
          },
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          }
        ],
        "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/change-options/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List available change options",
        "description": "Retrieves available change options for a package.",
        "operationId": "changeOptionHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/packageId"
          },
          {
            "$ref": "#/components/parameters/optionalLegId"
          },
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          }
        ],
        "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": [
          {
            "$ref": "#/components/parameters/packageId"
          },
          {
            "$ref": "#/components/parameters/optionalLegId"
          },
          {
            "$ref": "#/components/parameters/optionalTravellerId"
          },
          {
            "$ref": "#/components/parameters/optionalAncillaryId"
          },
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          }
        ],
        "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"
        }
      ]
    },
    "/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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/EnturDistributionChannelHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/EnturPOSHeaderRequired"
          },
          {
            "$ref": "#/components/parameters/packageId"
          },
          {
            "$ref": "#/components/parameters/optionalLegId"
          },
          {
            "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"
        }
      ]
    },
    "/collections/datasources/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List configured external data sources",
        "description": "Retrieves all datasources",
        "operationId": "getDataSources",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "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"
        }
      ]
    },
    "/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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/optionalPackageId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageOwnerCustomerId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageContactCustomerId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageBalance"
          },
          {
            "$ref": "#/components/parameters/optionalPackageCreatedAt"
          },
          {
            "$ref": "#/components/parameters/optionalPackageCurrency"
          },
          {
            "$ref": "#/components/parameters/optionalPackageDatedServiceJourneyId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageDistributionChannelId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageEndTime"
          },
          {
            "$ref": "#/components/parameters/optionalPackageExternalReference"
          },
          {
            "$ref": "#/components/parameters/optionalPackageFromStopPlaceId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageLastConfirmedAt"
          },
          {
            "$ref": "#/components/parameters/optionalPackageOrderBy"
          },
          {
            "$ref": "#/components/parameters/optionalPackageLegExternalReference"
          },
          {
            "$ref": "#/components/parameters/optionalPackageLegId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageOrganisationId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageOriginalDatedServiceJourneyId"
          },
          {
            "$ref": "#/components/parameters/optionalPackagePos"
          },
          {
            "$ref": "#/components/parameters/optionalPackageReservationId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageProductId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageFareProductVersion"
          },
          {
            "$ref": "#/components/parameters/optionalPackageServiceJourneyId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageSortBy"
          },
          {
            "$ref": "#/components/parameters/optionalPackageStartTime"
          },
          {
            "$ref": "#/components/parameters/optionalPackageToStopPlaceId"
          },
          {
            "$ref": "#/components/parameters/optionalPackageTotalAmount"
          },
          {
            "$ref": "#/components/parameters/optionalPackageTotalTaxAmount"
          },
          {
            "$ref": "#/components/parameters/optionalPackageVersion"
          },
          {
            "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/packages/items/{packageId}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get package by ID",
        "description": "Retrieves a single package by identifier.",
        "operationId": "getPackage",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "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"
        }
      ]
    },
    "/collections/customers/items": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "List customers with filters",
        "description": "Retrieve customers with optional filters and pagination.",
        "operationId": "customerCollectionHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          },
          {
            "$ref": "#/components/parameters/limit"
          },
          {
            "$ref": "#/components/parameters/offset"
          },
          {
            "$ref": "#/components/parameters/optionalCustomerId"
          },
          {
            "$ref": "#/components/parameters/optionalCustomerExternalReference"
          },
          {
            "$ref": "#/components/parameters/optionalCustomerFirstName"
          },
          {
            "$ref": "#/components/parameters/optionalCustomerLastName"
          },
          {
            "$ref": "#/components/parameters/optionalCustomerEmail"
          },
          {
            "$ref": "#/components/parameters/optionalCustomerPhoneNumber"
          }
        ],
        "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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "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/customers/items/{customerId}": {
      "get": {
        "tags": [
          "collections"
        ],
        "summary": "Get customer by ID",
        "description": "Retrieves a single customer by identifier.",
        "operationId": "getCustomerHandler",
        "parameters": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "$ref": "#/components/parameters/authorization"
          }
        ],
        "responses": {
          "204": {
            "description": "Customer deleted successfully"
          },
          "default": {
            "$ref": "#/components/responses/errorResponse"
          }
        },
        "security": [
          {
            "BearerAuth": []
          },
          {
            "OAuth": []
          },
          {
            "OAuthPKI": []
          }
        ]
      },
      "parameters": [
        {
          "$ref": "#/components/parameters/customerId"
        },
        {
          "$ref": "#/components/parameters/ET-Client-Name"
        },
        {
          "$ref": "#/components/parameters/X-Correlation-Id"
        }
      ]
    },
    "/": {
      "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": [
          {
            "$ref": "#/components/parameters/f"
          },
          {
            "$ref": "#/components/parameters/acceptLanguage"
          }
        ],
        "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"
        }
      ]
    },
    "/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": [
          {
            "$ref": "#/components/parameters/f"
          },
          {
            "$ref": "#/components/parameters/acceptLanguage"
          }
        ],
        "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"
        }
      ]
    },
    "/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",
        "responses": {
          "200": {
            "description": "A list of available collections",
            "headers": {
              "Content-Language": {
                "$ref": "#/components/headers/contentLanguage"
              },
              "Version": {
                "$ref": "#/components/headers/version"
              }
            },
            "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"
        }
      ]
    },
    "/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"
            }
          },
          {
            "$ref": "#/components/parameters/acceptLanguage"
          }
        ],
        "responses": {
          "200": {
            "description": "description of data delivered by this collection",
            "headers": {
              "Content-Language": {
                "$ref": "#/components/headers/contentLanguage"
              },
              "Version": {
                "$ref": "#/components/headers/version"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/collectionInfo"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          }
        ],
        "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"
        }
      ]
    },
    "/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": [
          {
            "$ref": "#/components/parameters/acceptLanguage"
          },
          {
            "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": {
              "Content-Language": {
                "$ref": "#/components/headers/contentLanguage"
              },
              "Version": {
                "$ref": "#/components/headers/version"
              }
            },
            "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"
        }
      ]
    },
    "/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",
        "requestBody": {
          "content": {
            "application/x-www-form-urlencoded": {
              "schema": {
                "required": [
                  "grant_type"
                ],
                "type": "object",
                "properties": {
                  "grant_type": {
                    "type": "string",
                    "description": "The grant type: 'client_credentials', 'password', or 'refresh_token'.",
                    "default": "client_credentials",
                    "enum": [
                      "client_credentials",
                      "password",
                      "refresh_token"
                    ]
                  },
                  "username": {
                    "type": "string",
                    "description": "The username"
                  },
                  "password": {
                    "type": "string",
                    "description": "The password"
                  },
                  "client_id": {
                    "type": "string",
                    "description": "The client ID (Client Credentials Flow)"
                  },
                  "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": {
                    "access_token": {
                      "type": "string",
                      "description": "The issued access token."
                    },
                    "refresh_token": {
                      "type": "string",
                      "description": "The optional refresh token."
                    },
                    "token_type": {
                      "type": "string",
                      "description": "The type of the token.",
                      "default": "Bearer"
                    },
                    "expires_in": {
                      "type": "integer",
                      "description": "The lifetime of the access token in seconds."
                    }
                  }
                }
              }
            }
          },
          "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"
        }
      ]
    }
  },
  "components": {
    "schemas": {
      "subscriber": {
        "required": [
          "successUrl"
        ],
        "type": "object",
        "properties": {
          "successUri": {
            "type": "string",
            "format": "uri"
          },
          "inProgressUri": {
            "type": "string",
            "format": "uri"
          },
          "failedUri": {
            "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"
        }
      },
      "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"
              ]
            }
          }
        }
      },
      "searchOfferInput": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(search_offer)",
            "type": "string"
          },
          "specification": {
            "allOf": [
              {
                "$ref": "#/components/schemas/travelSpecification"
              },
              {
                "$ref": "#/components/schemas/placeDefinitions"
              }
            ]
          },
          "filters": {
            "type": "array",
            "description": "Request-wide predicates that every returned offer must satisfy.",
            "items": {
              "$ref": "#/components/schemas/searchOfferFilter"
            }
          },
          "pattern": {
            "$ref": "#/components/schemas/tripPattern"
          },
          "packageToExchange": {
            "$ref": "#/components/schemas/packageReference"
          },
          "travellers": {
            "maxItems": 10,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/individualTraveller"
            }
          },
          "profiles": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/userProfile"
            }
          },
          "travellingAssets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/travellingAsset"
            }
          },
          "entur": {
            "$ref": "#/components/schemas/enturSearchOfferInput"
          }
        },
        "description": "A package planning request, resulting in package options",
        "anyOf": [
          {
            "required": [
              "travellers"
            ]
          },
          {
            "required": [
              "profiles"
            ]
          }
        ]
      },
      "enturSearchOfferInput": {
        "type": "object",
        "properties": {
          "recommendationControl": {
            "$ref": "#/components/schemas/enturRecommendationControl"
          }
        },
        "description": "Entur-specific OMSA extensions for search-offers input."
      },
      "enturRecommendationType": {
        "type": "string",
        "description": "Entur Offers recommendation category.",
        "enum": [
          "FLEXIBLE",
          "SEMI_FLEXIBLE",
          "NON_FLEXIBLE",
          "CHEAPEST"
        ]
      },
      "enturRecommendationControl": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "Enable recommendation-driven bundling based on Offers `recommendations` and `offersToBuy`.",
            "default": false
          },
          "types": {
            "minItems": 1,
            "type": "array",
            "description": "Entur recommendation categories to request when `enabled` is true.\nIf omitted, the API defaults to `[\"CHEAPEST\", \"NON_FLEXIBLE\", \"SEMI_FLEXIBLE\", \"FLEXIBLE\"]`.\n",
            "items": {
              "$ref": "#/components/schemas/enturRecommendationType"
            }
          },
          "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, the API defaults to raw mode (recommendation-driven bundling disabled).\n"
      },
      "selectOffersInput": {
        "required": [
          "offerIds",
          "type"
        ],
        "type": "object",
        "properties": {
          "offerIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/offerReference"
            }
          },
          "type": {
            "pattern": "^(select_offers)",
            "type": "string"
          },
          "customer": {
            "$ref": "#/components/schemas/customerRef"
          },
          "contact": {
            "$ref": "#/components/schemas/customerRef"
          },
          "externalReference": {
            "$ref": "#/components/schemas/externalReference"
          }
        }
      },
      "packageInput": {
        "required": [
          "packageId",
          "type"
        ],
        "type": "object",
        "properties": {
          "packageId": {
            "$ref": "#/components/schemas/packageReference"
          },
          "type": {
            "pattern": "^(package)",
            "type": "string"
          }
        }
      },
      "legInput": {
        "required": [
          "legId",
          "packageId",
          "type"
        ],
        "type": "object",
        "properties": {
          "packageId": {
            "$ref": "#/components/schemas/packageReference"
          },
          "type": {
            "type": "string"
          },
          "offerId": {
            "$ref": "#/components/schemas/offerReference"
          },
          "legId": {
            "$ref": "#/components/schemas/legReference"
          },
          "location": {
            "$ref": "#/components/schemas/placeReference"
          }
        }
      },
      "refundOptionInput": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(claim_refund_option|confirm_refund_option)$",
            "type": "string"
          },
          "optionId": {
            "$ref": "#/components/schemas/uuid"
          }
        }
      },
      "addTravellerInput": {
        "required": [
          "packageId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(traveller)$",
            "type": "string"
          },
          "packageId": {
            "$ref": "#/components/schemas/packageReference"
          },
          "individualTraveller": {
            "$ref": "#/components/schemas/individualTraveller"
          },
          "userProfile": {
            "$ref": "#/components/schemas/userProfile"
          },
          "travellingAsset": {
            "$ref": "#/components/schemas/travellingAsset"
          }
        }
      },
      "removeTravellerInput": {
        "required": [
          "packageId",
          "travellerId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(traveller)$",
            "type": "string"
          },
          "travellerId": {
            "$ref": "#/components/schemas/travellerReference"
          },
          "packageId": {
            "$ref": "#/components/schemas/packageReference"
          }
        }
      },
      "updateTravellerInput": {
        "required": [
          "packageId",
          "travellerId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(traveller)$",
            "type": "string"
          },
          "packageId": {
            "$ref": "#/components/schemas/packageReference"
          },
          "travellerId": {
            "$ref": "#/components/schemas/travellerReference"
          },
          "individualTraveller": {
            "$ref": "#/components/schemas/individualTraveller"
          },
          "userProfile": {
            "$ref": "#/components/schemas/userProfile"
          },
          "travellingAsset": {
            "$ref": "#/components/schemas/travellingAsset"
          }
        }
      },
      "assetInput": {
        "allOf": [
          {
            "$ref": "#/components/schemas/legInput"
          },
          {
            "required": [
              "assetId",
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(asset)$",
                "type": "string"
              },
              "assetId": {
                "$ref": "#/components/schemas/assetReference"
              },
              "replaceAssetId": {
                "$ref": "#/components/schemas/assetReference"
              }
            }
          }
        ]
      },
      "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"
              }
            }
          }
        ]
      },
      "purchaseOffersInput": {
        "required": [
          "offerIds",
          "type"
        ],
        "type": "object",
        "properties": {
          "offerIds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/offerReference"
            }
          },
          "type": {
            "pattern": "^(purchase_offers)$",
            "type": "string"
          },
          "customer": {
            "$ref": "#/components/schemas/customerRef"
          },
          "contact": {
            "$ref": "#/components/schemas/customerRef"
          },
          "externalReference": {
            "$ref": "#/components/schemas/externalReference"
          }
        }
      },
      "extendExpiryTimeInput": {
        "required": [
          "packageId",
          "type"
        ],
        "type": "object",
        "properties": {
          "packageId": {
            "$ref": "#/components/schemas/packageReference"
          },
          "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"
          }
        }
      },
      "updateTravelDocumentValidityInput": {
        "required": [
          "newStartTime",
          "packageId",
          "travelDocumentId",
          "type"
        ],
        "type": "object",
        "properties": {
          "packageId": {
            "$ref": "#/components/schemas/packageReference"
          },
          "type": {
            "pattern": "^(update_travel_document_validity)$",
            "type": "string"
          },
          "travelDocumentId": {
            "type": "string",
            "description": "The id of the travel document to update"
          },
          "newStartTime": {
            "$ref": "#/components/schemas/dateTimeOrNow"
          }
        }
      },
      "updateTravelDocumentValidityResponse": {
        "required": [
          "newTravelDocumentId",
          "previousTravelDocumentId"
        ],
        "type": "object",
        "properties": {
          "previousTravelDocumentId": {
            "type": "string",
            "description": "The travel document id that was replaced"
          },
          "newTravelDocumentId": {
            "type": "string",
            "description": "The new travel document id with updated validity"
          }
        }
      },
      "basePoint": {
        "maxItems": 2,
        "minItems": 2,
        "type": "array",
        "items": {
          "minimum": 0,
          "type": "number",
          "format": "float"
        }
      },
      "geojsonPoint": {
        "required": [
          "coordinates"
        ],
        "type": "object",
        "properties": {
          "coordinates": {
            "$ref": "#/components/schemas/basePoint"
          }
        },
        "description": "Geojson Coordinate"
      },
      "geojsonLine": {
        "required": [
          "coordinates"
        ],
        "type": "object",
        "properties": {
          "coordinates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/basePoint"
            }
          }
        },
        "description": "An array of WGS84 coordinate pairs"
      },
      "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."
      },
      "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"
      },
      "geojsonFeature": {
        "required": [
          "id",
          "properties",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(Feature)$",
            "type": "string"
          },
          "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"
              }
            ]
          },
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "geojson": {
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(FeatureCollection)$",
            "type": "string"
          },
          "features": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/geojsonFeature"
            }
          },
          "properties": {
            "type": "object"
          },
          "crs": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "properties": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "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"
            }
          }
        }
      },
      "offerCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(OfferCollection)$",
            "type": "string"
          },
          "offers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/offer"
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "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"
            }
          }
        }
      },
      "packageCollection": {
        "required": [
          "packages",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "PackageCollection"
            ]
          },
          "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"
          },
          "links": {
            "type": "array",
            "description": "Actions that can be performed on this collection.",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "package": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelSpecification"
          },
          {
            "$ref": "#/components/schemas/placeDefinitions"
          },
          {
            "required": [
              "offers",
              "price",
              "status",
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(package)$",
                "type": "string"
              },
              "id": {
                "type": "string"
              },
              "externalReference": {
                "$ref": "#/components/schemas/externalReference"
              },
              "status": {
                "$ref": "#/components/schemas/packageStatus"
              },
              "price": {
                "$ref": "#/components/schemas/amountOfMoney"
              },
              "offers": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/offer"
                }
              },
              "guarantees": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/externalReference"
                }
              },
              "travellers": {
                "type": "array",
                "items": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/individualTraveller"
                    },
                    {
                      "$ref": "#/components/schemas/userProfile"
                    },
                    {
                      "$ref": "#/components/schemas/travellingAsset"
                    }
                  ]
                }
              },
              "links": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/link"
                }
              }
            },
            "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"
      },
      "offer": {
        "required": [
          "properties"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(offer)$",
            "type": "string"
          },
          "properties": {
            "type": "object",
            "properties": {
              "legs": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/leg"
                }
              },
              "usageValidityPeriods": {
                "type": "array",
                "description": "Usage validity periods referenced by the offer's legs.",
                "items": {
                  "$ref": "#/components/schemas/usageValidityPeriod"
                }
              },
              "frequenciesOfUse": {
                "type": "array",
                "description": "Frequency-of-use parameters referenced by the offer's legs.",
                "items": {
                  "$ref": "#/components/schemas/frequencyOfUse"
                }
              },
              "ancillaries": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ancillary"
                }
              },
              "products": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/product"
                }
              },
              "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, including labeled `fareZones` and `groups`\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"
              },
              "guarantees": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/guarantee"
                }
              },
              "expiryTime": {
                "$ref": "#/components/schemas/dateTime"
              }
            }
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        },
        "x-tm": "SALES OFFER PACKAGE"
      },
      "leg": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelSpecification"
          },
          {
            "required": [
              "id",
              "type"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/legReference"
              },
              "type": {
                "pattern": "^(leg)$",
                "type": "string"
              },
              "sequenceNumber": {
                "$ref": "#/components/schemas/shortInt"
              },
              "traveller": {
                "$ref": "#/components/schemas/travellerReference"
              },
              "state": {
                "$ref": "#/components/schemas/legState"
              },
              "price": {
                "$ref": "#/components/schemas/amountOfMoney"
              },
              "products": {
                "type": "array",
                "description": "a reference to a product in the 'products' collection of the offer",
                "items": {
                  "$ref": "#/components/schemas/shortString"
                }
              },
              "ancillaries": {
                "type": "array",
                "description": "additional products that can be assigned to this leg, references to 'ancillaries' collection",
                "items": {
                  "$ref": "#/components/schemas/shortString"
                }
              },
              "usageValidityPeriods": {
                "type": "array",
                "description": "References to usage validity periods in the offer's usageValidityPeriods collection.",
                "items": {
                  "$ref": "#/components/schemas/usageValidityPeriodReference"
                }
              },
              "frequenciesOfUse": {
                "type": "array",
                "description": "References to frequency-of-use parameters in the offer's frequenciesOfUse collection.",
                "items": {
                  "$ref": "#/components/schemas/frequencyOfUseReference"
                }
              },
              "mode": {
                "$ref": "#/components/schemas/mode"
              },
              "assets": {
                "type": "array",
                "description": "The physical asset(s) used for the execution of the leg",
                "items": {
                  "$ref": "#/components/schemas/assetReference"
                }
              },
              "reservationRequirement": {
                "$ref": "#/components/schemas/reservationRequirement"
              },
              "operator": {
                "$ref": "#/components/schemas/organisationReference"
              }
            },
            "description": "A (planned) consumption of a product within a package"
          }
        ],
        "x-tm": "LEG"
      },
      "usageValidityPeriod": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/usageValidityPeriodReference"
          },
          "type": {
            "pattern": "^(usage_validity_period)$",
            "type": "string"
          },
          "validityPeriodType": {
            "$ref": "#/components/schemas/usageValidityPeriodType"
          },
          "usageTrigger": {
            "$ref": "#/components/schemas/usageTrigger"
          },
          "usageEnd": {
            "$ref": "#/components/schemas/usageEnd"
          },
          "standardDuration": {
            "type": "string",
            "description": "Positive ISO 8601 duration of the usage validity period, for example PT168H.",
            "format": "duration"
          },
          "activationMeans": {
            "$ref": "#/components/schemas/activationMeans"
          },
          "startDate": {
            "$ref": "#/components/schemas/date"
          },
          "startTime": {
            "type": "string",
            "format": "time"
          },
          "endDate": {
            "$ref": "#/components/schemas/date"
          },
          "endTime": {
            "type": "string",
            "format": "time"
          },
          "usageStartConstraintType": {
            "$ref": "#/components/schemas/usageStartConstraintType"
          },
          "blackoutUse": {
            "$ref": "#/components/schemas/blackoutUse"
          }
        },
        "x-tm": "USAGE VALIDITY PERIOD"
      },
      "usageValidityPeriodType": {
        "type": "string",
        "description": "NeTEx classification of a usage validity period.",
        "enum": [
          "SINGLE_RIDE",
          "SINGLE_TRIP",
          "RETURN_TRIP",
          "CARNET",
          "DAY_PASS",
          "WEEKLY_PASS",
          "WEEKEND_PASS",
          "MONTHLY_PASS",
          "ANNUAL_PASS",
          "SEASON_TICKET",
          "PROFILE_MEMBERSHIP",
          "SUBSCRIPTION",
          "OPEN_ENDED",
          "CAP",
          "OTHER"
        ]
      },
      "usageTrigger": {
        "type": "string",
        "description": "Event that starts the usage validity period.",
        "enum": [
          "ENROLMENT",
          "RESERVATION",
          "PURCHASE",
          "FULFILMENT",
          "ACTIVATION",
          "SPECIFIED_START_DATE",
          "START_OUTBOUND_RIDE",
          "END_OUTBOUND_RIDE",
          "START_RETURN_RIDE",
          "START_OF_PERIOD",
          "DAY_OFFSET_BEFORE_CALENDAR_PERIOD"
        ]
      },
      "usageEnd": {
        "type": "string",
        "description": "Event that ends the usage validity period.",
        "enum": [
          "STANDARD_DURATION",
          "END_OF_CALENDAR_PERIOD",
          "END_OF_RIDE",
          "END_OF_TRIP",
          "END_OF_FARE_DAY",
          "END_OF_FARE_PERIOD",
          "PRODUCT_EXPIRY",
          "PROFILE_EXPIRY",
          "DEREGISTRATION",
          "OTHER"
        ]
      },
      "activationMeans": {
        "type": "string",
        "description": "Means used to activate the usage validity period.",
        "enum": [
          "NONE_REQUIRED",
          "CHECK_IN",
          "USE_OF_VALIDATOR",
          "USE_OF_MOBILE_DEVICE",
          "AUTOMATIC_BY_TIME",
          "AUTOMATIC_BY_PROXIMITY",
          "ACCESS_CODE",
          "OTHER"
        ]
      },
      "usageStartConstraintType": {
        "type": "string",
        "description": "Constraint applied to the start of the usage validity period.",
        "enum": [
          "VARIABLE",
          "FIXED",
          "FIXED_WINDOW"
        ]
      },
      "blackoutUse": {
        "type": "string",
        "description": "How the validity period interacts with blackout periods.",
        "enum": [
          "MAY_TRAVEL_ANYTIME",
          "NO_TRAVEL_WITHIN_PERIOD",
          "NO_TRAVEL_WITHIN_TIMEBAND",
          "MAY_COMPLETE_IF_STARTED_BEFORE"
        ]
      },
      "frequencyOfUse": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/frequencyOfUseReference"
          },
          "type": {
            "pattern": "^(frequency_of_use)$",
            "type": "string"
          },
          "frequencyOfUseType": {
            "$ref": "#/components/schemas/frequencyOfUseType"
          },
          "minimalFrequency": {
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of times the product can be used."
          },
          "maximalFrequency": {
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of times the product can be used."
          },
          "frequencyInterval": {
            "type": "string",
            "description": "Positive ISO 8601 interval within which frequency is measured.",
            "format": "duration"
          }
        },
        "x-tm": "FREQUENCY OF USE"
      },
      "frequencyOfUseType": {
        "type": "string",
        "description": "NeTEx classification of a frequency-of-use parameter.",
        "enum": [
          "NONE",
          "UNLIMITED",
          "LIMITED",
          "TWICE_A_DAY",
          "SINGLE"
        ]
      },
      "product": {
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(product)$",
            "type": "string"
          },
          "productId": {
            "$ref": "#/components/schemas/productReference"
          },
          "productName": {
            "$ref": "#/components/schemas/normalString"
          },
          "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"
            }
          },
          "service": {
            "type": "array",
            "description": "Service characteristics covered by this product, such as service journey, class of use, asset, or accommodation.",
            "items": {
              "$ref": "#/components/schemas/serviceParameter"
            }
          },
          "reservationRequirements": {
            "type": "array",
            "description": "Reservation rules carried by this product.",
            "items": {
              "$ref": "#/components/schemas/reservationRequirement"
            }
          }
        },
        "x-tm": "FARE PRODUCT"
      },
      "tripPattern": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "serviceJourney": {
              "$ref": "#/components/schemas/serviceJourneyReference"
            },
            "date": {
              "$ref": "#/components/schemas/date"
            },
            "from": {
              "$ref": "#/components/schemas/placeReference"
            },
            "to": {
              "$ref": "#/components/schemas/placeReference"
            }
          }
        }
      },
      "travelSpecification": {
        "type": "object",
        "properties": {
          "from": {
            "$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"
            }
          },
          "to": {
            "$ref": "#/components/schemas/placeReference"
          },
          "startTime": {
            "$ref": "#/components/schemas/dateTime"
          },
          "endTime": {
            "$ref": "#/components/schemas/dateTime"
          }
        },
        "x-tm": "TRAVEL SPECIFICATION"
      },
      "travelDocument": {
        "required": [
          "endvalidity",
          "format",
          "startvalidity"
        ],
        "type": "object",
        "properties": {
          "startvalidity": {
            "$ref": "#/components/schemas/dateTime"
          },
          "endvalidity": {
            "$ref": "#/components/schemas/dateTime"
          },
          "format": {
            "$ref": "#/components/schemas/travelDocumentFormat"
          },
          "status": {
            "$ref": "#/components/schemas/travelDocumentStatus"
          }
        },
        "x-tm": "TRAVEL DOCUMENT"
      },
      "travelDocumentFormat": {
        "type": "string",
        "description": "how the travel document is presented to the traveller<br>",
        "enum": [
          "LINK",
          "BARCODE",
          "QRCODE",
          "AZTECCODE",
          "AXA_EKEY_OTP",
          "BLUETOOTH",
          "NFC",
          "PHYSICAL_KEY",
          "EXTERNAL_CARD",
          "OTHER"
        ],
        "x-tm": [
          {
            "concept": "TYPE OF TRAVEL DOCUMENT"
          }
        ]
      },
      "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"
          }
        ]
      },
      "classOfUse": {
        "type": "string",
        "description": "A classification of fare and other service classes by category of user entitled to use them. Use ECONOMY_CLASS for standard class products.",
        "enum": [
          "FIRST_CLASS",
          "SECOND_CLASS",
          "THIRD_CLASS",
          "ECONOMY_CLASS",
          "BUSINESS_CLASS",
          "TURISTA",
          "PREFERENTE",
          "PREMIUM_CLASS",
          "ANY",
          "UNKNOWN"
        ],
        "x-tm": "CLASS OF USE"
      },
      "berthType": {
        "type": "string",
        "enum": [
          "SLEEPER",
          "COUCHETTE",
          "SEAT",
          "OTHER"
        ]
      },
      "individualTraveller": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelParty"
          },
          {
            "required": [
              "id",
              "type"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/travellerReference"
              },
              "type": {
                "pattern": "^(individual_traveller)$",
                "type": "string"
              },
              "isValidated": {
                "type": "boolean",
                "description": "Whether this traveler's identity and properties have been verified by the MaaS provider"
              },
              "age": {
                "$ref": "#/components/schemas/shortInt"
              },
              "gender": {
                "type": "string",
                "enum": [
                  "M",
                  "F",
                  "X",
                  "U"
                ]
              },
              "fullName": {
                "$ref": "#/components/schemas/normalString"
              },
              "customerReference": {
                "$ref": "#/components/schemas/customerReference"
              },
              "customFields": {
                "$ref": "#/components/schemas/customProperties"
              }
            },
            "description": "A generic description of a traveler, not including any identifying information",
            "x-tm": "INDIVIDUAL TRAVELLER"
          }
        ]
      },
      "travelParty": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string"
          },
          "entitlements": {
            "type": "object",
            "properties": {
              "commercialProfiles": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/commercialProfile"
                }
              },
              "entitlementsGiven": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/entitlementGiven"
                }
              },
              "cardTypes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/cardType"
                }
              },
              "cards": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/card"
                }
              },
              "licenseTypes": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/licenseType"
                }
              },
              "licenses": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/license"
                }
              }
            }
          },
          "requirements": {
            "$ref": "#/components/schemas/travelPartyRequirements"
          }
        },
        "x-tm": "ACCESS RIGHT PARAMETER ASSIGNMENT"
      },
      "travelPartyRequirements": {
        "type": "object",
        "properties": {
          "organisational": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/organisationalParameter"
            }
          },
          "spotReservations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/spotReservationParameter"
            }
          },
          "distribution": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/distributionParameter"
            }
          },
          "network": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/networkParameter"
            }
          },
          "routing": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/routingParameter"
            }
          },
          "service": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/serviceParameter"
            }
          },
          "temporal": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/temporalParameter"
            }
          },
          "equipment": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/equipmentParameter"
            }
          },
          "cancellation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/cancellationParameter"
            }
          },
          "purchase": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/purchaseParameter"
            }
          }
        }
      },
      "searchOfferFilter": {
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "service": "#/components/schemas/serviceFilter",
            "organisational": "#/components/schemas/organisationalFilter"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/serviceFilter"
          },
          {
            "$ref": "#/components/schemas/organisationalFilter"
          }
        ]
      },
      "serviceFilter": {
        "minProperties": 2,
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(service)$",
            "type": "string"
          },
          "productId": {
            "$ref": "#/components/schemas/normalString"
          },
          "serviceJourney": {
            "$ref": "#/components/schemas/serviceJourneyReference"
          },
          "class": {
            "$ref": "#/components/schemas/classOfUse"
          },
          "berthTypes": {
            "minItems": 1,
            "uniqueItems": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/berthType"
            }
          }
        },
        "additionalProperties": false,
        "description": "Service characteristics that every returned offer must satisfy."
      },
      "organisationalFilter": {
        "required": [
          "organisationId",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(organisational)$",
            "type": "string"
          },
          "organisationId": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "additionalProperties": false,
        "description": "Organisation or operator that every returned offer must reference."
      },
      "postalAddress": {
        "required": [
          "addressLine1",
          "addressLine2"
        ],
        "type": "object",
        "properties": {
          "placeId": {
            "$ref": "#/components/schemas/placeReference"
          },
          "addressLine1": {
            "$ref": "#/components/schemas/longString"
          },
          "addressLine2": {
            "$ref": "#/components/schemas/longString"
          },
          "street": {
            "$ref": "#/components/schemas/normalString"
          },
          "houseNumber": {
            "$ref": "#/components/schemas/normalInt"
          },
          "houseNumberAddition": {
            "$ref": "#/components/schemas/tinyString"
          },
          "postalCode": {
            "$ref": "#/components/schemas/shortString"
          },
          "city": {
            "$ref": "#/components/schemas/shortString"
          },
          "province": {
            "$ref": "#/components/schemas/shortString"
          },
          "state": {
            "$ref": "#/components/schemas/shortString"
          },
          "country": {
            "$ref": "#/components/schemas/country"
          },
          "additionalInfo": {
            "$ref": "#/components/schemas/longString"
          }
        },
        "additionalProperties": false,
        "description": "address parts, where addressLine1 and 2 should contain the complete address, matches Content-Language",
        "x-tm": "POSTAL ADDRESS"
      },
      "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"
      },
      "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"
        ]
      },
      "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"
        ]
      },
      "travellingAsset": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(asset)$",
            "type": "string"
          },
          "id": {
            "$ref": "#/components/schemas/assetReference"
          }
        }
      },
      "userProfile": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelParty"
          },
          {
            "required": [
              "id",
              "type"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/userProfileReference"
              },
              "type": {
                "pattern": "^(user_profile)$",
                "type": "string"
              },
              "count": {
                "$ref": "#/components/schemas/shortInt"
              },
              "minimumAge": {
                "$ref": "#/components/schemas/shortInt"
              },
              "maximumAge": {
                "$ref": "#/components/schemas/shortInt"
              },
              "monthDayOnWhichAgeApplies": {
                "$ref": "#/components/schemas/shortInt"
              },
              "ageGroup": {
                "type": "string",
                "enum": [
                  "ANYONE",
                  "INFANT",
                  "CHILD",
                  "YOUTH",
                  "ADULT",
                  "SENIOR"
                ]
              },
              "minimumHeight": {
                "$ref": "#/components/schemas/shortInt"
              },
              "maximumHeight": {
                "$ref": "#/components/schemas/shortInt"
              },
              "localResident": {
                "type": "boolean"
              },
              "genderLimitation": {
                "type": "boolean"
              }
            },
            "x-tm": "USER PROFILE"
          }
        ]
      },
      "commercialProfile": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(commercial_profile)$",
            "type": "string"
          },
          "code": {
            "$ref": "#/components/schemas/shortString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "x-tm": "COMMERCIAL PROFILE"
      },
      "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"
      },
      "equipmentParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(equipment)$",
            "type": "string"
          },
          "id": {
            "$ref": "#/components/schemas/equipmentReference"
          },
          "name": {
            "$ref": "#/components/schemas/shortString"
          },
          "description": {
            "$ref": "#/components/schemas/longString"
          },
          "infoLink": {
            "$ref": "#/components/schemas/url"
          },
          "image": {
            "$ref": "#/components/schemas/url"
          }
        },
        "x-tm": "EQUIPMENT VALIDITY PARAMETERS"
      },
      "temporalParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(temporal)$",
            "type": "string"
          },
          "startTime": {
            "$ref": "#/components/schemas/dateTime"
          },
          "endTime": {
            "$ref": "#/components/schemas/dateTime"
          },
          "duration": {
            "$ref": "#/components/schemas/normalInt"
          },
          "dayType": {
            "$ref": "#/components/schemas/day"
          }
        },
        "x-tm": "TEMPORAL VALIDITY PARAMETERS"
      },
      "spotReservationParameter": {
        "required": [
          "spot",
          "spotType",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(spot_reservation)$",
            "type": "string"
          },
          "spotType": {
            "type": "string",
            "enum": [
              "VEHICLE_SPOT",
              "PASSENGER_SPOT",
              "LUGGAGE_SPOT"
            ]
          },
          "deck": {
            "$ref": "#/components/schemas/externalReference"
          },
          "space": {
            "$ref": "#/components/schemas/externalReference"
          },
          "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/externalReference"
              }
            ]
          },
          "width": {
            "type": "number"
          },
          "length": {
            "type": "number"
          },
          "height": {
            "type": "number"
          },
          "fuel": {
            "type": "string"
          },
          "weight": {
            "type": "string"
          },
          "mode": {
            "$ref": "#/components/schemas/mode"
          }
        },
        "x-tm": "SEATING VALIDITY PARAMETERS"
      },
      "reservationRequirement": {
        "required": [
          "reservationPolicy",
          "spotType",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(reservation_requirement)$",
            "type": "string"
          },
          "spotType": {
            "type": "string",
            "description": "The kind of spot the reservation rule applies to.",
            "enum": [
              "VEHICLE_SPOT",
              "PASSENGER_SPOT",
              "LUGGAGE_SPOT"
            ]
          },
          "reservationPolicy": {
            "$ref": "#/components/schemas/reservationPolicy"
          },
          "sourceReservationPolicy": {
            "type": "string",
            "description": "Raw reservation policy from the upstream provider, when available."
          },
          "assetSelection": {
            "$ref": "#/components/schemas/assetSelection"
          },
          "serviceJourney": {
            "$ref": "#/components/schemas/serviceJourneyReference"
          },
          "fulfilledByAncillaries": {
            "type": "array",
            "description": "Ancillaries that can fulfill this reservation requirement when reservation is sold as a separate product.",
            "items": {
              "$ref": "#/components/schemas/ancillaryReference"
            }
          }
        },
        "x-tm": "SEATING RESERVATION REQUIREMENT"
      },
      "reservationPolicy": {
        "type": "string",
        "description": "Reservation policy used by clients to decide whether reservation UI is hidden, optional, recommended, or required.",
        "enum": [
          "NOT_POSSIBLE",
          "OPTIONAL",
          "RECOMMENDED",
          "COMPULSORY"
        ]
      },
      "assetSelection": {
        "type": "string",
        "description": "Whether a concrete asset, such as a seat, can be selected manually, assigned automatically, or is not available for this reservation.",
        "enum": [
          "NOT_AVAILABLE",
          "AUTO_ASSIGNED",
          "MANUAL_AVAILABLE"
        ]
      },
      "networkParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(network)$",
            "type": "string"
          },
          "location": {
            "$ref": "#/components/schemas/placeReference"
          },
          "line": {
            "$ref": "#/components/schemas/lineReference"
          },
          "zones": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/zoneReference"
            }
          }
        },
        "x-tm": "NETWORK VALIDITY PARAMETERS"
      },
      "routingParameter": {
        "required": [
          "journeyPattern",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(routing)$",
            "type": "string"
          },
          "journeyPattern": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/externalReference"
            }
          }
        },
        "x-tm": "ROUTING VALIDITY PARAMETERS"
      },
      "serviceParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(service)$",
            "type": "string"
          },
          "product": {
            "$ref": "#/components/schemas/productReference"
          },
          "asset": {
            "$ref": "#/components/schemas/assetReference"
          },
          "serviceJourney": {
            "$ref": "#/components/schemas/serviceJourneyReference"
          },
          "userNeeds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/userNeedReference"
            }
          },
          "class": {
            "$ref": "#/components/schemas/classOfUse"
          },
          "onboardStay": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/onboardStay"
            }
          },
          "accommodations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/accommodation"
            }
          }
        },
        "x-tm": "SERVICE VALIDITY PARAMETERS"
      },
      "onboardStay": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(onboard_stay)$",
            "type": "string"
          },
          "description": {
            "$ref": "#/components/schemas/longString"
          },
          "classOfUse": {
            "$ref": "#/components/schemas/classOfUse"
          },
          "permission": {
            "type": "boolean"
          },
          "duration": {
            "$ref": "#/components/schemas/shortString"
          }
        },
        "description": "Permission to board early before the journey or stay on board after the journey.",
        "x-tm": "ONBOARD STAY"
      },
      "accommodation": {
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(accommodation)$",
            "type": "string"
          },
          "description": {
            "$ref": "#/components/schemas/longString"
          },
          "classOfUse": {
            "$ref": "#/components/schemas/classOfUse"
          },
          "name": {
            "$ref": "#/components/schemas/shortString"
          },
          "gender": {
            "type": "string",
            "enum": [
              "M",
              "F",
              "X",
              "U"
            ]
          },
          "berthType": {
            "$ref": "#/components/schemas/berthType"
          },
          "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"
      },
      "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"
      },
      "organisationalParameter": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(organisational)$",
            "type": "string"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          },
          "legalName": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "x-tm": "ORGANISATIONAL VALIDITY PARAMETERS"
      },
      "cancellationParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(cancel)$",
            "type": "string"
          },
          "cancellationAllowed": {
            "type": "boolean",
            "description": "is it possible to cancel this package?"
          },
          "cancellationFee": {
            "$ref": "#/components/schemas/amountOfMoney"
          },
          "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"
          }
        ]
      },
      "purchaseParameter": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(purchase)$",
            "type": "string"
          },
          "maximumPeriodBeforeDeparture": {
            "$ref": "#/components/schemas/longInt"
          },
          "requiredLicenseTypes": {
            "maxItems": 5,
            "type": "array",
            "description": "ONE of these licenses is required to operate the asset",
            "items": {
              "$ref": "#/components/schemas/licenseType"
            }
          }
        },
        "description": "specify required information to complete a purchase",
        "x-tm": [
          {
            "concept": "PURCHASE WINDOW"
          },
          {
            "maximumPeriodBeforeDeparture": "MaximumPeriodBeforeDeparture"
          },
          {
            "requiredLicenseTypes": "ENTITLEMENT REQUIRED"
          }
        ]
      },
      "card": {
        "required": [
          "cardNumber",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(card)$",
            "type": "string"
          },
          "cardType": {
            "$ref": "#/components/schemas/cardType"
          },
          "cardNumber": {
            "$ref": "#/components/schemas/shortString"
          },
          "description": {
            "$ref": "#/components/schemas/shortString"
          },
          "additionalNumber": {
            "$ref": "#/components/schemas/shortString"
          },
          "endValidity": {
            "$ref": "#/components/schemas/date"
          },
          "country": {
            "$ref": "#/components/schemas/country"
          }
        },
        "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"
      },
      "cardType": {
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "pattern": "^(card_type)$",
            "type": "string"
          },
          "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"
            ]
          },
          "subCategory": {
            "$ref": "#/components/schemas/shortString"
          },
          "relatedProduct": {
            "$ref": "#/components/schemas/productReference"
          },
          "transportOrganisations": {
            "maxItems": 15,
            "type": "array",
            "description": "references to accepting parties, only if applicable",
            "items": {
              "$ref": "#/components/schemas/organisationReference"
            }
          },
          "customFields": {
            "$ref": "#/components/schemas/customProperties"
          }
        },
        "description": "A generic description of a CARD",
        "x-tm": "TYPE OF PAYMENT METHOD, MEDIUM ACCESS DEVICE"
      },
      "license": {
        "required": [
          "number",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(license)$",
            "type": "string"
          },
          "licenseType": {
            "$ref": "#/components/schemas/licenseType"
          },
          "licenseNumber": {
            "$ref": "#/components/schemas/shortString"
          },
          "endValidity": {
            "$ref": "#/components/schemas/date"
          }
        },
        "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"
      },
      "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"
          },
          "issuingCountry": {
            "$ref": "#/components/schemas/country"
          },
          "customFields": {
            "$ref": "#/components/schemas/customProperties"
          }
        },
        "description": "A category of license to use a certain asset class",
        "x-tm": "TYPE OF DRIVER PERMIT"
      },
      "guarantee": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/shortString"
          },
          "type": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "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"
          },
          "taxPercentageUsed": {
            "$ref": "#/components/schemas/float"
          },
          "currencyCode": {
            "$ref": "#/components/schemas/currencyCode"
          },
          "vatCountryCode": {
            "$ref": "#/components/schemas/country"
          }
        },
        "description": "an amount of money, usable in fares, fare calculations or in extra costs.",
        "x-tm": [
          {
            "concept": "FARE PRICE"
          }
        ]
      },
      "ancillaryCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(AncillaryCollection)$",
            "type": "string"
          },
          "ancillaries": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "properties": {
                  "$ref": "#/components/schemas/ancillary"
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "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"
            }
          }
        }
      },
      "changeOptionCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(ChangeOptionCollection)$",
            "type": "string"
          },
          "options": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "properties": {
                  "$ref": "#/components/schemas/changeOption"
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "links": {
            "type": "array",
            "description": "actions that can be performed on this collection",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "refundOptionCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(RefundOptionCollection)$",
            "type": "string"
          },
          "options": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "properties": {
                  "$ref": "#/components/schemas/refundOption"
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "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"
            }
          }
        }
      },
      "travelDocumentCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(TravelDocumentCollection)$",
            "type": "string"
          },
          "travelDocuments": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/components/schemas/normalString"
                },
                "properties": {
                  "discriminator": {
                    "propertyName": "type",
                    "mapping": {
                      "binary_ticket": "#/components/schemas/binaryTicket",
                      "external_ticket": "#/components/schemas/externalTicket",
                      "pending_ticket": "#/components/schemas/pendingTicket"
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/externalTicket"
                    },
                    {
                      "$ref": "#/components/schemas/binaryTicket"
                    },
                    {
                      "$ref": "#/components/schemas/pendingTicket"
                    }
                  ]
                },
                "links": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/link"
                  }
                }
              }
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "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"
            }
          }
        }
      },
      "ancillary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ancillaryReference"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(ancillary)$",
                "type": "string"
              },
              "price": {
                "$ref": "#/components/schemas/amountOfMoney"
              },
              "description": {
                "type": "string",
                "description": "A user-friendly description of the ancillary (e.g. 'Reserved seat for bike')."
              },
              "available": {
                "type": "integer",
                "description": "Number of items available in stock (inventory). Useful for creating urgency in GUI."
              },
              "service": {
                "type": "array",
                "description": "Service characteristics covered by this ancillary, such as service journey, class of use, asset, or accommodation.",
                "items": {
                  "$ref": "#/components/schemas/serviceParameter"
                }
              },
              "reservationRequirements": {
                "type": "array",
                "description": "Reservation rules carried by this ancillary.",
                "items": {
                  "$ref": "#/components/schemas/reservationRequirement"
                }
              },
              "links": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/link"
                }
              }
            },
            "x-tm": "ANCILLARY"
          }
        ]
      },
      "seat": {
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(seat)$",
            "type": "string"
          },
          "id": {
            "$ref": "#/components/schemas/externalReference"
          },
          "deck": {
            "$ref": "#/components/schemas/shortString"
          },
          "space": {
            "$ref": "#/components/schemas/shortString"
          },
          "row": {
            "$ref": "#/components/schemas/shortInt"
          },
          "seatNumber": {
            "$ref": "#/components/schemas/shortInt"
          },
          "facing": {
            "type": "string",
            "enum": [
              "FRONT",
              "REAR",
              "LEFT",
              "RIGHT",
              "OTHER"
            ]
          },
          "byWindow": {
            "type": "boolean"
          },
          "legSpace": {
            "$ref": "#/components/schemas/shortInt"
          },
          "byAisle": {
            "type": "boolean"
          },
          "hasArmRest": {
            "type": "boolean"
          },
          "hasTray": {
            "type": "boolean"
          },
          "hasAirco": {
            "type": "boolean"
          },
          "hasEnergySupply": {
            "type": "boolean"
          },
          "hasLight": {
            "type": "boolean"
          }
        }
      },
      "asset": {
        "properties": {
          "type": {
            "pattern": "^(asset)$",
            "type": "string"
          },
          "id": {
            "$ref": "#/components/schemas/assetReference"
          },
          "visualId": {
            "$ref": "#/components/schemas/shortString"
          },
          "product": {
            "$ref": "#/components/schemas/productReference"
          },
          "mode": {
            "$ref": "#/components/schemas/mode"
          },
          "subMode": {
            "$ref": "#/components/schemas/normalString"
          },
          "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"
      },
      "changeOption": {
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(change_option)$",
            "type": "string"
          },
          "id": {
            "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"
            }
          }
        }
      },
      "refundOption": {
        "type": "object",
        "properties": {
          "type": {
            "pattern": "^(refund_option)$",
            "type": "string"
          },
          "id": {
            "$ref": "#/components/schemas/uuid"
          },
          "packageState": {
            "$ref": "#/components/schemas/packageStatus"
          },
          "refundType": {
            "type": "string",
            "enum": [
              "PACKAGE_REFUND",
              "REMOVE_TRAVELLER",
              "REMOVE_ANCILLARY"
            ]
          },
          "consequences": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/financialDetail"
            }
          }
        }
      },
      "country": {
        "maxLength": 2,
        "minLength": 2,
        "pattern": "[A-Z]{2}",
        "type": "string",
        "description": "two-letter country codes according to ISO 3166-1"
      },
      "currencyCode": {
        "maxLength": 3,
        "minLength": 3,
        "pattern": "[a-zA-Z]{3}",
        "type": "string",
        "description": "ISO 4217 currency code"
      },
      "customProperties": {
        "maxProperties": 20,
        "type": "object",
        "additionalProperties": true,
        "description": "dictionary for extra fields (bilatural agreements)"
      },
      "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"
            }
          }
        }
      },
      "binaryTicket": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelDocument"
          },
          {
            "required": [
              "base64",
              "contentType",
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(binary_ticket)$",
                "type": "string"
              },
              "contentType": {
                "type": "string",
                "description": "the media type (IANA)"
              },
              "base64": {
                "$ref": "#/components/schemas/longString"
              },
              "version": {
                "$ref": "#/components/schemas/tinyString"
              }
            },
            "description": "Binary information, like a image or certificate",
            "x-tm": "lacking"
          }
        ]
      },
      "externalTicket": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelDocument"
          },
          {
            "required": [
              "type"
            ],
            "type": "object",
            "properties": {
              "type": {
                "pattern": "^(external_ticket)$",
                "type": "string"
              }
            },
            "description": "External ticket, can be accessed using the links collection, with rel=ticket"
          }
        ],
        "x-tm": [
          {
            "concept": "TRAVEL DOCUMENT"
          }
        ]
      },
      "pendingTicket": {
        "allOf": [
          {
            "$ref": "#/components/schemas/travelDocument"
          },
          {
            "required": [
              "type"
            ],
            "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."
          }
        ]
      },
      "financialDetail": {
        "type": "object",
        "properties": {
          "amount": {
            "$ref": "#/components/schemas/amountOfMoney"
          },
          "package": {
            "$ref": "#/components/schemas/packageReference"
          },
          "offer": {
            "$ref": "#/components/schemas/offerReference"
          },
          "leg": {
            "$ref": "#/components/schemas/legReference"
          },
          "category": {
            "$ref": "#/components/schemas/paymentCategory"
          },
          "expirationDate": {
            "$ref": "#/components/schemas/dateTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/customProperties"
          }
        }
      },
      "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"
        ]
      },
      "externalReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "organisationReference": {
        "required": [
          "organisationId"
        ],
        "type": "object",
        "properties": {
          "organisationId": {
            "$ref": "#/components/schemas/normalString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "placeReference": {
        "required": [
          "placeId"
        ],
        "type": "object",
        "properties": {
          "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:)"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "customerInput": {
        "required": [
          "firstName",
          "lastName"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "$ref": "#/components/schemas/shortString"
          },
          "lastName": {
            "$ref": "#/components/schemas/shortString"
          },
          "initials": {
            "$ref": "#/components/schemas/tinyString"
          },
          "middleName": {
            "$ref": "#/components/schemas/shortString"
          },
          "prefix": {
            "$ref": "#/components/schemas/tinyString"
          },
          "postfix": {
            "$ref": "#/components/schemas/tinyString"
          },
          "email": {
            "$ref": "#/components/schemas/normalString"
          },
          "phoneNumber": {
            "pattern": "^[+][1-9][0-9]{6,14}$",
            "type": "string",
            "description": "Mobile phone number of the customer in E.164 format, with + and country code and no spaces or punctuation.",
            "examples": [
              "+4711111111"
            ]
          },
          "address": {
            "$ref": "#/components/schemas/postalAddress"
          },
          "dateOfBirth": {
            "$ref": "#/components/schemas/date"
          },
          "placeOfBirth": {
            "$ref": "#/components/schemas/shortString"
          },
          "countryOfBirth": {
            "$ref": "#/components/schemas/country"
          },
          "customProperties": {
            "$ref": "#/components/schemas/customProperties"
          },
          "externalReference": {
            "maxLength": 40,
            "minLength": 1,
            "type": "string",
            "description": "The client's own reference for this customer, unique within the organisation. Must not be blank. Leading and trailing whitespace is trimmed. Defaults to the customer number when not set. Can only be set when the customer is created. On replace it must be omitted or equal to the stored value. Use id, not this value, when referring to the customer elsewhere in the API."
          }
        },
        "description": "Customer details supplied when creating or replacing a customer. The id is the Entur customer number, assigned by the Entur Customer Profiles service, and must not be set here.",
        "x-tm": "TRANSPORT CUSTOMER"
      },
      "customer": {
        "description": "A customer record returned by the API.",
        "allOf": [
          {
            "$ref": "#/components/schemas/customerInput"
          },
          {
            "required": [
              "id"
            ],
            "type": "object",
            "properties": {
              "id": {
                "$ref": "#/components/schemas/normalString"
              }
            }
          }
        ],
        "x-tm": "TRANSPORT CUSTOMER"
      },
      "customerRef": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/normalString"
          }
        },
        "description": "Reference to an existing customer by id.",
        "x-tm": "TRANSPORT CUSTOMER"
      },
      "customerCollection": {
        "required": [
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "CustomerCollection"
            ]
          },
          "customers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/customer"
            }
          },
          "numberMatched": {
            "type": "integer"
          },
          "numberReturned": {
            "type": "integer"
          },
          "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"
            }
          }
        }
      },
      "customerReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "travellerReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "userProfileReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "productReference": {
        "required": [
          "name",
          "productId"
        ],
        "type": "object",
        "properties": {
          "productId": {
            "$ref": "#/components/schemas/normalString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "offerReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "packageReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "legReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "usageValidityPeriodReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "frequencyOfUseReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "lineReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "zoneReference": {
        "required": [
          "zoneId"
        ],
        "type": "object",
        "properties": {
          "zoneId": {
            "$ref": "#/components/schemas/normalString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "assetReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "ancillaryReference": {
        "required": [
          "ancillaryId"
        ],
        "type": "object",
        "properties": {
          "ancillaryId": {
            "$ref": "#/components/schemas/normalString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "equipmentReference": {
        "required": [
          "equipmentId"
        ],
        "type": "object",
        "properties": {
          "equipmentId": {
            "$ref": "#/components/schemas/normalString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "serviceJourneyReference": {
        "$ref": "#/components/schemas/normalString"
      },
      "userNeedReference": {
        "required": [
          "id"
        ],
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/normalString"
          },
          "name": {
            "$ref": "#/components/schemas/normalString"
          }
        }
      },
      "error": {
        "required": [
          "category",
          "code",
          "detail",
          "hint",
          "status",
          "title",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/url"
          },
          "title": {
            "$ref": "#/components/schemas/shortString"
          },
          "status": {
            "$ref": "#/components/schemas/httpStatus"
          },
          "detail": {
            "$ref": "#/components/schemas/longString"
          },
          "instance": {
            "$ref": "#/components/schemas/url"
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "code": {
            "type": "string",
            "description": "Stable machine-readable problem code."
          },
          "category": {
            "type": "string",
            "description": "Public problem category used by curated problems.",
            "enum": [
              "authorization",
              "validation",
              "downstream",
              "state",
              "resource",
              "availability",
              "server"
            ]
          },
          "hint": {
            "type": "string",
            "description": "Short client-facing remediation hint."
          },
          "context": {
            "type": "object",
            "additionalProperties": true,
            "description": "Safe structured context fields for the problem."
          }
        },
        "additionalProperties": true,
        "description": "JSON schema for exceptions based on RFC 7807"
      },
      "landingPage": {
        "required": [
          "links"
        ],
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "examples": [
              "Example processing server"
            ]
          },
          "description": {
            "type": "string",
            "examples": [
              "Example server implementing the OGC API - Processes 1.0 Standard"
            ]
          },
          "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."
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "collections": {
        "required": [
          "collections",
          "links"
        ],
        "type": "object",
        "properties": {
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "timeStamp": {
            "type": "string",
            "format": "date-time"
          },
          "numberMatched": {
            "minimum": 0,
            "type": "integer",
            "examples": [
              1
            ]
          },
          "numberReturned": {
            "minimum": 0,
            "type": "integer",
            "examples": [
              1
            ]
          },
          "collections": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/collectionInfo"
            }
          }
        }
      },
      "collectionInfo": {
        "required": [
          "id",
          "links"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "identifier of the collection used, for example, in URIs",
            "examples": [
              "dem"
            ]
          },
          "title": {
            "type": "string",
            "description": "human readable title of the collection",
            "examples": [
              "Digital Elevation Model"
            ]
          },
          "description": {
            "type": "string",
            "description": "a description of the data in the collection",
            "examples": [
              "A Digital Elevation Model."
            ]
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          },
          "extent": {
            "type": "object",
            "externalDocs": {
              "url": "https://raw.githubusercontent.com/opengeospatial/ogcapi-processes/refs/heads/master/openapi/schemas/common-geodata/extent-uad.yaml"
            }
          },
          "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"
          },
          "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"
              ]
            ]
          },
          "dataType": {
            "$ref": "#/components/schemas/dataType"
          },
          "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"
          },
          "minScaleDenominator": {
            "type": "number",
            "description": "Minimum scale denominator for usage of the collection"
          },
          "maxScaleDenominator": {
            "type": "number",
            "description": "Maximum scale denominator for usage of the collection"
          },
          "minCellSize": {
            "type": "number",
            "description": "Minimum cell size for usage of the collection"
          },
          "maxCellSize": {
            "type": "number",
            "description": "Maximum cell size for usage of the collection"
          }
        }
      },
      "dataType": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "string",
            "enum": [
              "map",
              "vector",
              "coverage"
            ]
          }
        ]
      },
      "processList": {
        "required": [
          "links",
          "processes"
        ],
        "type": "object",
        "properties": {
          "processes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/processSummary"
            }
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/link"
            }
          }
        }
      },
      "processSummary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/descriptionType"
          },
          {
            "required": [
              "id",
              "version"
            ],
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "version": {
                "type": "string"
              },
              "jobControlOptions": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/jobControlOptions"
                }
              },
              "links": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/link"
                }
              }
            }
          }
        ]
      },
      "jobControlOptions": {
        "type": "string",
        "enum": [
          "sync-execute",
          "async-execute",
          "dismiss"
        ]
      },
      "descriptionType": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "metadata": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/metadata"
            }
          }
        }
      },
      "metadata": {
        "oneOf": [
          {
            "allOf": [
              {
                "$ref": "#/components/schemas/link"
              },
              {
                "type": "object",
                "properties": {
                  "role": {
                    "type": "string"
                  }
                }
              }
            ]
          },
          {
            "type": "object",
            "properties": {
              "role": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "lang": {
                "type": "string"
              },
              "value": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "type": "object"
                  }
                ]
              }
            }
          }
        ]
      },
      "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)"
          },
          "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"
            ]
          },
          "description": {
            "type": "string",
            "description": "the description of the external data source"
          },
          "body": {
            "type": "object",
            "description": "the (prefilled) body for the request"
          },
          "headers": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "isMandatory": {
            "type": "boolean",
            "description": "is this link informative, or must it be used?"
          },
          "hash": {
            "type": "string",
            "description": "to validate that the content of the link hasn't been changed."
          },
          "validity": {
            "$ref": "#/components/schemas/temporalParameter"
          }
        },
        "additionalProperties": false,
        "x-externalDocs": {
          "url": "https://github.com/opengeospatial/ogcapi-processes/raw/refs/heads/master/openapi/schemas/common-core/link.yaml"
        }
      },
      "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}$"
      },
      "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$"
      },
      "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}))$"
      },
      "day": {
        "type": "string",
        "enum": [
          "MON",
          "TUE",
          "WED",
          "THU",
          "FRI",
          "SAT",
          "SUN"
        ],
        "x-tm": "DAY OF WEEK"
      },
      "float": {
        "minimum": 0,
        "type": "number",
        "description": "the travelled distance. Only if applicable.",
        "format": "float"
      },
      "longInt": {
        "minimum": 0,
        "type": "integer",
        "description": "long number, for distances etc. (>1.000)",
        "default": 0
      },
      "longString": {
        "maxLength": 10000,
        "type": "string",
        "description": "long string, memos etc (length 0-10.000)"
      },
      "normalInt": {
        "maximum": 1000,
        "minimum": 0,
        "type": "integer",
        "description": "default length for an integer (0-1000)",
        "default": 0
      },
      "normalString": {
        "maxLength": 200,
        "type": "string",
        "description": "default string, full names etc (length 0-200)"
      },
      "shortInt": {
        "maximum": 100,
        "minimum": 0,
        "type": "integer",
        "description": "a bit short integer (0-100)",
        "default": 0
      },
      "shortString": {
        "maxLength": 75,
        "type": "string",
        "description": "short string, display names (length 0-75)"
      },
      "tinyInt": {
        "maximum": 10,
        "minimum": 0,
        "type": "integer",
        "description": "for really small numbers (0-10)",
        "default": 0
      },
      "httpStatus": {
        "maximum": 599,
        "minimum": 100,
        "type": "integer",
        "description": "HTTP status code (100–599)"
      },
      "tinyString": {
        "maxLength": 10,
        "type": "string",
        "description": "real short string, codes (length 0-10)"
      },
      "url": {
        "type": "string",
        "description": "valid URL",
        "format": "uri"
      },
      "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}$"
      }
    },
    "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"
            }
          }
        }
      },
      "landingPageResponse": {
        "description": "The reponse containing a landing page",
        "headers": {
          "Version": {
            "$ref": "#/components/headers/version"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/landingPage"
            }
          },
          "text/html": {
            "schema": {
              "type": "string"
            }
          }
        }
      },
      "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": {
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          },
          "Version": {
            "$ref": "#/components/headers/version"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/confClasses"
            }
          },
          "text/html": {
            "schema": {
              "type": "string"
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "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"
              }
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "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"
          },
          "Entur-Order-Version": {
            "$ref": "#/components/headers/enturOrderVersion"
          },
          "Content-Language": {
            "$ref": "#/components/headers/contentLanguage"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/package"
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "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"
            }
          }
        }
      }
    },
    "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"
          ]
        }
      },
      "packageId": {
        "name": "packageId",
        "in": "query",
        "description": "the identifier of a package",
        "required": true,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "string"
        }
      },
      "optionalPackageId": {
        "name": "packageId",
        "in": "query",
        "description": "the identifier of a package (maps to Orders id)",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "type": "string"
        }
      },
      "optionalCustomerId": {
        "name": "customerId",
        "in": "query",
        "description": "optional customer identifier filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/customerReference"
        }
      },
      "optionalCustomerExternalReference": {
        "name": "externalReference",
        "in": "query",
        "description": "optional filter on the client's own customer reference",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "maxLength": 40,
          "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/customerReference"
        }
      },
      "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/customerReference"
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "optionalPackageOrderBy": {
        "name": "orderBy",
        "in": "query",
        "description": "optional package orderBy value, passed through to Orders orderBy",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "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"
          }
        }
      },
      "optionalCustomerFirstName": {
        "name": "firstName",
        "in": "query",
        "description": "optional first name filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/shortString"
        }
      },
      "optionalCustomerLastName": {
        "name": "lastName",
        "in": "query",
        "description": "optional last name filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/shortString"
        }
      },
      "optionalCustomerEmail": {
        "name": "email",
        "in": "query",
        "description": "optional email filter",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "optionalCustomerPhoneNumber": {
        "name": "phoneNumber",
        "in": "query",
        "description": "optional phone number filter, either in E.164 format (send + URL-encoded as %2B) or the national number without country code",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "pattern": "^([+][1-9][0-9]{6,14}|[0-9]{1,12})$",
          "type": "string"
        },
        "examples": {
          "default": {
            "value": "+4711111111"
          }
        }
      },
      "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"
        }
      },
      "customerId": {
        "name": "customerId",
        "in": "path",
        "description": "customer identifier",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "$ref": "#/components/schemas/customerReference"
        }
      },
      "authorization": {
        "name": "authorization",
        "in": "header",
        "description": "Header field, JWT must be supplied",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "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"
        }
      },
      "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"
        }
      },
      "legId": {
        "name": "legId",
        "in": "query",
        "description": "leg identifier",
        "required": true,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/legReference"
        }
      },
      "optionalLegId": {
        "name": "legId",
        "in": "query",
        "description": "leg identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/legReference"
        }
      },
      "optionalTravellerId": {
        "name": "travellerId",
        "in": "query",
        "description": "traveller identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/travellerReference"
        }
      },
      "optionalAncillaryId": {
        "name": "ancillaryId",
        "in": "query",
        "description": "ancillary identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/externalReference"
        }
      },
      "optionalProductId": {
        "name": "productId",
        "in": "query",
        "description": "Product identifier",
        "required": false,
        "style": "form",
        "explode": true,
        "schema": {
          "$ref": "#/components/schemas/normalString"
        }
      },
      "productId": {
        "name": "productId",
        "in": "query",
        "description": "Product 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
        }
      },
      "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"
          }
        }
      },
      "ET-Client-Name": {
        "name": "ET-Client-Name",
        "in": "header",
        "description": "Entur 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>`.",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      },
      "X-Correlation-Id": {
        "name": "X-Correlation-Id",
        "in": "header",
        "description": "Correlation id",
        "required": false,
        "style": "simple",
        "explode": false,
        "schema": {
          "type": "string"
        }
      }
    },
    "headers": {
      "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"
        }
      },
      "version": {
        "description": "the version used to format the response",
        "required": true,
        "style": "simple",
        "explode": false,
        "schema": {
          "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"
        }
      },
      "digest": {
        "description": "the hash of the body, SHA-256 (\"SHA-256=3q2+7w==:\")",
        "required": false,
        "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"
        }
      }
    },
    "securitySchemes": {
      "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"
      },
      "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/"
            }
          }
        }
      }
    }
  }
}