curl --request POST \
--url https://api.exowpee.com/v1/order/orders/{order}/cancel \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/order/orders/{order}/cancel"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.exowpee.com/v1/order/orders/{order}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.exowpee.com/v1/order/orders/{order}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.exowpee.com/v1/order/orders/{order}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.exowpee.com/v1/order/orders/{order}/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/order/orders/{order}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"number": 123,
"customer_id": "<string>",
"customer_name": "<string>",
"currency_code": "<string>",
"items_net_total": 123,
"items_tax_total": 123,
"items_gross_total": 123,
"discount": 123,
"charge": 123,
"order_tax_total": 123,
"total": 123,
"discount_applications": [
"<unknown>"
],
"status": "<string>",
"payment_status": "<string>",
"seller_id": "<string>",
"cash_register_id": "<string>",
"cashier_id": "<string>",
"confirmed_cashier_shift_id": "<string>",
"confirmed_cash_register_instance_id": "<string>",
"completed_at": "2023-11-07T05:31:56Z",
"cancelled_at": "2023-11-07T05:31:56Z",
"rejected_at": "2023-11-07T05:31:56Z",
"approved_by": "<string>",
"rejected_by": "<string>",
"approved_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"tax_lines": "<array>",
"items": "<array>",
"payments": "<array>",
"seller": {},
"cash_register": {},
"cashier": {},
"is_credit": true,
"credit_detail": {},
"rendered_html": "<string>"
}Cancel a completed sale
The cashier who cashed a sale cancels it during the same register session. The sale is reversed in accounting, stock is put back, money already received becomes refundable store credit for the named customer and the unpaid part is no longer owed.
curl --request POST \
--url https://api.exowpee.com/v1/order/orders/{order}/cancel \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.exowpee.com/v1/order/orders/{order}/cancel"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.exowpee.com/v1/order/orders/{order}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.exowpee.com/v1/order/orders/{order}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.exowpee.com/v1/order/orders/{order}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.exowpee.com/v1/order/orders/{order}/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.exowpee.com/v1/order/orders/{order}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"number": 123,
"customer_id": "<string>",
"customer_name": "<string>",
"currency_code": "<string>",
"items_net_total": 123,
"items_tax_total": 123,
"items_gross_total": 123,
"discount": 123,
"charge": 123,
"order_tax_total": 123,
"total": 123,
"discount_applications": [
"<unknown>"
],
"status": "<string>",
"payment_status": "<string>",
"seller_id": "<string>",
"cash_register_id": "<string>",
"cashier_id": "<string>",
"confirmed_cashier_shift_id": "<string>",
"confirmed_cash_register_instance_id": "<string>",
"completed_at": "2023-11-07T05:31:56Z",
"cancelled_at": "2023-11-07T05:31:56Z",
"rejected_at": "2023-11-07T05:31:56Z",
"approved_by": "<string>",
"rejected_by": "<string>",
"approved_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"tax_lines": "<array>",
"items": "<array>",
"payments": "<array>",
"seller": {},
"cash_register": {},
"cashier": {},
"is_credit": true,
"credit_detail": {},
"rendered_html": "<string>"
}- Only the cashier connected to the register and cashier that confirmed the order can cancel it.
- The order must be completed.
- The order must have been confirmed during a register session of that cashier that is still the current register session; a cashier with the orders.cancelpastorder permission may also cancel a sale from an earlier register session of their own.
- When the customer of the sale has been removed, the caller needs the orders.canceldeletedcustomer permission; without it the cancellation is refused.
- Posts the reversal of the sale in accounting.
- When the order has a named customer, credits the customer’s store credit (refundable credit, in the currency of the order) with the money already received on the order, and posts it in the accounts. Payments that are still pending, bounced or written off are left out, and so are cheque payments: a cheque stays on the customer’s account, where a later bounce cancels it out.
- Puts the sold stock back: every recorded stock withdrawal is returned to its location at its original unit cost.
- Deletes deliveries of the order that are still draft or ready, with their items. Delivered, partially delivered and failed deliveries are kept.
- For a credit sale, sets the remaining credit amount to 0 and takes that unpaid amount off what the customer owes in the accounts (the debt is first brought up to date with the customer’s unpaid sales). Nothing is taken off when the customer has been removed.
- A cheque of the sale that bounces after the cancellation puts no debt back on the cancelled sale.
- Sets the status to cancelled and records cancelled_at.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Identifier of the order.
Query Parameters
Response mode. Default none; none answers 204 No Content.
none, resource Comma-separated JSON keys of the root resource (id is always rendered). Available: id, number, customer_id, customer_name, currency_code, items_net_total, items_tax_total, items_gross_total, discount, charge, order_tax_total, total, discount_applications, status, payment_status, seller_id, cash_register_id, cashier_id, confirmed_cashier_shift_id, confirmed_cash_register_instance_id, completed_at, cancelled_at, rejected_at, approved_by, rejected_by, approved_at, created_at, updated_at, is_credit, credit_detail, rendered_html.
Comma-separated include paths, each optionally followed by its fields in parentheses: units(id,sku),units.uomUnit(id,name). Max depth 6, max 40 paths. Available: items, items.taxLines, items.allocations, taxLines, payments, seller, cashRegister, cashier.
Response
Resource (only with response=resource).
Identifier of the order (27-character KSUID string).
Sequential order number inside the company, allocated by the server at creation (last number plus one).
Identifier of the customer, or null for an anonymous sale.
Customer name kept on the order: copied from the stored customer when customer_id is set, otherwise the free text sent.
ISO 4217 currency code of the order, copied from the company settings.
Sum of the lines before tax, after discounts, in major units of currency_code (stored in minor units and divided by 10 to the power of the currency exponent).
Sum of the taxes of the lines, in major units of currency_code.
items_net_total plus items_tax_total, in major units of currency_code.
Total discount applied to the order, in major units of currency_code.
Extra charge added to the order, in major units of currency_code. The server currently always computes 0.
Taxes applied on the whole order rather than on lines, in major units of currency_code.
Amount to pay: items_gross_total plus order_tax_total plus charge, in major units of currency_code.
Discounts applied to the order, one entry per campaign, code or manual discount, with amounts in major units and the allocation to each item. On create and update it is the computed breakdown (ttc_saving filled); on later reads it is the stored record (ttc_saving is null). Null when none is available.
Life-cycle status: pending (waiting for payment), awaiting_approval, approved, unapproved, updating (opened for changes), rejected, completed (cashed) or cancelled. Set by the server.
unpaid, partially_paid or paid. Set by the server at confirmation from the payments received against the total; unpaid before.
Identifier of the seller record that created the order.
Identifier of the register of the order: at creation, the seller's register, or for a direct seller the register sent in the request; once confirmed, the cashier's register. Null for a direct seller who sent no register, until confirmation.
Identifier of the cashier record that confirmed the sale. Null until confirmation.
Identifier of the register session in which the sale was confirmed. Null until confirmation.
Identifier of the cash register computer used by the register session when the sale was confirmed. Null until confirmation.
Time of confirmation, ISO 8601. Null until confirmed.
Time of cancellation, ISO 8601. Null unless cancelled.
Time the cashier rejected the order, ISO 8601. Cleared when the order returns to pending.
Identifier of the agent account or user profile who approved the order. Null when not approved.
Reserved: the reject action does not fill it, so it is normally null.
Time of approval, ISO 8601. Null when not approved or after the approval was withdrawn.
Date and time the record was created (ISO 8601, UTC).
Date and time the record was last changed (ISO 8601, UTC).
Taxes applied at order level (not on a line). Only present when requested with include.
Lines of the order. Only present when requested with include.
Payments recorded when the sale was confirmed. Empty until then. Only present when requested with include.
Summary of the seller record. Only present when requested with include.
Summary of the register. Only present when requested with include.
Summary of the cashier who confirmed the sale. Only present when requested with include.
True for a credit sale, where the customer may leave part or all of the total unpaid and owes it as a debt. A credit sale needs a customer.
Credit sale detail: id, total_amount, remaining_amount, paid_amount (major units), due_date and ask_approval. Null for a cash sale or when the detail is missing. total_amount is set when the order is saved; remaining_amount stays 0 until confirmation, which sets it to the unpaid part.
Invoice rendered at confirmation as HTML. Present only in the response of the confirm action.