---
title: "Cancel Order"
method: POST
path: "/orders/{id}/cancel"
tags: ["Order"]
---

# Cancel Order

`POST /orders/{id}/cancel`

## Request

- Base URL: `https://myworkspace.myclickfunnels.com/api/v2`
- URL: `https://myworkspace.myclickfunnels.com/api/v2/orders/{id}/cancel`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://accounts.myclickfunnels.com/oauth/authorize`
    - Token URL: `https://accounts.myclickfunnels.com/oauth/token`
- TypeScript: <https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/docs/orders/:id/cancel/post.ts> (a function with typed inputs; its response is checked against the schema)

Cancel a subscription order through ClickFunnels' own cancel path (the same path the
in-app "Cancel subscription" flow uses) so the cancelation actually propagates to the
payment processor (Payments AI/Rebilly or Stripe). A direct `PATCH /orders/{id}` write
of `service_status: canceled` is a no-op for processor-managed orders, which is why this
action exists.

Only Payments AI and Stripe subscription orders can be canceled. Calling this on a
one-time order or an external subscription returns a 422. Please refer to [our Orders
Overview guide](https://developers.myclickfunnels.com/docs/orders) for more information
about the different types of orders and payment processors.

See [Cancel a subscription](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#cancel-a-subscription) in the [Orders Skill](https://accounts.myclickfunnels.com/.well-known/orders/skill.md) for the
request body, the accepted `cancel_reason` values per processor, and a [worked example](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#worked-example---cancel-then-confirm)
that confirms the scheduled churn.

## Path parameters

- `id` string, required

## Request body

- object
  - `order` OrderParametersCancel: Parameters for `POST /orders/{id}/cancel`. All fields are optional — a bare POST (or `{"order": {}}`) cancels the subscription order with defaults. This routes the cancelation through ClickFunnels' own cancel path (the same path the in-app "Cancel subscription" flow uses) so it propagates to the payment processor (Payments AI/Rebilly or Stripe). A direct `PATCH` of `service_status` to `canceled` is a no-op for processor-managed orders, which is why this action exists. Only Payments AI and Stripe subscription orders can be canceled this way; calling it on a one-time order or an external subscription returns a 422.
    - `cancel_reason` string: The reason _code_ for the cancelation. Defaults to `other`. Valid values are processor-specific; a value that isn't accepted for the order's processor returns a 422. Stripe orders accept: `customer_service`, `low_quality`, `missing_features`, `other`, `switched_service`, `too_complex`, `too_expensive`, `unused` Payments AI (Rebilly) orders accept: `did-not-use`, `did-not-want`, `missing-features`, `too-expensive`, `bugs-or-problems`, `other`
    - `cancel_description` string, nullable: A free-text description of the cancellation reason.
    - `effective_date` string: When the cancelation takes effect. - `next_renewal`: cancels at the end of the current paid period. Access is retained until `paid_until`. - Any other value: cancels immediately. When omitted, it cancels immediately if the order's current period was never paid for (`billing_status` is `unpaid`, `past-due`, `delinquent`, `failed`, `voided`, `abandoned` or `disputed`), and at `next_renewal` otherwise. See [Cancel a subscription](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#cancel-a-subscription) in the [Orders Skill](https://accounts.myclickfunnels.com/.well-known/orders/skill.md) for how the period-end and immediate cancels differ and which fields settle later.
    - `cancelation_proration` boolean: Whether to prorate the cancelation. Defaults to `false`.
    - `canceled_by` string: Attribution for who or what requested the cancelation. It is persisted on the order and recorded in its audit timeline. Defaults to `API`.
    - `voidable_invoices` integer[]: IDs of the order's invoices to void as part of the cancelation. When omitted, all of the order's open (`unpaid` or `past-due`) invoices are voided, so the payment processor stops retrying them. Send `[]` to keep them open. Any other value, such as `null` or a single id outside an array, returns a 422.

## Response `200`

OK - the payment processor accepted the cancellation. The returned order is the latest local snapshot. Processor-populated fields such as `canceled_at`, `cancel_reason`, `cancel_description`, `churned_at`, and the final `service_status` can arrive in a later webhook; poll `GET /orders/{id}` when those fields are not yet populated. The caller-provided `canceled_by` value is persisted before that asynchronous sync and remains stable. A Payments AI subscription with `service_status: pending` and `billing_status: abandoned` is voided immediately, including when `effective_date: next_renewal` is supplied. Its terminal `service_status: voided` does not populate `canceled_at` or `churned_at` or emit `subscription.canceled`; stop polling for cancellation fields. Voiding also voids its outstanding invoices, including when `voidable_invoices: []` is supplied.

- OrderAttributes: Base order attributes used in nested responses (e.g., within invoice responses). This is a subset of the full OrderAttributes schema.
  - `id` integer: ClickFunnels Order ID
  - `public_id` string: ClickFunnels Order public ID
  - `order_number` string, nullable: A sequential number for bookkeeping purposes increased by 1 for each new order in a workspace starting from
  - `total_amount` string, nullable: The total amount of the order, considering taxes and discounts.
  - `origination_channel_id` integer: Origination Channel ID
  - `origination_channel_type` string, nullable: Origination Channel Type
  - `notes` string, nullable: Your internal note about the order. This will be visible in ClickFunnels admin orders-related sections.
  - `live_mode` boolean: Indicates if the Order will use a live payment gateway and process real credit cards.
  - `in_trial` boolean: In Trial
  - `billing_status` string: The billing status reflects the status of the invoice of an order. Billing status can be one of the following for Payments AI and Stripe orders: `pending`, `draft`, `paid`, `unpaid`, `partially-refunded`, `refunded`, `voided`, `disputed`, `past-due`. For external orders, the billing status can be one of: `pending`, `paid`, `unpaid`, `voided` and `refunded`.
  - `service_status` string: The service status reflects the activity state of the order. For external one-time orders possible service statuses are `pending` or `completed`. For external subscription orders possible statuses are `pending`, `active`, `churned`, `canceled`, `completed`, `paused`.
  - `order_type` string: Order Type
  - `next_charge_at` string, nullable: When the next invoice on this subscription falls due. Read-only for processor-managed orders; on an external order it is a plain field you can write.
  - `renewal_at` string, nullable: When the subscription's service period rolls over and the next billing cycle begins. Distinct from `next_charge_at`, which is when the resulting invoice is due. Writable on a Payments AI subscription that is `pending`, `active`, or `paused` - see the `renewal_at` note on `PATCH /orders/{id}`. Read-only on Stripe and external orders. A write is applied at the payment processor rather than stored. For an actual schedule change, the order a successful `PATCH` hands back will carry the pre-request stored value. Follow the `200` / `202` polling conditions on `PATCH /orders/{id}`; a caller timeout means unknown, not failed.
  - `trial_end_at` string, nullable: When this subscription's trial ends and it converts to a paid charge. Null when the order never had a trial. Writable while the order is in a trial. Payments AI also accepts it as the equal companion to a legal `renewal_at` move while the stored trial end is still in the future - see the `trial_end_at` note on `PATCH /orders/{id}`. A write is applied at the payment processor rather than stored. For an actual schedule change, the order a successful `PATCH` hands back will carry the pre-request stored value. Follow the `200` / `202` polling conditions on `PATCH /orders/{id}`; a caller timeout means unknown, not failed.
  - `tag_ids` integer[]: Order Tags
  - `activated_at` string, nullable: Date Activated
  - `canceled_at` string, nullable: Order Canceled At
  - `canceled_by` string, nullable: Order Canceled By
  - `cancel_reason` string, nullable: The reason code for the cancelation. Possible codes for external orders are: `customer_service`, `low_quality`, `missing_features`, `other`, `switched_service`, `too_complex`, `too_expensive`, `unused`
  - `cancel_description` string, nullable: A free-text description of the cancellation reason.
  - `churned_at` string, nullable: Churned At
  - `shipping_address_first_name` string, nullable: The first name of the recipient's shipping address.
  - `shipping_address_last_name` string, nullable: The last name of the recipient's shipping address.
  - `shipping_address_organization_name` string, nullable: The organization name of the recipient's shipping address.
  - `shipping_address_phone_number` string, nullable: The phone number of the recipient's shipping address.
  - `shipping_address_street_one` string, nullable: The main street information of the shipping address, including the street name and number.
  - `shipping_address_street_two` string, nullable: Additional street information for the shipping address, like entrance information and apartment numbers.
  - `shipping_address_city` string, nullable: The city of the shipping address.
  - `shipping_address_region` string, nullable: The region of the shipping address, like state or province.
  - `shipping_address_country` string, nullable: The country of the shipping address.
  - `shipping_address_postal_code` string, nullable: Postal Code
  - `billing_address_street_one` string, nullable: The main street information of the billing address, including the street name and number.
  - `billing_address_street_two` string, nullable: Additional street information of the billing address, like entrance information and apartment numbers.
  - `billing_address_city` string, nullable: The city of the billing address.
  - `billing_address_region` string, nullable: The region of the billing address, like state or province.
  - `billing_address_country` string, nullable: The billing address country.
  - `billing_address_postal_code` string, nullable: Billing address postal (ZIP) code.
  - `recurring_invoices_paid_count` integer: The number of paid invoices with recurring charges for this order. Useful for detecting first or renewal payments based on the payload, if you can't use webhooks. E.g., in Zapier, filter by recurring_invoices_paid_count == 1 for first payments.
  - `origination_channel_name` string, nullable: Origination Channel Name
  - `origination_channel_public_id` string, nullable: The obfuscated public ID of the origination channel
  - `contact` ContactBaseAttributes: Contacts
    - `id` integer: Contact ID
    - `public_id` string: Contact public ID
    - `workspace_id` integer: Workspace ID
    - `default_shipping_address_id` integer, nullable: Read-only shipping entry ID; select it using default true on a shipping entry. Null when unset.
    - `anonymous` integer, nullable: Anonymous
    - `email_address` string, nullable: The contact's email address. It is currently not expected to be null and is the main identifier for a contact.
    - `first_name` string, nullable: First name
    - `last_name` string, nullable: Last name
    - `phone_number` string, nullable: Phone number
    - `time_zone` string, nullable: The human-readable time zone, usually set dynamically by the app for the contact, for example, during opt-in. Read more about time zones and how to map them back to the TZ standard in [our Time Zones guide.](https://dash.readme.com/project/cf2/v2/docs/timezones).
    - `uuid` string: UUID
    - `unsubscribed_at` string, nullable: Unsubscribed
    - `last_notification_email_sent_at` string, nullable: Last notification email sent
    - `email_suppression_reason` string, nullable: The reason the contact's email address is suppressed from receiving emails. Null when no suppression exists.
    - `is_active` boolean, nullable: Whether the contact is active. Can be null immediately after creation. A contact is considered active when they have a valid email address, have not unsubscribed, have not been deleted, and have no email suppression reason. Because it collapses several states into one flag, do not use it to detect deletion - check deleted_at instead.
    - `deleted_at` string, date-time, nullable: When the contact was deleted. Deleting a contact is a soft delete: the record is excluded from list endpoints but remains readable by id, so a non-null value here is the only reliable way to tell that a contact returned by this endpoint has been deleted. Null when the contact has not been deleted.
    - `fb_url` string, nullable: Facebook URL
    - `twitter_url` string, nullable: Twitter URL
    - `instagram_url` string, nullable: Instagram URL
    - `linkedin_url` string, nullable: LinkedIn URL
    - `website_url` string, nullable: Website URL
    - `created_at` string, date-time: Date added
    - `updated_at` string, date-time: Last updated
    - `tags` object[], nullable: Contact Tags
      - `id` integer: Tag ID
      - `public_id` string: Tag public ID
      - `name` string: Name
      - `color` string: Color
      - `applied_at` string, nullable: The datetime the tag was applied by creating a Contacts::AppliedTag that maps the tag to the contact.
    - `custom_attributes` object: A dynamic key-value pair object where both the key and value are strings. Custom attributes are usually added to the contact when they submit forms that contain custom contact attributes. But you can also add them via the API using the modifying endpoints like Create/Update/Upsert Contact.
    - `visits` VisitsAttributes: Collection of visit tracking records for a contact, including first visit, last visit, and last visit with UTM parameters
      - `first_visit` VisitAttributes: Visit tracking information including UTM parameters and device data
        - `uuid` string: Unique identifier for the visit
        - `utm_source` string, nullable: UTM source parameter from the visit URL
        - `utm_medium` string, nullable: UTM medium parameter from the visit URL
        - `utm_campaign` string, nullable: UTM campaign parameter from the visit URL
        - `utm_term` string, nullable: UTM term parameter from the visit URL
        - `utm_content` string, nullable: UTM content parameter from the visit URL
        - `ip` string, nullable: IP address of the visitor
        - `user_agent` string, nullable: User agent string from the visitor's browser
        - `referrer` string, nullable: HTTP referrer URL
        - `referring_domain` string, nullable: Domain extracted from the referrer URL
        - `landing_page` string, nullable: The first page URL visited in this session
        - `browser` string, nullable: Browser name detected from user agent
        - `os` string, nullable: Operating system detected from user agent
        - `device_type` string, nullable: Device type (e.g., desktop, mobile, tablet)
        - `started_at` string, date-time, nullable: Timestamp when the visit session started
        - `created_at` string, date-time: Timestamp when the visit record was created
        - `updated_at` string, date-time: Timestamp when the visit record was last updated
      - `last_visit` VisitAttributes: Visit tracking information including UTM parameters and device data
        - `uuid` string: Unique identifier for the visit
        - `utm_source` string, nullable: UTM source parameter from the visit URL
        - `utm_medium` string, nullable: UTM medium parameter from the visit URL
        - `utm_campaign` string, nullable: UTM campaign parameter from the visit URL
        - `utm_term` string, nullable: UTM term parameter from the visit URL
        - `utm_content` string, nullable: UTM content parameter from the visit URL
        - `ip` string, nullable: IP address of the visitor
        - `user_agent` string, nullable: User agent string from the visitor's browser
        - `referrer` string, nullable: HTTP referrer URL
        - `referring_domain` string, nullable: Domain extracted from the referrer URL
        - `landing_page` string, nullable: The first page URL visited in this session
        - `browser` string, nullable: Browser name detected from user agent
        - `os` string, nullable: Operating system detected from user agent
        - `device_type` string, nullable: Device type (e.g., desktop, mobile, tablet)
        - `started_at` string, date-time, nullable: Timestamp when the visit session started
        - `created_at` string, date-time: Timestamp when the visit record was created
        - `updated_at` string, date-time: Timestamp when the visit record was last updated
      - `last_visit_with_utm` VisitAttributes: Visit tracking information including UTM parameters and device data
        - `uuid` string: Unique identifier for the visit
        - `utm_source` string, nullable: UTM source parameter from the visit URL
        - `utm_medium` string, nullable: UTM medium parameter from the visit URL
        - `utm_campaign` string, nullable: UTM campaign parameter from the visit URL
        - `utm_term` string, nullable: UTM term parameter from the visit URL
        - `utm_content` string, nullable: UTM content parameter from the visit URL
        - `ip` string, nullable: IP address of the visitor
        - `user_agent` string, nullable: User agent string from the visitor's browser
        - `referrer` string, nullable: HTTP referrer URL
        - `referring_domain` string, nullable: Domain extracted from the referrer URL
        - `landing_page` string, nullable: The first page URL visited in this session
        - `browser` string, nullable: Browser name detected from user agent
        - `os` string, nullable: Operating system detected from user agent
        - `device_type` string, nullable: Device type (e.g., desktop, mobile, tablet)
        - `started_at` string, date-time, nullable: Timestamp when the visit session started
        - `created_at` string, date-time: Timestamp when the visit record was created
        - `updated_at` string, date-time: Timestamp when the visit record was last updated
  - `affiliate` object, nullable: The affiliate who will receive a commission for the order
    - `name` string: The name of the affiliate. Can be a combination of first name, last name and the affiliate email.
    - `email` string, nullable: The email address of the affiliate.
  - `referral_code` object, nullable: The referral code used to associate an order with an affiliate.
    - `code` string: The referral code value visible by users. It must be unique and can contain only letters, numbers, hyphens, and underscores.
    - `default` boolean, nullable: Whether this code is the default code for the affiliate.
  - `order_page` object, nullable: Page
    - `id` integer: Page ID
    - `public_id` string: The public identifier of the page
    - `name` string: Page name
  - `workspace_id` integer: ClickFunnels Workspace ID
  - `contact_id` integer: The contact associated with the order.
  - `currency` string: The currency for the order. Automatically set to the workspace's configured currency when creating an order through the API. Defaults to USD if the workspace has no currency configured.
  - `page_id` integer, nullable: Page ID
  - `tax_amount` string, nullable: Tax Amount
  - `billing_payment_method_id` string, nullable: Payment Method
  - `funnel_name` string, nullable: Funnel Name
  - `discount_ids` integer[]: Discounts
  - `workspace_sharing_id` string, nullable: Workspace Sharing ID
  - `paid_until` string, date-time, nullable: The date until which the subscription order is paid.
  - `resource_install_intent` string, nullable: Resource install intent for the order.
  - `created_at` string, date-time, nullable: Date Ordered
  - `updated_at` string, date-time, nullable: Date Updated
  - `external_id` string, nullable: An external ID, e.g., a payment provider's ID or an ID managed by the client internally
  - `payment_processor` string, nullable: The payment processor of the order. Currently, it can be one of `payments_ai` and `external`.
  - `phone_number` string, nullable: Phone Number
  - `page_name` string, nullable: Page Name. Want to filter by it? See our <i><u><a href="https://developers.myclickfunnels.com/docs/filtering-by-page" target="_blank">help guide on that topic</a><u><i>.
  - `contact_groups` object[], nullable: Contact Groups
    - `id` integer: Group ID
    - `public_id` string: Group Public ID
    - `name` string: Name
  - `workspace` WorkspaceAttributes: Workspaces
    - `id` integer: Workspace ID
    - `public_id` string, nullable: Workspace public ID
    - `team_id` integer: Team ID
    - `name` string: Workspace Name
    - `subdomain` string: Subdomain
    - `created_at` string, date-time, nullable: Added
    - `updated_at` string, date-time, nullable: Updated
  - `segments` object[], nullable: Segments
    - `id` integer: Segment ID
    - `public_id` string: Segment public ID
    - `name` string: Name
  - `line_items` OrdersLineItemAttributes[], nullable: Order Line Items
    - `id` integer: Line item ID
    - `public_id` string, nullable: Line item public ID
    - `order_id` integer: Order ID
    - `quantity` integer, nullable: Quantity
    - `prorated` string, nullable: Prorate invoice
    - `created_at` string, nullable: Added
    - `updated_at` string, nullable: Updated
    - `original_product` object: Product
      - `id` integer: ID
      - `public_id` string, nullable: Product public ID
      - `name` string: Product name
    - `products_price` ProductsPriceMinimal: Minimal price representation used wherever a price appears as a nested attribute (line items, upgrade/downgrade discovery).
      - `id` integer
      - `public_id` string, nullable
      - `name` string, nullable
      - `key` string, nullable
      - `amount` string, nullable
      - `currency` string, nullable
      - `duration` integer, nullable
      - `interval` string, nullable
      - `interval_count` integer, nullable
    - `products_variant` object, nullable: Product Variant
      - `id` integer: ID
      - `public_id` string, nullable: Variant public ID
      - `name` string: Name
      - `description` string, nullable: The description of the variant. The description of the **default variant** is the user-facing description of the `Product`.
      - `sku` string, nullable: SKU
  - `previous_line_item` string, nullable: An additional field, only available in outgoing subscription.upgrade and subscription.downgrade webhooks. It enables you to identify the former line item which is otherwise removed from the regular subscription line items when an upgrade or downgrade happens. Thus you can see the data of the previously active subscription. This property will be null in regular API requests.
  - `visits` OrderVisitsAttributes: Visit tracking records for orders and invoices. Contains last_visit and last_visit_with_utm only (first_visit belongs to the contact).
    - `last_visit` VisitAttributes: Visit tracking information including UTM parameters and device data
      - `uuid` string: Unique identifier for the visit
      - `utm_source` string, nullable: UTM source parameter from the visit URL
      - `utm_medium` string, nullable: UTM medium parameter from the visit URL
      - `utm_campaign` string, nullable: UTM campaign parameter from the visit URL
      - `utm_term` string, nullable: UTM term parameter from the visit URL
      - `utm_content` string, nullable: UTM content parameter from the visit URL
      - `ip` string, nullable: IP address of the visitor
      - `user_agent` string, nullable: User agent string from the visitor's browser
      - `referrer` string, nullable: HTTP referrer URL
      - `referring_domain` string, nullable: Domain extracted from the referrer URL
      - `landing_page` string, nullable: The first page URL visited in this session
      - `browser` string, nullable: Browser name detected from user agent
      - `os` string, nullable: Operating system detected from user agent
      - `device_type` string, nullable: Device type (e.g., desktop, mobile, tablet)
      - `started_at` string, date-time, nullable: Timestamp when the visit session started
      - `created_at` string, date-time: Timestamp when the visit record was created
      - `updated_at` string, date-time: Timestamp when the visit record was last updated
    - `last_visit_with_utm` VisitAttributes: Visit tracking information including UTM parameters and device data
      - `uuid` string: Unique identifier for the visit
      - `utm_source` string, nullable: UTM source parameter from the visit URL
      - `utm_medium` string, nullable: UTM medium parameter from the visit URL
      - `utm_campaign` string, nullable: UTM campaign parameter from the visit URL
      - `utm_term` string, nullable: UTM term parameter from the visit URL
      - `utm_content` string, nullable: UTM content parameter from the visit URL
      - `ip` string, nullable: IP address of the visitor
      - `user_agent` string, nullable: User agent string from the visitor's browser
      - `referrer` string, nullable: HTTP referrer URL
      - `referring_domain` string, nullable: Domain extracted from the referrer URL
      - `landing_page` string, nullable: The first page URL visited in this session
      - `browser` string, nullable: Browser name detected from user agent
      - `os` string, nullable: Operating system detected from user agent
      - `device_type` string, nullable: Device type (e.g., desktop, mobile, tablet)
      - `started_at` string, date-time, nullable: Timestamp when the visit session started
      - `created_at` string, date-time: Timestamp when the visit record was created
      - `updated_at` string, date-time: Timestamp when the visit record was last updated

## Other responses

- `401`: Unauthorized
- `404`: Not Found — the order does not exist, or does not belong to a workspace your API key can access.
- `422`: Unprocessable Entity. See [Common errors](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#common-errors) in the [Orders Skill](https://accounts.myclickfunnels.com/.well-known/orders/skill.md) for what each of these means and how to resolve it.

## Changes

- **2026-11-03** `511d88b30aea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/changes/orders/:id/cancel/post.md)

---

[API](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api.md) - [All operations](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/llms.txt) - [OpenAPI document](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/revisions/511d88b30aea?raw)
