You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: EditorsDraft/edit.html
+3-1
Original file line number
Diff line number
Diff line change
@@ -761,6 +761,8 @@
761
761
762
762
The cancellation may be requested by either the **Customer** or the **Seller**, and results in an updated `Order` item on the RPDE feed. Once a cancellation status is placed on an `OrderItem` within an `Order` in the RPDE feed it is assumed by the **Booking System** to have been processed, and it MUST NOT be reversed. A new `Order` will need to created to reinstate the booking.
763
763
764
+
<divclass="issue" data-number="97"></div>
765
+
764
766
### Customer requested cancellation
765
767
766
768
<figure>
@@ -1087,7 +1089,7 @@
1087
1089
It is the responsibility of **Booking Systems** to advertise the URL for
1088
1090
further activity in the booking workflow at the point of need. For example they
1089
1091
MUST advertise the URL for the `OrderItem` resource in the Orders RPDE Feed feed
1090
-
by including the `id` property.
1092
+
by including the `id` property within the `OrderItem`.
<timeclass="dt-published" datetime="2019-02-20">20 February 2019</time>
687
+
<timeclass="dt-published" datetime="2019-02-21">21 February 2019</time>
688
688
</h2>
689
689
<dl>
690
690
@@ -1018,7 +1018,9 @@ <h2>
1018
1018
<p>Cons:</p>
1019
1019
<ul>
1020
1020
<li>Including price overrides slightly increases complexity of implementation.</li>
1021
-
</ul></div></section></section><sectionclass="normative" id="order-operations"><!--OddPage--><h2id="x8-order-operations"><spanclass="secno">8. </span>Order Operations<aclass="self-link" aria-label="§" href="#order-operations"></a></h2><sectionid="amending-the-orderquote-before-b"><h3id="x8-1-amending-the-orderquote-before-b"><spanclass="secno">8.1 </span>Amending the OrderQuote before <strong>B</strong><aclass="self-link" aria-label="§" href="#amending-the-orderquote-before-b"></a></h3><p>The <strong>Broker</strong><emclass="rfc2119" title="MAY">MAY</em> call <strong>C1</strong> and <emclass="rfc2119" title="MUST">MUST</em> call <strong>C2</strong> when the <strong>Customer</strong> updates their basket to add and remove items.</p><p>When repeated calls to <strong>C1</strong> or <strong>C2</strong> are made with the same UUID, the <strong>Booking System</strong><emclass="rfc2119" title="MUST">MUST</em> expire the leases of items that have been removed from the basket.</p><p>All leases may be cancelled by submitting an <code>OrderQuote</code> with the same UUID but without any <code>orderItem</code>s as either <strong>C1</strong> or <strong>C2</strong>. The <strong>Broker</strong><emclass="rfc2119" title="SHOULD">SHOULD</em> make a reasonable attempt to cancel all leases when it is aware that a <strong>Customer</strong> has abandoned their journey. For <strong>Booking Systems</strong> that have not implemented leasing, an <code>OrderQuote</code> without any <code>orderItem</code>s can simply be ignored.</p></section><sectionid="cancellation-after-b"><h3id="x8-2-cancellation-after-b"><spanclass="secno">8.2 </span>Cancellation after <strong>B</strong><aclass="self-link" aria-label="§" href="#cancellation-after-b"></a></h3><p>Either the whole <code>Order</code> or individual <code>OrderItem</code>s within the <code>Order</code> may be cancelled after <strong>B</strong>, however <code>OrderItem</code>s cannot be replaced or added to an existing <code>Order</code> within this version of the specification.</p><p>The cancellation may be requested by either the <strong>Customer</strong> or the <strong>Seller</strong>, and results in an updated <code>Order</code> item on the RPDE feed. Once a cancellation status is placed on an <code>OrderItem</code> within an <code>Order</code> in the RPDE feed it is assumed by the <strong>Booking System</strong> to have been processed, and it <emclass="rfc2119" title="MUST NOT">MUST NOT</em> be reversed. A new <code>Order</code> will need to created to reinstate the booking.</p><sectionid="customer-requested-cancellation"><h4id="x8-2-1-customer-requested-cancellation"><spanclass="secno">8.2.1 </span>Customer requested cancellation<aclass="self-link" aria-label="§" href="#customer-requested-cancellation"></a></h4><figureid="fig-customer-requested-cancellation"><imgsrc="customercancelled.png" alt="Customer requested cancellation" height="529" width="765">
1021
+
</ul></div></section></section><sectionclass="normative" id="order-operations"><!--OddPage--><h2id="x8-order-operations"><spanclass="secno">8. </span>Order Operations<aclass="self-link" aria-label="§" href="#order-operations"></a></h2><sectionid="amending-the-orderquote-before-b"><h3id="x8-1-amending-the-orderquote-before-b"><spanclass="secno">8.1 </span>Amending the OrderQuote before <strong>B</strong><aclass="self-link" aria-label="§" href="#amending-the-orderquote-before-b"></a></h3><p>The <strong>Broker</strong><emclass="rfc2119" title="MAY">MAY</em> call <strong>C1</strong> and <emclass="rfc2119" title="MUST">MUST</em> call <strong>C2</strong> when the <strong>Customer</strong> updates their basket to add and remove items.</p><p>When repeated calls to <strong>C1</strong> or <strong>C2</strong> are made with the same UUID, the <strong>Booking System</strong><emclass="rfc2119" title="MUST">MUST</em> expire the leases of items that have been removed from the basket.</p><p>All leases may be cancelled by submitting an <code>OrderQuote</code> with the same UUID but without any <code>orderItem</code>s as either <strong>C1</strong> or <strong>C2</strong>. The <strong>Broker</strong><emclass="rfc2119" title="SHOULD">SHOULD</em> make a reasonable attempt to cancel all leases when it is aware that a <strong>Customer</strong> has abandoned their journey. For <strong>Booking Systems</strong> that have not implemented leasing, an <code>OrderQuote</code> without any <code>orderItem</code>s can simply be ignored.</p></section><sectionid="cancellation-after-b"><h3id="x8-2-cancellation-after-b"><spanclass="secno">8.2 </span>Cancellation after <strong>B</strong><aclass="self-link" aria-label="§" href="#cancellation-after-b"></a></h3><p>Either the whole <code>Order</code> or individual <code>OrderItem</code>s within the <code>Order</code> may be cancelled after <strong>B</strong>, however <code>OrderItem</code>s cannot be replaced or added to an existing <code>Order</code> within this version of the specification.</p><p>The cancellation may be requested by either the <strong>Customer</strong> or the <strong>Seller</strong>, and results in an updated <code>Order</code> item on the RPDE feed. Once a cancellation status is placed on an <code>OrderItem</code> within an <code>Order</code> in the RPDE feed it is assumed by the <strong>Booking System</strong> to have been processed, and it <emclass="rfc2119" title="MUST NOT">MUST NOT</em> be reversed. A new <code>Order</code> will need to created to reinstate the booking.</p><divclass="issue" id="issue-container-number-97"><divrole="heading" class="issue-title marker" id="h-issue-0" aria-level="4"><ahref="https://github.com/openactive/open-booking-api/issues/97"><spanclass="issue-number">Issue 97</span></a><spanstyle="text-transform: none">: Arbitrary refunds are not in scope <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>Refunds are only permitted for entire items, and partial item refunds (including cancellation fees) are not in scope for this version of the specification.</p>
1022
+
<p>Although it is understood that some booking systems support partial item refunds, this is a superset of the functionality currently offered within the specification, so should not be an issue for refunds triggered due to cancellations via the <strong>Broker</strong>. As it stands <strong>Seller</strong> requested cancellation will be limited to whole item refunds and no cancellation fees.</p>
1023
+
<p>Please comment if partial item refunds or cancellation fees are essential to your usecase.</p></div><sectionid="customer-requested-cancellation"><h4id="x8-2-1-customer-requested-cancellation"><spanclass="secno">8.2.1 </span>Customer requested cancellation<aclass="self-link" aria-label="§" href="#customer-requested-cancellation"></a></h4><figureid="fig-customer-requested-cancellation"><imgsrc="customercancelled.png" alt="Customer requested cancellation" height="529" width="765">
</figure><p>To cancel an existing OrderItem, the <strong>Broker</strong><emclass="rfc2119" title="MUST">MUST</em>:</p><ol>
1024
1026
<li><p>Use the latest state of the <code>Order</code> from the RPDE feed to determine which <code>OrderItem</code>s may be cancelled. If <code>allowSimpleCancellation</code> is <code>true</code>, a PATCH against the <code>OrderItem</code>
@@ -1028,7 +1030,7 @@ <h2>
1028
1030
</li>
1029
1031
<li><p>Process any refunds based on the resulting updates to the RPDE feed. Successfully cancelled <code>OrderItems</code> will have <code>orderItemStatus</code> set to <code>https://openactive.io/CustomerCancelled</code>. Note refunds <emclass="rfc2119" title="MUST NOT">MUST NOT</em> be processed except in response to updates in the RPDE feed.</p>
1030
1032
</li>
1031
-
</ol><p>To cancel an entire <code>Order</code>, a PATCH request must be made to each <code>OrderItem</code> within it individually. To minimise the number of updates in the RPDE feed, it is recommended that multiple DELETEs are sent in quick succession.</p><divclass="issue" id="issue-container-number-92"><divrole="heading" class="issue-title marker" id="h-issue-0" aria-level="5"><ahref="https://github.com/openactive/open-booking-api/issues/92"><spanclass="issue-number">Issue 92</span></a><spanstyle="text-transform: none">: Allow whole Order cancellation? <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>Should we allow the cancellation of a whole <code>Order</code>?</p>
1033
+
</ol><p>To cancel an entire <code>Order</code>, a PATCH request must be made to each <code>OrderItem</code> within it individually. To minimise the number of updates in the RPDE feed, it is recommended that multiple DELETEs are sent in quick succession.</p><divclass="issue" id="issue-container-number-92"><divrole="heading" class="issue-title marker" id="h-issue-1" aria-level="5"><ahref="https://github.com/openactive/open-booking-api/issues/92"><spanclass="issue-number">Issue 92</span></a><spanstyle="text-transform: none">: Allow whole Order cancellation? <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>Should we allow the cancellation of a whole <code>Order</code>?</p>
</div><p>The URLs in the example are only illustrative.</p><divclass="issue" id="issue-container-number-95"><divrole="heading" class="issue-title marker" id="h-issue-1" aria-level="4"><ahref="https://github.com/openactive/open-booking-api/issues/95"><spanclass="issue-number">Issue 95</span></a><spanstyle="text-transform: none">: termsOfService is only provided at an Organization level <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>Scope reduction: <code>termsOfService</code> may now only be specified at the <code>seller</code>, <code>broker</code> or<br>
1206
+
</div><p>The URLs in the example are only illustrative.</p><divclass="issue" id="issue-container-number-95"><divrole="heading" class="issue-title marker" id="h-issue-2" aria-level="4"><ahref="https://github.com/openactive/open-booking-api/issues/95"><spanclass="issue-number">Issue 95</span></a><spanstyle="text-transform: none">: termsOfService is only provided at an Organization level <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>Scope reduction: <code>termsOfService</code> may now only be specified at the <code>seller</code>, <code>broker</code> or<br>
1205
1207
<code>bookingService</code> level, and may not be provided for a specific <code>Offer</code> or <code>OrderItem</code>.</p>
1206
1208
<p><code>Offer</code> or <code>OrderItem</code> level <code>termsOfService</code> is reserved for future versions of the specification.</p>
1207
1209
<p>Please comment if this is problematic.</p></div></section></section><sectionclass="normative" id="endpoints"><!--OddPage--><h2id="x9-endpoints"><spanclass="secno">9. </span>Endpoints<aclass="self-link" aria-label="§" href="#endpoints"></a></h2><p>This API has been defined around the concept of URL discovery. This
@@ -1287,7 +1289,7 @@ <h2>
1287
1289
for a specific action based on patterns within previously used URLs.</p><p>It is the responsibility of <strong>Booking Systems</strong> to advertise the URL for
1288
1290
further activity in the booking workflow at the point of need. For example they
1289
1291
<emclass="rfc2119" title="MUST">MUST</em> advertise the URL for the <code>OrderItem</code> resource in the Orders RPDE Feed feed
1290
-
by including the <code>id</code> property.</p><divclass="issue" id="issue-container-number-94"><divrole="heading" class="issue-title marker" id="h-issue-2" aria-level="4"><ahref="https://github.com/openactive/open-booking-api/issues/94"><spanclass="issue-number">Issue 94</span></a><spanstyle="text-transform: none">: URL Discovery using the Dataset Site <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>The specification proposes to centralise URL discovery in the Dataset site, along with the feeds themselves.</p>
1292
+
by including the <code>id</code> property within the <code>OrderItem</code>.</p><divclass="issue" id="issue-container-number-94"><divrole="heading" class="issue-title marker" id="h-issue-3" aria-level="4"><ahref="https://github.com/openactive/open-booking-api/issues/94"><spanclass="issue-number">Issue 94</span></a><spanstyle="text-transform: none">: URL Discovery using the Dataset Site <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>The specification proposes to centralise URL discovery in the Dataset site, along with the feeds themselves.</p>
1291
1293
<p>Feedback on this approach welcome.</p></div></section></section><sectionclass="normative" id="model"><!--OddPage--><h2id="x10-model"><spanclass="secno">10. </span>Model<aclass="self-link" aria-label="§" href="#model"></a></h2><sectionid="order-example"><h3id="x10-1-order-example"><spanclass="secno">10.1 </span>Order Example<aclass="self-link" aria-label="§" href="#order-example"></a></h3><divclass="example" id="example-7-example-of-order-model">
1292
1294
<divclass="marker">
1293
1295
<aclass="self-link" href="#example-7-example-of-order-model">Example 7</a><spanclass="example-title">: Example of Order model</span>
@@ -2427,7 +2429,7 @@ <h2>
2427
2429
of the specification they support.</p><p><strong>Booking Systems</strong><emclass="rfc2119" title="MAY">MAY</em> choose to support additional media types but <emclass="rfc2119" title="MUST">MUST</em> support the
2428
2430
media type(s) defined by this specification.</p><p>Media types will conform to the following pattern:</p><prearia-busy="false" class="hljs">application/vnd.openactive+json; model=[m], booking=[b], rpde=[r]</pre><p>The current media type is:</p><prearia-busy="false" class="hljs">application/vnd.openactive+json; model=2.0, booking=1.0, rpde=1.0</pre><p><strong>Brokers</strong> specifying a media type without a version, such as:</p><prearia-busy="false" class="hljs">application/vnd.openactive+json</pre><p>will receive data in in the most current format.</p><p>If you are building an application as a <strong>Broker</strong> and care about the stability
2429
2431
of the response, or have a client application which is tied to a specific
2430
-
version you should always try to use a media type containing the version number.</p><divclass="issue" id="issue-container-number-93"><divrole="heading" class="issue-title marker" id="h-issue-3" aria-level="4"><ahref="https://github.com/openactive/open-booking-api/issues/93"><spanclass="issue-number">Issue 93</span></a><spanstyle="text-transform: none">: Alignment media types <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>The specification has been updated to use media types that follow this pattern:<br>
2432
+
version you should always try to use a media type containing the version number.</p><divclass="issue" id="issue-container-number-93"><divrole="heading" class="issue-title marker" id="h-issue-4" aria-level="4"><ahref="https://github.com/openactive/open-booking-api/issues/93"><spanclass="issue-number">Issue 93</span></a><spanstyle="text-transform: none">: Alignment media types <aclass="respec-gh-label respec-label-light" href="https://github.com/openactive/open-booking-api/issues/?q=is%3Aissue+is%3Aopen+label%3A%22Community+Feedback+Requested%22" style="background-color: rgb(150, 224, 234);">Community Feedback Requested</a></span></div><p>The specification has been updated to use media types that follow this pattern:<br>
0 commit comments