---
title: "Create External Order"
method: POST
path: "/workspaces/{workspace_id}/orders"
tags: ["Order"]
---

# Create External Order

`POST /workspaces/{workspace_id}/orders`

Create a new [external order](https://developers.myclickfunnels.com/docs/orders#external-orders) in the current workspace. This is useful if you process payments outside of ClickFunnels, but still want to make use of ClickFunnels&#39; automations and funnels. You can gain even more functionality by creating invoices for your new orders. It is currently only possible to create invoices with the &#39;external&#39; payment processor type. Other payment processors like &#39;payments_ai&#39; are not yet supported. Refer to the corresponding guide for more information [here](https://developers.myclickfunnels.com/docs/orders#external-orders).

## Path parameters

- `workspace_id` integer, required

## Request body

- object
  - `order` OrderParameters — Parameters for creating external orders. External orders are orders managed outside of ClickFunnels payment processors (Payments AI or Stripe). **Required fields:** - `order_type`: Must be `one-time-order` or `subscription-order` - `live_mode`: Must be `true` or `false` - `contact_id` or `contact_attributes`: Either provide a `contact_id` directly, or use `contact_attributes` with an `email_address` to look up an existing contact - `line_items_attributes`: At least one line item with `variant_id`, `products_price_id`, and `quantity` **Note:** For one-time orders, line items must reference one-time products. For subscription orders, line items can include both one-time and subscription products.
    - `order_type` 'one-time-order' | 'subscription-order', required — The type of order. Required for creating orders. - `one-time-order`: A single purchase order. Line items must reference one-time products only. - `subscription-order`: A recurring subscription order. Line items can include both one-time and subscription products.
    - `live_mode` boolean, required — Required. Indicates if the Order is for production or testing. - `true`: The order is a live/production order. - `false`: The order is a test order.
    - `contact_id` integer — The ID of the contact associated with the order. Either `contact_id` or `contact_attributes` must be provided, but not both. If both are provided, `contact_id` takes precedence.
    - `contact_attributes` object — Alternative to `contact_id`. Provide contact attributes to look up an existing contact by email. The contact must already exist in the workspace - by default, this does not create new contacts. If `contact_id` is also provided, it takes precedence and `contact_attributes` is ignored.
      - `email_address` string, required — The email address of an existing contact in the workspace. Required when using contact_attributes.
    - `line_items_attributes` object[], required — Line items for the order. At least one line item is required. Each line item must include a valid `variant_id`, `products_price_id`, and `quantity`.
      - `variant_id` integer, required — The ID of the product variant. Must be a valid variant in your workspace.
      - `products_price_id` integer, required — The ID of the price for the product. Must be a valid price for the variant's product.
      - `quantity` integer, required — The quantity of this line item.
    - `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 shipping 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.
    - `notes` string, nullable — Your internal note about the order. This will be visible in ClickFunnels admin orders-related sections.
    - `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 subscriptions, it can control whether a subscription is ongoing, for example despite an irregular (unpaid) invoice status. For orders with Payments AI as the payment processor, it can be one of the following: `pending`, `active`, `completed`, `churned`, `canceled`, `suspended`, `paused`, `abandoned`, `voided` Stripe orders have the same order statuses, except for `voided`. For voided invoices, its service status becomes `abandoned`. You can read about the state transitions in more detail in our [orders overview guide](https://developers.myclickfunnels.com/docs/orders). 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`.
    - `next_charge_at` string, nullable — The date and time of the next scheduled charge for subscription orders. (External subscription orders only)
    - `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, it is required when canceling an order. Possible codes for Payments AI orders are: `did-not-use`, `did-not-want`, `missing-features`, `too-expensive`, `bugs-or-problems`, `other` Possible codes for Stripe orders are: `customer_service`, `low_quality`, `missing_features`, `other`, `switched_service`, `too_complex`, `too_expensive`, `unused` External orders accept the same cancelation reasons as Stripe.
    - `cancel_description` string, nullable — A free-text description of the cancellation reason.
    - `churned_at` string, nullable — Churned At
    - `external_id` string, nullable — An external ID, e.g., a payment provider's ID or an ID managed by the client internally

## Response `201`

Created

- 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 — Next Charge At
  - `trial_end_at` string, nullable — Trial End At
  - `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
    - `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 — Whether the contact is active. 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.
    - `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

- `400` — Bad Request
- `401` — Unauthorized

---

[API](https://skmtc.net/myclickfunnels/apis/clickfunnels-api.md) · [All operations](https://skmtc.net/myclickfunnels/apis/clickfunnels-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/myclickfunnels/clickfunnels-api/revisions/ae6313eaa176/schema)
