|
314 | 314 | * __Dynamic pricing__ – allowing the <a>Broker</a> to vary pricing, where agreed with the <a>Seller</a>
|
315 | 315 | * __Booking approval__ – optional approval for <a>Booking Systems</a> that support or require approval for bookings
|
316 | 316 | * __Cancellation__ – <a>Customer</a> and <a>Seller</a> initiated cancellation
|
| 317 | +* __Access control__ - text, images and barcodes that can be used by the <a>Customer</a> to access the activity |
317 | 318 |
|
318 | 319 | ### Out of Scope in this version
|
319 | 320 |
|
|
326 | 327 | * business-to-business tax calculation
|
327 | 328 | * cancellation fees
|
328 | 329 | * "subscriptions" to allow a <a>Customer</a> to participate ad-hoc in a <a>Seller's</a> activity, with such participation recorded for later reconciliation
|
| 330 | +* refunds/cancellations after the opportunity has occurred |
329 | 331 | * back-office systems between <a>Broker</a> and <a>Booking System</a>, such as for payment reconciliation
|
330 | 332 |
|
331 | 333 | It is possible that future versions of this specification may include support
|
|
344 | 346 | The functionality that is currently defined as out of scope includes:
|
345 | 347 |
|
346 | 348 | * __API authentication and security__ – while the specification recommends some best practices relating to authentication and security it does not mandate a specific means of securing an API. Implementers are free to choose the system that offers the best security for their platform and users.
|
347 |
| -* __Payment processing__ – the design assumes that all payment handling will be carried out by the third-party application, in a separate payment flow. Booking systems and application developers are able to use the payment and reconciliation mechanisms that provide the best options for their <a>Customers</a>. |
348 |
| -* __API business models__ – the design is agnostic to any business models that might govern the use of the API, e.g. revenue-sharing or transaction processing fees |
| 349 | +* __Payment processing__ – the design assumes that all payment handling will be coordinated by the <a>Broker</a>, in a separate payment flow. <a>Brokers</a> are able to use the payment and reconciliation mechanisms that provide the best options for their <a>Sellers</a> and <a>Customers</a>. |
| 350 | +* __API business models__ – the design is agnostic to any business models that might govern the use or provision of the API, e.g. revenue-sharing or transaction processing fees. |
349 | 351 | * __Opportunity discovery__ – finding, filtering and searching for opportunity data. This specification assumes that the client and server applications have already shared data about the relevant opportunities, e.g. via [[RPDE]] feed containing [[Modelling-Opportunity-Data]] data.
|
350 | 352 | * __API endpoint discovery__ – the <a>Broker</a> finding and connecting to the API endpoints included in this specification are included in the [[Dataset-API-Discovery]] specification.
|
351 | 353 |
|
|
433 | 435 |
|
434 | 436 | <dl class="typography">
|
435 | 437 | <dt><dfn>Customer</dfn></dt>
|
436 |
| - <dd>The user who places a booking using an application provided by |
437 |
| - a <a>Broker</a>. The <a>Customer</a> is not necessarily the attendee, |
438 |
| - so e.g. a parent may book on behalf of their child.</dd> |
| 438 | + <dd>The user who places a booking using an application provided by a <a>Broker</a>. The <a>Customer</a> is not necessarily the attendee, so e.g. a parent may book on behalf of their child.</dd> |
439 | 439 | <dt><dfn>Broker</dfn></dt>
|
440 |
| - <dd>The organisation or developer providing an application that |
441 |
| - allows <a>Customers</a> to make bookings. Those applications will be |
442 |
| - clients of the API defined in this specification</dd> |
| 440 | + <dd>The organisation or developer providing an application that allows <a>Customers</a> to make bookings. Those applications will be clients of the API defined in this specification</dd> |
443 | 441 | <dt><dfn>Booking System</dfn></dt>
|
444 |
| - <dd>The organisation or developer providing an application that |
445 |
| - maintains bookable inventory on behalf of the <a>Seller</a>. |
446 |
| - The platform or service that provides a server-side implementation |
447 |
| - of this API. |
| 442 | + <dd>The organisation or developer providing an application that maintains bookable inventory on behalf of the <a>Seller</a>. The platform or service that provides a server-side implementation of this API. |
448 | 443 | </dd>
|
449 | 444 | <dt><dfn>Seller</dfn></dt>
|
450 |
| - <dd>The organisation providing access to events or facilities |
451 |
| - via a <a>Booking System</a>. e.g. a leisure provider running yoga classes.</dd> |
| 445 | + <dd>The organisation providing access to events or facilities via a <a>Booking System</a>. e.g. a leisure provider running yoga classes.</dd> |
452 | 446 | <dt><dfn>Payment Provider</dfn></dt>
|
453 |
| - <dd>The organisation providing payment processing between the |
454 |
| - <a>Customer</a>, <a>Broker</a> and |
455 |
| - <a>Seller</a>.</dd> |
| 447 | + <dd>The notional service providing payment processing between the <a>Customer</a>, <a>Broker</a> and <a>Seller</a>. Although this specification refers to the <a>Payment Provider</a> as a single notional service, it may in reality be composed of multiple connected services providing the same functionality to allow for the widest variety of business models.</dd> |
456 | 448 | </dl>
|
457 | 449 |
|
458 | 450 | </section>
|
|
979 | 971 |
|
980 | 972 | <div class="issue" data-number="97"></div>
|
981 | 973 |
|
| 974 | +### Refund after the opportunity has occurred |
| 975 | + |
| 976 | +Although a cancellation may be requested before the opportunity has occurred in order to trigger a refund, cancellation and refund after an opportunity has occurred is currently outside the scope of this specification. |
| 977 | + |
| 978 | +Full and partial refunds after an opportunity has occurred MUST be handled out-of-band directly between the <a>Broker</a> and the <a>Seller</a>. |
| 979 | + |
982 | 980 | ### Customer requested cancellation
|
983 | 981 |
|
984 | 982 | <figure>
|
|
1147 | 1145 | },
|
1148 | 1146 | </pre>
|
1149 | 1147 |
|
1150 |
| -Note that due to the variety of business models available in the OpenActive ecosystem, conformance to this specification requires that the use of any native payment functionality in the <a>Booking System</a> be optional, and the <a>Booking System</a> MUST always accept a lack of `paymentMethod` as indication of an external **Payment Processor** being used. To maximise flexibility of this extension point, `identifier` and `name` within `Payment` are NOT REQUIRED if `paymentMethod` is specified. |
| 1148 | +Note that due to the variety of business models available in the OpenActive ecosystem, conformance to this specification requires that the use of any native payment functionality in the <a>Booking System</a> be optional, and the <a>Booking System</a> MUST always accept a lack of `paymentMethod` as indication of an external <a>Payment Processor</a> being used. To maximise flexibility of this extension point, `identifier` and `name` within `Payment` are NOT REQUIRED if `paymentMethod` is specified. |
| 1149 | + |
1151 | 1150 |
|
| 1151 | +## Access control |
1152 | 1152 |
|
1153 |
| -## Extension point for access control |
| 1153 | +For opportunities based at locations that have access control, it is RECOMMENDED that `OrderItem` include unique access control data within `accessCode` and `accessToken`. An `accessCode` SHOULD be provided for manual use in the event that an `accessToken` fails. |
1154 | 1154 |
|
1155 |
| -For opportunities based at locations that have access control, it is RECOMMENDED that `OrderItem` include unique access control data within `accessToken`. |
| 1155 | +### Text-based access control |
1156 | 1156 |
|
1157 |
| -<pre class="example" title="Example of accessToken"> |
| 1157 | +PIN codes, Order identifiers, or simply the e-mail address of the <a>Customer</a> are all permissible for the purposes of access control. |
| 1158 | + |
| 1159 | +In keeping with the Schema.org definition of `PropertyValue`, the `name` property SHOULD be used for the name of the property, and the `description` property SHOULD be used for any human-readable access control code(s). |
| 1160 | + |
| 1161 | +<pre class="example" title="Example of accessCode used for a PIN Code"> |
| 1162 | + "accessCode": [ |
| 1163 | + { |
| 1164 | + "type": "PropertyValue", |
| 1165 | + "name": "PIN Code", |
| 1166 | + "description": "1234" |
| 1167 | + } |
| 1168 | + ], |
| 1169 | +</pre> |
| 1170 | + |
| 1171 | +<pre class="example" title="Example of accessCode used for a booking reference"> |
| 1172 | + "accessCode": [ |
| 1173 | + { |
| 1174 | + "type": "PropertyValue", |
| 1175 | + "name": "Booking Reference", |
| 1176 | + "description": "123456789" |
| 1177 | + } |
| 1178 | + ], |
| 1179 | +</pre> |
| 1180 | + |
| 1181 | +### Image-based access control |
| 1182 | + |
| 1183 | +Images to be displayed to provide access, for example access tickets rendered by the booking system, MAY be included as an `ImageObject` within the `accessToken` array. |
| 1184 | + |
| 1185 | +<pre class="example" title="Example of ImageObject in accessToken"> |
| 1186 | + "accessToken": [ |
| 1187 | + { |
| 1188 | + "type": "ImageObject", |
| 1189 | + "url": "https://access.example.com/476ac24c694da79c5e33731ebbb5f1" |
| 1190 | + } |
| 1191 | + ], |
| 1192 | +</pre> |
| 1193 | + |
| 1194 | +### Extension point for barcode-based access control |
| 1195 | + |
| 1196 | +Access barcodes to be rendered by the <a>Broker</a> MAY be included as a `Barcode` within the `accessToken` array. Note that `Barcode` subclasses `ImageObject`, allowing it to contain a rendered barcode image URL in addition to the raw barcode details. |
| 1197 | + |
| 1198 | +Due to the variety of barcode formats available, the specification expects the `Barcode` to include additional properties using a custom namespace, enough to allow the barcode to be reproduced by the <a>Broker</a>. This will help inform future versions of the specification. |
| 1199 | + |
| 1200 | +<pre class="example" title="Example of Barcode in accessToken"> |
1158 | 1201 | "accessToken": [
|
1159 | 1202 | {
|
1160 | 1203 | "type": "Barcode",
|
|
1164 | 1207 | ],
|
1165 | 1208 | </pre>
|
1166 | 1209 |
|
1167 |
| -Due to the variety of Barcode and QR code formats available, the specification expects the `Barcode` to include additional properties using a custom namespace, enough to allow the barcode to be reproduced by the <a>Broker</a>. This will help inform future versions of the specification. |
1168 |
| - |
1169 |
| - |
1170 | 1210 | </section>
|
1171 | 1211 |
|
1172 | 1212 |
|
|
1491 | 1531 | | [`oa:unitTaxSpecification`](https://openactive.io/unitTaxSpecification) | - | REQUIRED | Array of [`oa:TaxChargeSpecification`](https://openactive.io/TaxChargeSpecification) | Breakdown of tax payable for the OrderItem. |
|
1492 | 1532 | | [`schema:acceptedOffer`](http://schema.org/acceptedOffer) | REQUIRED | REQUIRED | [`schema:Offer`](https://schema.org/Offer) | The offer from the associated `orderedItem` that has been selected by the <a>Customer</a>. The price of which includes or excludes tax depending on the `taxMode` of the `Order`. |
|
1493 | 1533 | | [`schema:orderedItem`](http://schema.org/orderedItem) | REQUIRED | REQUIRED | [`oa:ScheduledSession`](https://openactive.io/ScheduledSession), [`oa:Slot`](https://openactive.io/Slot), [`oa:HeadlineEvent`](https://openactive.io/HeadlineEvent), [`schema:Event`](https://schema.org/Event) or [`schema:CourseInstance`](https://schema.org/CourseInstance) | The specific bookable Thing that has been selected by the <a>Customer</a>. See the [[Modelling-Opportunity-Data]] for more information on these types. Note that the Broker Request and Orders feed only requires `id` within these objects to be included, all other properties are ignored. |
|
1494 |
| -| [`oa:accessToken`](https://openactive.io/accessToken) | - | RECOMMENDED | Array of [`schema:Barcode`](https://schema.org/Barcode) | `Barcode` that contains reference to an asset (e.g. Barcode, QR code image or PDF) usable for entrance, not applicable for an `OrderQuote`. | |
| 1534 | +| [`schema:accessCode`](https://schema.org/accessCode) | - | RECOMMENDED | Array of [`schema:PropertyValue`](https://schema.org/PropertyValue) | `PropertyValue` that contains a text value usable for entrance. Not applicable for an `OrderQuote`. | |
| 1535 | +| [`oa:accessToken`](https://openactive.io/accessToken) | - | RECOMMENDED | Array of [`schema:ImageObject`](https://schema.org/ImageObject) | `ImageObject` or `Barcode` that contains reference to an asset (e.g. Barcode, QR code image or PDF) usable for entrance. Not applicable for an `OrderQuote`. | |
1495 | 1536 | | [`oa:error`](https://openactive.io/error) | - | REQUIRED | Array of [`oa:OpenBookingError`](https://openactive.io/OpenBookingError) | Array of errors related to the OrderItem being included in the Order, only applicable for an `OrderQuote`. |
|
1496 | 1537 | | [`oa:cancellationMessage`](https://openactive.io/cancellationMessage) | - | OPTIONAL | [`schema:Text`](https://schema.org/Text) | A message set by the <a>Seller</a> in the event of opportunity cancellation, only applicable for an `Order` and where the `OrderItem` has `orderItemStatus` set to `https://openactive.io/SellerCancelled` |
|
1497 | 1538 |
|
|
0 commit comments