Execute Cancellation
curl --request POST \
--url https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel \
--header 'AccessToken: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"cancellation_reason": "<string>",
"cancel_reason_others": "<string>"
}
'import requests
url = "https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel"
payload = {
"cancellation_reason": "<string>",
"cancel_reason_others": "<string>"
}
headers = {
"AccessToken": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {AccessToken: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({cancellation_reason: '<string>', cancel_reason_others: '<string>'})
};
fetch('https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/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.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'cancellation_reason' => '<string>',
'cancel_reason_others' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"AccessToken: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel"
payload := strings.NewReader("{\n \"cancellation_reason\": \"<string>\",\n \"cancel_reason_others\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("AccessToken", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel")
.header("AccessToken", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"cancellation_reason\": \"<string>\",\n \"cancel_reason_others\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["AccessToken"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"cancellation_reason\": \"<string>\",\n \"cancel_reason_others\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"submission_number": "<string>",
"transaction_id": 123,
"submission_status": "<string>"
}{
"error": "<string>",
"reason_code": "cancellation_notice_continuation_review",
"approval_saved": true,
"submission_number": "<string>",
"transaction_id": 123,
"transportation_submission_id": 123,
"submission_status": "<string>",
"notice_continuation": {
"id": 2,
"phase": "<string>",
"reason_code": "<string>"
},
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25",
"cancellation_notice": {
"phase": "request",
"state": "<string>",
"reason": "<string>",
"notice_minimum_required": true,
"ground": "non_payment",
"floor_days": 123,
"days_in_force": 123,
"minimum_date": "2023-12-25",
"held": true,
"hold_reason": "<string>",
"changes": {},
"date_measurements": {},
"current_dates": {
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25"
},
"enabled": true,
"historical_exempt": true,
"evaluated_at": "2023-11-07T05:31:56Z",
"stored_reason": "<string>",
"approved_reason": "<string>",
"historical_actor_id": 123,
"historical_source": "<string>",
"historical_justification": "<string>",
"preview_stale": true,
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25",
"date_role": "proposal",
"wc_action": "cancel",
"persisted_dates": {
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25"
},
"request_decision": {
"changes": {},
"notice_minimum_required": true
}
}
}{
"error": "<string>"
}Execute Cancellation
Executes an approved cancellation endorsement. For an intent-backed approval, confirmed notice-document readiness and the required physical-print chain’s accepted queue handoff are required before finalization. With zero physical print jobs, actual PDF generation completes the handoff without claiming print delivery. HTTP 409 with approval_saved=true and notice_continuation means the existing approval remains saved while readiness blocks execution; review or safely recover that intent rather than reapproving. Queue acceptance does not prove provider delivery or end-to-end exactly-once behavior.
POST
/
submission
/
{displayId}
/
{transactionId}
/
cancel
Execute Cancellation
curl --request POST \
--url https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel \
--header 'AccessToken: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"cancellation_reason": "<string>",
"cancel_reason_others": "<string>"
}
'import requests
url = "https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel"
payload = {
"cancellation_reason": "<string>",
"cancel_reason_others": "<string>"
}
headers = {
"AccessToken": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {AccessToken: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({cancellation_reason: '<string>', cancel_reason_others: '<string>'})
};
fetch('https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/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.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'cancellation_reason' => '<string>',
'cancel_reason_others' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"AccessToken: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel"
payload := strings.NewReader("{\n \"cancellation_reason\": \"<string>\",\n \"cancel_reason_others\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("AccessToken", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel")
.header("AccessToken", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"cancellation_reason\": \"<string>\",\n \"cancel_reason_others\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coverwhale.dev/v1/submission/{displayId}/{transactionId}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["AccessToken"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"cancellation_reason\": \"<string>\",\n \"cancel_reason_others\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"submission_number": "<string>",
"transaction_id": 123,
"submission_status": "<string>"
}{
"error": "<string>",
"reason_code": "cancellation_notice_continuation_review",
"approval_saved": true,
"submission_number": "<string>",
"transaction_id": 123,
"transportation_submission_id": 123,
"submission_status": "<string>",
"notice_continuation": {
"id": 2,
"phase": "<string>",
"reason_code": "<string>"
},
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25",
"cancellation_notice": {
"phase": "request",
"state": "<string>",
"reason": "<string>",
"notice_minimum_required": true,
"ground": "non_payment",
"floor_days": 123,
"days_in_force": 123,
"minimum_date": "2023-12-25",
"held": true,
"hold_reason": "<string>",
"changes": {},
"date_measurements": {},
"current_dates": {
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25"
},
"enabled": true,
"historical_exempt": true,
"evaluated_at": "2023-11-07T05:31:56Z",
"stored_reason": "<string>",
"approved_reason": "<string>",
"historical_actor_id": 123,
"historical_source": "<string>",
"historical_justification": "<string>",
"preview_stale": true,
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25",
"date_role": "proposal",
"wc_action": "cancel",
"persisted_dates": {
"effective_date_transaction": "2023-12-25",
"effective_date_transaction_al": "2023-12-25",
"effective_date_transaction_wc": "2023-12-25"
},
"request_decision": {
"changes": {},
"notice_minimum_required": true
}
}
}{
"error": "<string>"
}Finalize an approved cancellation endorsement. This step uses the saved approval;
it does not create a replacement approval or reset notice work.
For an intent-backed approval, PAS requires confirmed notice-document readiness
and the required physical-print chain’s accepted queue handoff before finalization.
If that readiness is missing or the continuation requires
review, the API returns HTTP
409 with
reason_code: cancellation_notice_continuation_review, approval_saved: true,
and notice_continuation containing id, phase, and its specific reason_code.
The response carries the immutable cancellation ID, current submission status,
actual stored ISO dates and cancellation_notice metadata. Execution remains
blocked; the saved approval is not rolled back.
Keep that receipt and contact Cover Whale for review or safe recovery. Do not
reapprove the cancellation or repeat an uncertain external handoff. Existing
Cancellation Guard refusals may also return 409 with their own reason code.
PDF readiness alone does not satisfy a required print-chain handoff. When no
physical print jobs were created, actual PDF generation completes that handoff
without claiming print delivery. Document readiness and initial queue acceptance
do not prove filing acceptance, print-provider delivery, or exactly-once delivery. See
Approve Cancellation.Authorizations
JWT returned as AccessToken by the /authentication endpoint (the Cognito ID token carrying the email claim). It expires after 3600 seconds.
Headers
Body
application/json