Cancel Schedule
curl --request POST \
--url https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel \
--header 'x-client-id: <x-client-id>'import requests
url = "https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel"
headers = {"x-client-id": "<x-client-id>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-client-id': '<x-client-id>'}};
fetch('https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/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://www.{baseurl}.com/api/v1/schedules/{scheduleId}/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 => [
"x-client-id: <x-client-id>"
],
]);
$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://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-client-id", "<x-client-id>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel")
.header("x-client-id", "<x-client-id>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-client-id"] = '<x-client-id>'
response = http.request(request)
puts response.read_body{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Bad Request",
"status": 400,
"detail": "Schedule cannot be cancelled."
}{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Bad Request",
"status": 400,
"detail": "<string>",
"errors": {}
}V1 (Direct Transactions)
Cancel Schedule
Cancel an active recurring payment schedule. This stops all future payments that have not yet been submitted.
POST
/
api
/
v1
/
schedules
/
{scheduleId}
/
cancel
Cancel Schedule
curl --request POST \
--url https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel \
--header 'x-client-id: <x-client-id>'import requests
url = "https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel"
headers = {"x-client-id": "<x-client-id>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'x-client-id': '<x-client-id>'}};
fetch('https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/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://www.{baseurl}.com/api/v1/schedules/{scheduleId}/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 => [
"x-client-id: <x-client-id>"
],
]);
$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://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-client-id", "<x-client-id>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel")
.header("x-client-id", "<x-client-id>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.{baseurl}.com/api/v1/schedules/{scheduleId}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-client-id"] = '<x-client-id>'
response = http.request(request)
puts response.read_body{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Bad Request",
"status": 400,
"detail": "Schedule cannot be cancelled."
}{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Bad Request",
"status": 400,
"detail": "<string>",
"errors": {}
}Work in progressThis section is currently under active development as part of improvements planned for 2026. Content may change as we expand product capabilities.If you’re interested in early access or want to learn more about what’s coming, feel free to reach out to the team.
When Cancellation is Allowed
A schedule can be cancelled as long as it has remaining future payments. Payments that have already been submitted to Payments Canada are not affected by the cancellation. A successful cancellation returns an empty200 OK response.Was this page helpful?
⌘I