{"openapi":"3.1.0","info":{"title":"ClickFunnels API","termsOfService":"https://www.clickfunnels.com/terms-of-service","contact":{"name":"ClickFunnels API Team","url":"https://developers.myclickfunnels.com"},"x-logo":{"url":"https://statics.myclickfunnels.com/image/1126065/file/31edf05760fafe41a82f16a668ab251f.png"},"description":"The ClickFunnels REST API that powers webhooks, native integrations, and Zapier lets you manage your ClickFunnels data, automate your workflows, and recreate ClickFunnels functionality in your own apps.\n","license":{"name":"MIT","url":"https://opensource.org/licenses/MIT"},"version":"2.0.0"},"tags":[{"name":"Team","description":"Teams"},{"name":"User","description":"Users"},{"name":"Workspace","description":"Workspace"},{"name":"Site","description":"> Sites represent a workspace's website configuration containing global code settings.\n"},{"name":"Addresses::Country","description":"> Countries are a global reference list used when setting addresses.\n\nThe Addresses::Country API provides read-only access to the list of countries, each with its ISO 3166-1 alpha-2 code (iso2). Use a country's iso2 as the country_code when setting an address, and as the {country_id} path segment when listing its regions.\n"},{"name":"Addresses::Region","description":"> Regions are the states/provinces of a country.\n\nThe Addresses::Region API provides read-only access to the regions of a country. Use a region's code or name as the address region value. Many countries have no regions.\n"},{"name":"Appointments::ScheduledEvent","description":"> Scheduled Appointment Events represent set meeting events\n\nThe Appointment Scheduled Event represents a scheduled meeting between a ClickFunnels user and a contact on a specific day and time.\n"},{"name":"Blog","description":"> Blogs represent a blog resource belonging to a workspace site\n\nA Blog is a top-level container for blog posts, categories, tags, and authors. Each workspace site can have one or more blogs, each with their own SEO settings, theme, and URL path.\n\nSee the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md) for the end-to-end guide to creating, reading, and updating blog posts.\n"},{"name":"Blogs::Author","description":"Blog Authors. See [Authors (read-only)](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#authors-read-only) in the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md)."},{"name":"Blogs::Category","description":"Blog Categories. See [Categories (read-only)](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#categories-read-only) in the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md)."},{"name":"Blogs::Post","description":"> Blog Posts are the individual articles published within a Blog\n\nBlog posts support rich content via PML markup, visibility controls, SEO settings, categories, tags, and authors. Use `expand[]=markup` to retrieve the PML markup for a post's visual content.\n\nSee [Creating a blog post](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#creating-a-blog-post) in the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md); the `markup` body is authored in PML — see the [Page Markup Skill](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md).\n\nTo copy posts in from an external RSS/Atom feed or article page, see the [Import External Blog Post Skill](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md), which covers [normalizing external HTML for PML](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#3-normalize-external-html-for-pml), [duplicate checking](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#4-discover-the-destination-and-check-for-duplicates), and [verifying the draft](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#6-verify-the-draft) before publishing.\n"},{"name":"Blogs::Tag","description":"Blog Tags. See [Tags (list / show / create)](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#tags-list--show--create) in the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md)."},{"name":"Community","description":"> Communities are membership-based spaces where contacts can post, interact, and engage.\n\nA Community is the top-level container for community content. It belongs to a workspace site and holds one or more Space Groups, each of which contains Spaces (Topics). Use the `Communities::SpaceGroup` and `Communities::Space` resources to manage the groups and topics within a community.\n"},{"name":"Communities::SpaceGroup","description":"> Space Groups are named sections within a Community that contain Spaces (Topics).\n\nA Space Group is a logical grouping of Spaces (Topics) within a Community. Use Space Groups to organize community content into sections. Each Space Group can have its own access level, post/comment approval settings, and visibility controls.\n"},{"name":"Communities::Space","description":"> Spaces (Topics) are the individual discussion areas within a Space Group.\n\nA Space is a single discussion channel or topic area within a Space Group. Members post, comment, and interact inside Spaces. Each Space can be configured with its own layout, access controls, sorting, and SEO settings.\n"},{"name":"Communities::Spaces::Post","description":"> Posts are member-created content items within a Community Space.\n\nA Post belongs to a Space and is authored by a Contact. Posts support rich HTML body content, optional titles, pinning, and cover images. Posts created via the API are auto-approved. Use `Communities::Spaces::Post::Comment`, `Communities::Spaces::Post::Like`, and `Communities::Spaces::Post::VideoEmbed` to manage the sub-resources of a post.\n"},{"name":"Communities::Spaces::Post::Comment","description":"> Comments are member replies on a Community Post.\n\nA Comment belongs to a Post and is authored by a Contact. Comments support rich HTML body content and threaded replies via `parent_comment_id`. Comments created via the API are auto-approved.\n"},{"name":"Communities::Spaces::Post::Like","description":"> Post Likes record a Contact's like reaction on a Community Post.\n\nA Post Like belongs to a Post and is authored by a Contact. Likes have no update operation — create one to like, delete it to unlike.\n"},{"name":"Communities::Spaces::Post::Comment::Like","description":"> Comment Likes record a Contact's like reaction on a Post Comment.\n\nA Comment Like belongs to a Comment and is authored by a Contact. Likes have no update operation — create one to like, delete it to unlike.\n"},{"name":"Communities::Spaces::Post::VideoEmbed","description":"> Video Embeds attach a hosted video to a Community Post.\n\nA Video Embed belongs to a Post and stores the provider name, source URL, and optional provider-specific metadata. Video Embeds have no update operation.\n"},{"name":"Communities::Membership","description":"> Memberships represent a Contact's membership in a Community.\n\nA Membership joins a Contact to a Community and tracks whether that member has moderator privileges. Creating or updating a membership also syncs the member's Space memberships to exactly the list of `space_ids` supplied. Deleting a membership removes the contact from all Spaces in the community as well.\n\nSee also: `Communities::Memberships::BanAction`, `Communities::Memberships::AddToGroupAction`, `Communities::Memberships::RemoveFromGroupAction`, and `Communities::Memberships::ExportAction` for async bulk operations on memberships.\n"},{"name":"Communities::Ban","description":"> Bans prevent a Contact from accessing a Community.\n\nA Ban records which Contact is banned, who issued the ban, the scope of the ban (`bannable_type`/`bannable_id`), and an optional reason. The `banned_by` moderator is set automatically to the acting user — it cannot be set in the request body. Bans have no update operation — delete and recreate to change the reason.\n\nSee also: `Communities::Bans::UnbanAction` and `Communities::Bans::ExportAction` for async bulk operations on bans.\n"},{"name":"Communities::Memberships::BanAction","description":"> Async bulk action that bans multiple community members in the background.\n\nCreating a BanAction enqueues a background job and immediately returns an action record. Poll the `show` endpoint using the returned `id` and check the `status` field (`queued` → `processing` → `completed`) to track progress.\n"},{"name":"Communities::Memberships::AddToGroupAction","description":"> Async bulk action that adds multiple members to one or more community spaces (groups) in the background.\n\nCreating an AddToGroupAction enqueues a background job and immediately returns an action record. Poll the `show` endpoint using the returned `id` and check the `status` field (`queued` → `processing` → `completed`) to track progress.\n"},{"name":"Communities::Memberships::RemoveFromGroupAction","description":"> Async bulk action that removes multiple members from one or more community spaces (groups) in the background.\n\nCreating a RemoveFromGroupAction enqueues a background job and immediately returns an action record. Poll the `show` endpoint using the returned `id` and check the `status` field (`queued` → `processing` → `completed`) to track progress.\n"},{"name":"Communities::Memberships::ExportAction","description":"> Async bulk action that exports community membership data to a file in the background.\n\nCreating an ExportAction enqueues a background job and immediately returns an action record. Poll the `show` endpoint using the returned `id` and check the `status` field (`queued` → `processing` → `completed`) to track progress. Use the `index` endpoint to list previous export actions for a community.\n"},{"name":"Communities::Bans::UnbanAction","description":"> Async bulk action that unbans multiple contacts from a community in the background.\n\nCreating an UnbanAction enqueues a background job and immediately returns an action record. Poll the `show` endpoint using the returned `id` and check the `status` field (`queued` → `processing` → `completed`) to track progress.\n"},{"name":"Communities::Bans::ExportAction","description":"> Async bulk action that exports community ban data to a file in the background.\n\nCreating an ExportAction enqueues a background job and immediately returns an action record. Poll the `show` endpoint using the returned `id` and check the `status` field (`queued` → `processing` → `completed`) to track progress. Use the `index` endpoint to list previous export actions for a community.\n"},{"name":"Contact","description":"Contact"},{"name":"Contacts::AppliedTag","description":"> Contact Applied Tags\n\nThe Contact Applied Tags APIs allow you to list, apply and remove tags associated with a specific contact.\n\nTo utilize this, first obtain the Tag IDs for all the Contact Tags for your workspace via the Contacts::Tags API.\n\nYou can manage tags for any contact by creating or deleting the corresponding Applied Tags as needed.\n\nNote:\nThere is no 'update' method for this API since you should just remove and add a new tag to change them.\n"},{"name":"Contacts::Filter","description":"> AI-generated contact filters\n\nTranslate a natural-language audience description into a ClickFunnels contact filter using an AI model.\n\nThe model can use the full range of contact filter conditions — identity, tags, last activity, email\nengagement, opt-ins, product/variant purchases & ownership, custom attributes, and more — so describe the\naudience however you like (e.g. \"buyers of the $99 course who joined in the last 30 days\"). Unlike the\ncriteria you submit directly to the RefineFilter endpoints, this endpoint is not limited to the public-API\ncondition allow-list.\n\nThe endpoint always returns a `stable_id` token you can use as the `stable_id` query parameter on the\ncontacts index. Keep the token opaque and let the HTTP client encode the complete query parameter value;\nwith curl, use `-G --data-urlencode \"stable_id=$STABLE_ID\"`. Do not decode the token or interpolate it\ndirectly into a raw URL. When `save: true` is supplied the filter is also persisted as a reusable\n`Refine::StoredFilter` — identical to filters created via the RefineFilter endpoints — and its\n`id`/`public_id` are included in the response so you can reference it later with `stored_filter_id`.\n\nSee [Generate a contact filter from plain English](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#generate-a-contact-filter-from-plain-english) in the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md) for the request body, the `save` semantics, and how the returned `stable_id` is applied to the contacts index.\n"},{"name":"Contacts::Tag","description":"# Contact Tags\n\nContact Tags are unique to each workspace, allowing for customized organization of your Contacts. Once created, these tags can be applied to any contact within the same workspace using the Contacts::AppliedTag endpoint.\n\nThis API allows you to manage the Contact Tags for your workspace.\n"},{"name":"Contacts::TagAction","description":"> Bulk apply or remove tags across a filtered set of contacts\n\nA Tag Action applies (or removes) one or more Contact Tags across an entire audience in a single async operation. Instead of looping over contacts one by one, submit a Tag Action with a target selection and let ClickFunnels process it in the background.\n\n**Target selection** — supply exactly one of:\n- `stable_id` — a URL-encoded Refine `stable_id` token (e.g. from `POST /api/v2/workspaces/{workspace_id}/contacts/filters`). Pass the token exactly as returned; do not decode or re-encode it. The server persists the decoded filter so the async job can re-derive the audience at perform time.\n- `stored_filter_id` — the `id` of a saved `Refine::StoredFilter` scoped to this workspace (must be a ContactsFilter). Also accepted as `filter_id`.\n- `target_ids` — an explicit array of contact public IDs.\n- `target_all` — `true` to target every contact in the workspace.\n\n**Progress tracking** — after creating a Tag Action, poll it with `GET /api/v2/contacts/tag_actions/{id}`. The response reflects async progress via `target_count` (total contacts to process) and `performed_count` (contacts processed so far).\n"},{"name":"Contacts::EnrollAction","description":"> Bulk-enroll contacts into course sections\n\nAn Enroll Action enrolls an entire audience of contacts into one or more course sections in a single async operation. Pass `course_ids` to enroll in every section of those courses, or `section_ids` for specific sections (or both).\n\n**Target selection** — supply exactly one of:\n- `stable_id` — a URL-encoded Refine `stable_id` token.\n- `stored_filter_id` — the `id` or `public_id` of a saved `Refine::StoredFilter` (ContactsFilter). Also accepted as `filter_id`.\n- `target_ids` — an explicit array of contact public IDs.\n- `target_all` — `true` to target every contact in the workspace.\n\n**Progress tracking** — after creating an Enroll Action, poll it with `GET /api/v2/contacts/enroll_actions/{id}`. The response reflects async progress via `target_count` and `performed_count`.\n\nSee [How a course is structured](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#how-a-course-is-structured) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for what the `course_ids` and `section_ids` you target refer to and how to list them.\n"},{"name":"Contacts::RunWorkflowAction","description":"> Bulk-trigger a workflow across a filtered set of contacts\n\nA Run Workflow Action enqueues an entire audience of contacts into a workflow in a single async operation. Requires a `workflow_id`. Set `force_run: true` to re-run contacts already in the workflow.\n\n**Target selection** — supply exactly one of:\n- `stable_id` — a URL-encoded Refine `stable_id` token.\n- `stored_filter_id` — the `id` or `public_id` of a saved `Refine::StoredFilter` (ContactsFilter). Also accepted as `filter_id`.\n- `target_ids` — an explicit array of contact public IDs.\n- `target_all` — `true` to target every contact in the workspace.\n\n**Progress tracking** — after creating a Run Workflow Action, poll it with `GET /api/v2/contacts/run_workflow_actions/{id}`.\n\nSee the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md) for building the workflow this action enrolls contacts into, and [Enabling, disabling](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling) for taking it live.\n"},{"name":"Contacts::UnsubscribeAction","description":"> Bulk-unsubscribe contacts from email\n\nAn Unsubscribe Action marks an entire audience of contacts as unsubscribed from email in a single async operation.\n\n**Target selection** — supply exactly one of:\n- `stable_id` — a URL-encoded Refine `stable_id` token.\n- `stored_filter_id` — the `id` or `public_id` of a saved `Refine::StoredFilter` (ContactsFilter). Also accepted as `filter_id`.\n- `target_ids` — an explicit array of contact public IDs.\n- `target_all` — `true` to target every contact in the workspace.\n\n**Progress tracking** — after creating an Unsubscribe Action, poll it with `GET /api/v2/contacts/unsubscribe_actions/{id}`.\n"},{"name":"Contacts::ExportAction","description":"> Bulk-export contacts to a CSV file\n\nAn Export Action generates a CSV of an audience of contacts in a single async operation. Supply `fields` to control which contact columns appear in the CSV (including custom attribute keys). Once complete, the `file_url` field on the record contains a download URL.\n\n**Target selection** — supply exactly one of:\n- `stable_id` — a URL-encoded Refine `stable_id` token.\n- `stored_filter_id` — the `id` or `public_id` of a saved `Refine::StoredFilter` (ContactsFilter). Also accepted as `filter_id`.\n- `target_ids` — an explicit array of contact public IDs.\n- `target_all` — `true` to target every contact in the workspace.\n\n**Progress tracking** — after creating an Export Action, poll it with `GET /api/v2/contacts/export_actions/{id}`. When complete, `file_url` contains the CSV download URL.\n"},{"name":"Course","description":"> Represents the volume of educational material\n\nThe course is the top-level layer of a concept for educational material. It is the _thing_ to be sold\nto a customer. Once a customer purchases or otherwise opts into a course, they will be enrolled into\nthe underlying sections and lessons.\n\nYou can get a broader understanding of the structure of a course by studying the `Courses::Section`\nand `Courses::Lesson` endpoints.\n\nSee the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for the end-to-end guide — [creating a course](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#creating-a-course) and building out its sections and lessons.\n"},{"name":"Courses::Enrollment","description":"> Controls access to course sections and lessons\n\nBy purchasing or otherwise opting into a course, an enrollment record is created. Enrollments\ndictate which sections, sub-sections, and lessons the student can access.\n\nProgress for an enrollment can be tracked for a Course, Section, and Lesson.\n\nTo grant course access from an automation instead of creating enrollments directly, see [Step catalog](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#step-catalog) in the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md).\n"},{"name":"Courses::Section","description":"> Represents the modules within a Course\n\nThe section is the organization layer of a course where the content is accessed and managed for\na customer. Sections can have sub-sections and will have one or more lessons. Access to sections\ncan be managed by the `Courses::Enrollment` and also by the completion of previous sections and lessons.\n\nSee [Sections (modules)](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#sections-modules) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for creating modules and the fields you can set.\n"},{"name":"Courses::Lesson","description":"> Represents the material within a Course\n\nThe lesson is the part of the course which teaches the material described within the course. Completing\nlessons can unlock access to other lessons or sections within a course. Completing lessons increases the\ncourse progress percent.\n\nSee [Lessons](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#lessons) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for creating and updating lessons.\n"},{"name":"Courses::LessonCompletion","description":"> Marks a lesson as completed for enrollment.\n\nTo mark a lesson as completed by an enrollment, create an `Courses::LessonCompletion` record.\nTo undo this, the `Courses::LessonCompletion` record must be deleted.\n"},{"name":"Courses::Sections::PublishAction","description":"> Publishes course sections (and their lessons) in bulk.\n\nA Publish Action selects one or more course sections — either by explicit `target_ids` (course-section public IDs) or `target_all` — and publishes them along with their lessons. It can optionally grant existing course enrollees access to the newly published sections (`auto_enroll`) and email them (`send_email`). The action runs asynchronously; poll the returned record for `target_count` / `performed_count` progress.\n\nUse `scheduled_for` to defer the publish to a future datetime.\n\nSee [Publishing](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#publishing) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for the publish paths.\n"},{"name":"Discount","description":"> A reusable, workspace-scoped discount the checkout applies on top of a price.\n\nA Discount is the right tool for a coupon code, a percentage/amount off, or a\ntime-boxed sale - anything you would otherwise fake with a second \"sale\" price.\nIt is one reusable object applied on top of the price, so you can start, scope,\nand expire it without touching the product's prices.\n\nA `code`-type discount (the default) needs a unique `code` that buyers redeem at\ncheckout - letters, numbers and hyphens only. `discount_method` decides which amount\nfield is required: `percentage` needs `percent` (0.01-100); `fixed` needs a positive\n`amount`. `currency` defaults to the workspace currency and `apply_from` defaults to\nnow, so a discount is live immediately unless you schedule it with a future\n`apply_from` and/or expire it with `apply_until`.\n\nBy default a discount applies to `all_products`. Set `applies_to` to\n`specific_products` / `specific_variants` / `specific_collections` and pass the\nmatching `product_ids` / `variant_ids` / `products_collection_ids` array to scope it.\n\nTwo lock-out rules govern the end of a discount's life. Once it has been redeemed on\nan order its money-affecting fields are locked (422 on update) while renaming and\nexpiring still work. Once it has actually expired it is frozen completely - every\nupdate returns 422 - so rename before you expire, not after. A discount attached to\nan order cannot be deleted at all; `redemptions_count` does not predict that, since\nit only counts completed sales.\n"},{"name":"Domain","description":"> Domains represent custom domains connected to a workspace.\n\nThe Domains API provides read-only access to the domains configured for a workspace. Use this API to look up domain IDs for use with other resources such as Funnels.\n"},{"name":"Download","description":"> Downloads are workspace files that can be granted through product variants.\n\nUse the Download's `asset_id` when configuring digital-asset access through the `Products::Variant` resource.\n"},{"name":"Emails::Address","description":"> Email Addresses\n\nEmail Addresses represent sender addresses in your workspace. These are used as \"from\" and \"reply-to\" addresses when sending email broadcasts. Select a from-address whose `usable_as_sender` field is true; for a custom domain that means its sending domain is verified and connected to this workspace, while a shared workspace-default address is available only as the fallback.\n\nSee [Addresses (pick a usable sender)](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#addresses-pick-a-usable-sender) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n"},{"name":"Emails::Broadcast","description":"> Email Broadcasts\n\nEmail Broadcasts allow you to send one-time email campaigns to your contacts. Broadcasts are created in draft status and can be sent immediately or scheduled for later delivery.\n\nTo target a broadcast's audience, set `filter_id` to a contact filter. You can pass the numeric id or the public id of a saved contact filter (a RefineFilter created via the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md)), or a serialized contact filter. The supplied filter is copied onto the broadcast, so editing or deleting the saved filter afterward never changes an existing broadcast's audience. See [Applying filters to email broadcasts](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-email-broadcasts) for the full flow.\n\nSee [Broadcasts](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#broadcasts) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n"},{"name":"Emails::Broadcasts::SendAction","description":"> Send Actions trigger the actual delivery of an email broadcast.\n\nA Send Action is the trigger that sends (or schedules) the parent broadcast — the same action the ClickFunnels dashboard fires when you click \"Send\". Creating a Send Action will immediately dispatch the broadcast (or schedule it for a future date/time if `send_at` is provided).\n\nBefore a Send Action can be created, the broadcast must be ready to send: it requires a topic, a from-address whose `usable_as_sender` is `true`, and a complete workspace marketing address. If any of these are missing, the create returns 422 listing what is needed.\n\nThe send itself runs asynchronously. Poll the returned Send Action record and compare `performed_count` to `target_count` to track progress. `started_at` and `completed_at` reflect async job progress.\n\nSee [Sending or scheduling a broadcast](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#sending-or-scheduling-a-broadcast) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n"},{"name":"Emails::Domain","description":"> Email Domains represent the sending domains (DKIM/SPF/DMARC) available to a workspace for outbound email.\n\nOne domain name has two independent jobs, and sending needs both. This resource covers email transport: `verified` means the name is authenticated for sending (DKIM + SPF + DMARC, or a verified SMTP setting). The other job is proving the workspace owns the name, reported here as `ownership_verified`; that happens by connecting the domain to the workspace as a website/hosting domain inside the ClickFunnels app (a website domain is connected as a subdomain such as `www.example.com`, which confirms ownership of the root sending domain `example.com`), and no call in this API can make it true. Neither substitutes for the other: `ready_for_sending` becomes true only when both are true, and a `200` from verify means the check ran, not that it passed, so always read the booleans back.\n\nProvision the root domain (`example.com`), not a subdomain: ownership is confirmed at the root domain, so a subdomain is rejected with `422` naming the root domain to use instead.\n\nTypical workflow: provision the sending domain (`POST /workspaces/{workspace_id}/emails/domains`), have the customer publish the returned DNS records and connect the same name to the workspace in ClickFunnels, then re-check with `POST /emails/domains/{id}/verify` until `ready_for_sending` is true, following `next_steps` for whatever is still missing. Then create sender addresses via `POST /workspaces/{workspace_id}/emails/addresses` with `emails_domain_id` set to this domain's numeric id.\n\nSee [Sending domains](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#sending-domains) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n"},{"name":"Emails::Settings","description":"> Email Settings\n\nEmail Settings represent your workspace's email configuration, including default from and reply-to addresses for system and marketing emails.\n\nSee the [Business mailing address prerequisite](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#business-mailing-address-prerequisite) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n"},{"name":"Emails::Template","description":"> Email Templates\n\nEmail Templates are reusable email content that can be used with broadcasts.\n\nSee [Templates](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#templates) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n"},{"name":"Emails::Topic","description":"> Email Topics\n\nEmail Topics are used for email broadcast categorization and subscriber preferences.\n\nSee [Sending or scheduling a broadcast](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#sending-or-scheduling-a-broadcast) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n"},{"name":"Form","description":"> Manage Forms, FieldSets, Fields, Submissions and Answers\n\nThe Forms API and it's related resources allow you to manage in detail all parts of your ClickFunnels forms.\n"},{"name":"Forms::FieldSet","description":"Form FieldSets"},{"name":"Forms::Field","description":"Form Fields"},{"name":"Forms::Fields::Option","description":"Form Field Options"},{"name":"Forms::Submission","description":"> Allows to submit and analyze forms programmatically\n\nThe `Forms::Submission` resource together with the `Form` and other `Forms::` allows you to create\nform submission programmatically outside of ClickFunnels.\n\nTo get the raw submission data, refer to the `FormSubmission` resource.\n"},{"name":"Forms::Submissions::Answer","description":"Form Submission Answers"},{"name":"FormSubmission","description":"> Presents submitted forms including the detailed data breakdown\n\nThe `FormSubmission` resource is a log of all the form submissions that happened for a given workspace. You can retrieve the form submissions including their recorded standard and custom fields data.\n\nPlease refer to the `Form` and `Forms::Submission` resources if you would like to submit forms programmatically.\n"},{"name":"Funnel","description":"> The Funnel resource contains relevant metadata about funnels.\n\nFunnel-level analytics are available via the Fetch Funnel Stats endpoint (`GET /funnels/{funnel_id}/stats`); per-page analytics via the Fetch Page Stats endpoint (`GET /pages/{page_id}/stats`).\n\nSee the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md) for building and modifying funnel workflows ([split tests](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#split-test-steps), [conditional splits](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#conditional-split-steps), [structure](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#funnel-structure)), and the [Stats Skill](https://accounts.myclickfunnels.com/.well-known/stats/skill.md) for reading funnel and page analytics.\n"},{"name":"Funnels::ConditionalSplitStep","description":"> Conditional split steps route contacts down a \"matched\" or \"unmatched\" branch based on a RefineFilter condition.\n\nConditional split steps live inside a funnel's workflow. Each step exposes a `condition` (filter + setup state) and a 2-entry `branches` array (`[matched, unmatched]`). See the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#conditional-split-steps) for the full surface.\n"},{"name":"Funnels::SplitTestStep","description":"> Split test steps wrap an existing funnel page in a two-branch A/B split with configurable traffic weights.\n\nSplit test steps live inside a funnel's workflow. Each step exposes a 2-entry `variants` array with `page_id` and `weight` per branch. See the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#split-test-steps) for the full surface.\n"},{"name":"Funnels::Tag","description":"> Funnels::Tag are used to distinguish, segment and run additional automations on your funnels and the users who go through them.\n"},{"name":"Image","description":"> Images can be used in a variety of use cases.\n\nAn image can be created or updated from a URL by defining the `upload_source_url` parameter. The response returns\nthe hosted `url` and the Image `id`.\n\nFor a blog migration, create an Image for each source image, replace the source URL in the post body with the\nreturned hosted `url`, and use the Image `id` as the blog post's `image_id` only when it is the featured image.\nKeep a source-to-hosted URL map so repeated images are uploaded once. The same Image IDs can also be assigned to\nProducts with the `image_ids` parameter.\n\n> Limitations and Constraints\n\nImages have a file size limit of 10MB and a dimension size limit of 10,000 x 10,000 pixels. Image file types currently supported include:\n\n```shell\n# IMAGE TYPES\njpeg, png, webp, x-icon, vnd.microsoft.icon\n# TEXT TYPES\nsvg+xml, gif\n```\n\nOnce uploaded, an image will return the following files and sizes\n\n| File Description | Width | Height |\n|--------------------------------------------------|--------------------|------------------------------------------------------------------------|\n| Thumbnail | 80 | 52 |\n| Small | 300 | 300 |\n| Medium | 600 | 600 |\n| Large | 800 | 800 |\n| X-Large | 2000 | 2000 |\n|--------------------------------------------------|--------------------|------------------------------------------------------------------------|\n"},{"name":"Fulfillment","description":"> Fulfillments allow fulfilling orders and managing shipments.\n\nPlease refer to [our Fulfillments guide](https://developers.myclickfunnels.com/docs/fulfillments) for more information.\n"},{"name":"Fulfillments::Location","description":"Fulfillment Locations"},{"name":"Order","description":"> Orders describe a purchase made by a contact.\n\nPlease refer to the [Orders Overview Guide](https://developers.myclickfunnels.com/docs/orders) for more information.\n\nSee the [Orders Skill](https://accounts.myclickfunnels.com/.well-known/orders/skill.md) for driving an existing order's lifecycle, including how to [cancel a subscription](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#cancel-a-subscription) so it stops renewing at the payment processor.\n"},{"name":"Orders::AppliedTag","description":"> Order Applied Tags\n\nThe Order Applied Tags APIs allow you to list, apply and remove tags associated with a specific order.\n\nTo utilize this, first obtain the Tag IDs for all the Order Tags for your workspace via the Orders::Tag API.\n\nYou can manage tags for any order by creating or deleting the corresponding Applied Tags as needed.\n\nNote:\nThere is no 'update' method for this resource since you should just remove or add a new tag to change them.\n"},{"name":"Orders::Invoice","description":"> Invoices track payments for orders.\n\nOrder Invoices are the invoices issued against Orders. For more information please consult our [Orders Overview guide](https://developers.myclickfunnels.com/docs/orders).\n\nOrders can be fulfilled by fulfilling invoice line items. Please refer to [our Fulfillments guide](https://developers.myclickfunnels.com/docs/fulfillments) to see how this can be done.\n"},{"name":"Orders::Invoices::Restock","description":"> Restocks make it possible to restock in case a priorly issued fulfillment is not going to be fulfilled.\n\nIf a customer pays for an invoice that will not get fulfilled (e.g. the invoice may have been refunded), a restock needs to be created so the committed inventory quantity can be returned to available inventory.\n\nA restock can also be cancelled, in which case the inventory quantity will be adjusted back.\n"},{"name":"Orders::LineItems::Change","description":"> Preview and commit variant/price changes on existing subscription line items.\n\nA self-serve flow for switching the variant or price on a subscription line item. The\nsurface has three endpoints — discovery (`Products::Prices::ChangeOption`) tells\nyou which targets are allowed; this resource is the actual change. `POST` to `…/changes`\nto preview the upcoming invoice (`preview: true`); `POST` to `…/changes/perform` to commit\n(`preview: false`). The response envelope is identical between preview and commit and only\nthe `preview` flag flips.\n\nAllowed transitions are constrained by merchant-configured upgrade/downgrade option rows.\nSee the discovery endpoint for sourcing legal `products_price_id` targets.\n\nSee the [Subscription Changes Skill](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md) for the full flow — [preview](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md#step-2---preview-the-change) and [commit](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md#step-3---commit-the-change).\n"},{"name":"Orders::Transaction","description":"Order Transactions"},{"name":"Orders::Tag","description":"> Order Tags\n\nOrder Tags are unique to each workspace, allowing for customized organization of your orders. Once created, these tags can be applied to any order within the same workspace.\n\nThis API allows you to manage the Order Tags for your workspace.\n"},{"name":"Page","description":"> Page offers extra information about ClickFunnels pages, like those that are part of funnels.\n\nIt's the main element that the user modifies when editing a Page in the ClickFunnels editor.\n\nYou can also learn how to source Page name and public ID from your ClickFunnels UI\n[here](https://developers.myclickfunnels.com/docs/filtering-by-page).\n\nSee the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for [building a page](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#building-a-page) and [positioning it within a funnel](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#positioning-a-page-within-a-funnel); the page body is authored in PML — see the [Page Markup Skill](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md). For pages you host yourself, see [Create an External Page](https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md) and [Add Checkout to an External Page](https://accounts.myclickfunnels.com/.well-known/sdk/add-checkout/skill.md). To move those externally-hosted pages to a new domain, see [Migrate an External Page Domain](https://accounts.myclickfunnels.com/.well-known/sdk/migrate-external-page-domain/skill.md).\n"},{"name":"Product","description":"> Products can be used to create and edit sellable goods.\n\nProducts have a few boolean attributes including `archived`, `visible_in_store`, and `visible_in_customer_center`.\n\nProducts that are not `archived` are in a `live` state if they are `visible_in_store` or `visible_in_customer_center` or are associated with any live funnels.\n\n`Live` products cannot be archived.\nProducts in an `archived` state can always be unarchived.\n\nEach product can have one or more variants expressed as a `Products::Variant`.\nAll products have a \"default variant\" that acts as a parent to any further variants\nthe product may have.\n\nWhen you create a `Product` we will implicitly create a default variant of type `digital`.\nIf the product you want to create is actually `physical`, be sure to update the type of it's\ndefault variant in a subsequent request.\n\nThe Product Object will always contain a `default_variant_id` attribute that lets you identify\nthe default variant.\n\nIf the Product will have variants you should set the `variant_properties` attribute to an array of the properties a variant can have (e.g. \"Size\", \"Color\", etc.)\n"},{"name":"Products::Collection","description":"Product Collections"},{"name":"Products::Price","description":"Product Prices"},{"name":"Products::Prices::ChangeOption","description":"> Allowed variant/price upgrade and downgrade targets for a source price.\n\nMerchant-configured rows define which variant + price combinations a subscription using a\ngiven source price may switch to. The discovery endpoint returns these grouped by target\nvariant; each group lists the prices on that target variant the subscription may move to.\n\nUse the returned `products_price_id`s as the body's `products_price_id` on\n`POST /orders/line_items/:line_item_id/changes` (preview) or\n`POST /orders/line_items/:line_item_id/changes/perform` (commit).\n\nSee [Step 1 - Discover what's allowed](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md#step-1---discover-whats-allowed) in the [Subscription Changes Skill](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md).\n"},{"name":"Products::Variant","description":"> Product variants\n\nIf there are multiple variants of a product (like when a T-shirt can come in many sizes or colors),\nthen these should be created as `Products::Variant` records related to the `Product` record.\n\nWhen creating a variant it is mandatory to set the `properties_values` so that all the Product's `variant_properties` have a value.\n\nAll products have a \"default variant\". Attributes like the below, if left as `null` on a variant (that is not the default)\nwill inherit the value from the default variant:\n\n- `product_type`\n- `sku`\n- `taxable`\n- `tax_category_id`\n- `description`\n- `weight`\n- `weight_unit`\n- `height`\n- `width`\n- `length`\n- `image_id`\n"},{"name":"Products::Tag","description":"Product Tags"},{"name":"RefineFilter","description":"> Reusable audience filters that scope contacts for conditional splits, email broadcasts, workflow branches, and other ClickFunnels surfaces.\n\nA RefineFilter stores a named, conjunctive set of criteria (attribute + clause + value) scoped to a workspace. Once created, pass its `id` as `condition.filter_id` on a Conditional Split Step, or as `filter_id` on any other surface that accepts one.\n\nSee the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md) for a full reference of supported attributes, clauses, and the safe-condition policy.\n\nThe public API restricts filter conditions to a [safe whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist); requests outside it return 422 with a pointer to the dev community.\n\nFor applying a filter to a Conditional Split Step, see [Applying filters to conditional split steps](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-conditional-split-steps). For email broadcasts, see [Applying filters to email broadcasts](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-email-broadcasts).\n"},{"name":"Sales::Pipeline","description":"> Sales Pipelines\n\nPipelines allow you to organize, track and advance Opportunies between different Stages. A Pipeline consists of multiple Stages.\n\nWhen creating a Pipeline, you must specify one or more stages by passing them in the `stages_attributes` parameter. The Stages\nwill be created in the order in which they are given in the `stages_attributes` parameter.\n"},{"name":"Sales::Pipelines::Stage","description":"> Sales Pipeline Stages\n\nStages belong to a Pipeline, and allow you to track and advance Opportunities.\n\nYou can re-order Stages in a Pipeline by updating the `sort_order` attribute of a Stage, giving the desired position of the Stage.\nSort order values are zero-indexed, with 0 being the first stage of a pipeline.\n\nCurrently, it's not possible to delete a stage if it's the last one left in the Pipeline.\n"},{"name":"Sales::Opportunity","description":"> Sales Opportunities\n\nSales Opportunities are initially created in a specific stage of a Pipeline and can be moved between different stages within that Pipeline.\n\nEach Sales Opportunity requires a name and a reference to a Primary Contact. If the Opportunity is associated with a new Contact, you must first create the Contact using the Contacts API.\n\nThe `value` field, which is optional, represents the potential value of the Opportunity in the default currency of the Workspace.\n\nYou can assign an Opportunity to a Team Member using the `assignee_id` field. To reassign the Opportunity to a different team member, simply update this value. To remove the assignee, set the `assignee_id` to `null`. The `assignee_id` corresponds to the `membership.id` in the relevant Team, which can be retrieved using the Teams API.\n\nWhen an Opportunity is moved to a stage with a `close_probability` value of 0 or 100, the `closed_at` timestamp is automatically set. If the Opportunity is later moved to a different stage, the `closed_at` timestamp remains unchanged. You can also manually set the `closed_at` timestamp using the API.\n"},{"name":"Sales::Opportunities::Note","description":"Sales Opportunity Notes"},{"name":"Shipping::LocationGroup","description":"Shipping LocationGroup"},{"name":"Shipping::Package","description":"Shipping Package"},{"name":"Shipping::Profile","description":"Shipping Profile"},{"name":"Shipping::Rate","description":"Shipping Rate"},{"name":"Shipping::Zone","description":"Shipping Zone"},{"name":"Shipping::Rates::Name","description":"Shipping Rate Names"},{"name":"Store","description":"> Stores\n"},{"name":"Style","description":"> Styles determine some CSS specifics for a theme.\n"},{"name":"Theme","description":"> Themes determine the look of the user-facing ClickFunnels pages.\n\nA theme bundles the relevant site pages, like home page, storefront, course pages, etc.\n"},{"name":"Webhooks::Outgoing::Endpoint","description":"Webhook Outgoing Endpoints"},{"name":"Webhooks::Outgoing::Event","description":"Webhooks Outgoing Events"},{"name":"Webhooks::Outgoing::EventType","description":"The authoritative catalog of webhook event types available for subscription. Use this endpoint to discover the exact string keys to supply in `event_type_ids` when creating or updating a webhook endpoint — do not guess event type identifiers or rely solely on external documentation.\n"},{"name":"Workflow","description":"Standalone automation workflows that enroll contacts and execute a sequence of action steps (send email, apply tag, delay, split, etc.). A workflow is either `draft` (no active triggers), `live` (enabled with at least one active trigger), or `archived`.\n\nRelated sub-resources: Workflows::Trigger, Workflows::Step, Workflows::Run.\n\nSee the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md) for the end-to-end guide — lifecycle, [creating a workflow](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#creating-a-workflow), [triggers](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers), [steps](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps), [branching](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#branching), [enabling/disabling](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling), and [manual enrollment](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#runs---manual-enrollment).\n"},{"name":"Workflows::Trigger","description":"Triggers attached to a workflow. Each trigger specifies an `event_type_key` (e.g. `$contact.tag_applied`) and optional condition FK ids that narrow which events fire the trigger.\n\nSee [Triggers](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers) in the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md).\n"},{"name":"Workflows::Step","description":"Action and split steps within a workflow. The step `type` (e.g. `send_email_step`, `delay_step`, `conditional_split_step`) is conveyed via the `step_type_settings` map — the single key in that map is always the step type.\n\nSee [Steps](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps) and [Branching](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#branching) in the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md).\n"},{"name":"Workflows::Run","description":"Execution records tracking a contact's progress through a workflow. Status is derived: `active`, `paused`, `completed`, or `canceled`. Runs can be listed/filtered or manually created to enroll a contact immediately.\n\nSee [Runs - manual enrollment](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#runs---manual-enrollment) in the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md).\n"}],"externalDocs":{"description":"More in-depth guides and further resources","url":"https://developers.myclickfunnels.com"},"servers":[{"url":"https://{subdomain}.myclickfunnels.com/api/v2","description":"ClickFunnels API","variables":{"subdomain":{"default":"myworkspace"}}}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer"}},"schemas":{"TeamAttributes":{"type":"object","title":"Teams","description":"Teams","properties":{"id":{"type":"integer","description":"Team ID"},"public_id":{"type":["string","null"],"description":"Team public ID"},"name":{"type":"string","description":"The name of your Team"},"time_zone":{"type":["string","null"],"description":"The human-readable time zone set manually by a ClickFunnels user or dynamically by the app.\nRead 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).\n"},"locale":{"type":"string","description":"The main language used to create a new website.","enum":["en","ja","pt"]},"created_at":{"type":["string","null"],"format":"date-time","description":"Created"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"billing_subscriptions":{"type":"array","description":"The team's billing subscriptions. Present only when the team has at least one subscription (omitted entirely otherwise).","items":{"$ref":"#/components/schemas/BillingSubscriptionAttributes"}},"memberships":{"type":"array","description":"The team's non-platform (human) memberships. Platform-agent / bot memberships (such as the API client the request authenticates as) are excluded from this list.","items":{"$ref":"#/components/schemas/MembershipAttributes"}}},"example":{"id":42000,"public_id":"ClNcfI","name":"Example Team","time_zone":"Pacific Time (US & Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","billing_subscriptions":[{"id":8000,"public_id":"SbTcfQ","team_id":42000,"status":"active","cycle_ends_at":"2025-02-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_prices":[{"id":9000,"subscription_id":8000,"price_id":"price_basic_monthly","quantity":1,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}],"memberships":[{"id":5000,"public_id":"MbRcfK","team_id":42000,"user_id":1,"user_first_name":"Lili","user_last_name":"Stiedemann","user_profile_photo_id":null,"user_email":"test@email.com","added_by_id":null,"platform_agent_of_id":null,"role_ids":["admin"],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","user":{"id":1,"public_id":"prbtEx","email":"test@email.com","first_name":"Lili","last_name":"Stiedemann","time_zone":"Pacific Time (US & Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}]},"required":["created_at","id","locale","name","public_id","time_zone","updated_at"]},"MembershipAttributes":{"type":"object","title":"Memberships","description":"A membership joins a user to a team. Embedded in the `Team` resource's `memberships` array (platform-agent / bot memberships are excluded there).","properties":{"id":{"type":"integer","description":"Membership ID"},"public_id":{"type":["string","null"],"description":"Membership public ID"},"team_id":{"type":["integer","null"],"description":"The ID of the team the member belongs to"},"user_id":{"type":["integer","null"],"description":"The ID of the member's user record"},"user_first_name":{"type":["string","null"],"description":"The member's first name"},"user_last_name":{"type":["string","null"],"description":"The member's last name"},"user_profile_photo_id":{"type":["string","null"],"description":"Identifier of the member's profile photo attachment"},"user_email":{"type":["string","null"],"description":"The member's email address"},"added_by_id":{"type":["integer","null"],"description":"The ID of the user who added this member"},"platform_agent_of_id":{"type":["integer","null"],"description":"When present, the membership represents a platform agent acting on behalf of the referenced application."},"role_ids":{"type":["array","null"],"description":"The role identifiers granted to the member on the team","items":{"type":"string"}},"created_at":{"type":["string","null"],"format":"date-time","description":"Created"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"user":{"description":"The member's user profile. Present when the membership has a linked user.","$ref":"#/components/schemas/UserAttributes"}},"example":{"id":5000,"public_id":"MbRcfK","team_id":42000,"user_id":1,"user_first_name":"Lili","user_last_name":"Stiedemann","user_profile_photo_id":null,"user_email":"test@email.com","added_by_id":null,"platform_agent_of_id":null,"role_ids":["admin"],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","user":{"id":1,"public_id":"prbtEx","email":"test@email.com","first_name":"Lili","last_name":"Stiedemann","time_zone":"Pacific Time (US & Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}},"required":["added_by_id","created_at","id","platform_agent_of_id","public_id","role_ids","team_id","updated_at","user_email","user_first_name","user_id","user_last_name","user_profile_photo_id"]},"BillingSubscriptionAttributes":{"type":"object","title":"Billing Subscriptions","description":"A billing subscription for a team. Embedded in the `Team` resource's `billing_subscriptions` array.","properties":{"id":{"type":"integer","description":"Billing subscription ID"},"public_id":{"type":["string","null"],"description":"Billing subscription public ID"},"team_id":{"type":"integer","description":"The ID of the team the subscription belongs to"},"status":{"type":["string","null"],"description":"The subscription's current status (e.g. `active`, `canceled`, `delinquent`)"},"cycle_ends_at":{"type":["string","null"],"format":"date-time","description":"When the current billing cycle ends"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"included_prices":{"type":"array","description":"The prices included in the subscription","items":{"$ref":"#/components/schemas/BillingSubscriptionIncludedPriceAttributes"}}},"example":{"id":8000,"public_id":"SbTcfQ","team_id":42000,"status":"active","cycle_ends_at":"2025-02-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_prices":[{"id":9000,"subscription_id":8000,"price_id":"price_basic_monthly","quantity":1,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]},"required":["created_at","cycle_ends_at","id","included_prices","public_id","status","team_id","updated_at"]},"BillingSubscriptionIncludedPriceAttributes":{"type":"object","title":"Billing Subscription Included Prices","description":"A price included in a billing subscription.","properties":{"id":{"type":"integer","description":"Included price ID"},"subscription_id":{"type":"integer","description":"The ID of the billing subscription this price belongs to"},"price_id":{"type":"string","description":"The identifier of the underlying price"},"quantity":{"type":["integer","null"],"description":"The quantity of the price included in the subscription"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":9000,"subscription_id":8000,"price_id":"price_basic_monthly","quantity":1,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","id","price_id","quantity","subscription_id","updated_at"]},"TeamParametersUpdate":{"type":"object","title":"Teams","description":"Teams","required":[],"properties":{"name":{"type":"string","description":"The name of your Team"},"time_zone":{"type":["string","null"],"description":"The human-readable time zone set manually by a ClickFunnels user or dynamically by the app.\nRead 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).\n"},"locale":{"type":"string","description":"The main language used to create a new website.","enum":["en","ja","pt"],"default":"en"}},"example":{"team":{"name":"Example Team","time_zone":"Pacific Time (US & Canada)","locale":"en"}}},"UserAttributes":{"type":"object","title":"Profile","description":"A user profile. This includes **platform-agent** users — the synthetic user an OAuth/API\nclient authenticates as (e.g. \"Default API Client\") — as well as human users. Workflow\n`notify_step` targets exclude platform agents (they resolve against non-platform team\nmembers); discover those via `GET /api/v2/teams/{team_id}/memberships`.\n","properties":{"id":{"type":"integer","description":"User ID"},"public_id":{"type":["string","null"],"description":"User public ID"},"email":{"type":"string","description":"Email Address"},"first_name":{"type":"string","description":"First Name"},"last_name":{"type":"string","description":"Last Name"},"time_zone":{"type":["string","null"],"description":"Your Time Zone"},"locale":{"type":["string","null"],"description":"Language"},"created_at":{"type":["string","null"],"format":"date-time","description":"Signed up"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":1,"public_id":"prbtEx","email":"test@email.com","first_name":"Lili","last_name":"Stiedemann","time_zone":"Pacific Time (US & Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","email","first_name","id","last_name","locale","public_id","time_zone","updated_at"]},"UserParametersUpdate":{"type":"object","title":"Profile","description":"Profile","required":["email","first_name","last_name"],"properties":{"email":{"type":"string","description":"Email Address"},"first_name":{"type":"string","description":"First Name"},"last_name":{"type":"string","description":"Last Name"},"time_zone":{"type":["string","null"],"description":"Your Time Zone"},"locale":{"type":["string","null"],"description":"Language"}},"example":{"user":{"email":"test@email.com","first_name":"Lili","last_name":"Stiedemann","time_zone":"Pacific Time (US & Canada)","locale":"en"}}},"WorkspaceAttributes":{"type":"object","title":"Workspaces","description":"Workspaces","properties":{"id":{"type":"integer","description":"Workspace ID"},"public_id":{"type":["string","null"],"description":"Workspace public ID"},"team_id":{"type":"integer","description":"Team ID"},"name":{"type":"string","description":"Workspace Name"},"subdomain":{"type":"string","description":"Subdomain"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":42000,"public_id":"CblaAF","team_id":42000,"name":"Example Workspace","subdomain":"example","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","id","name","public_id","subdomain","team_id","updated_at"]},"WorkspaceParameters":{"type":"object","title":"Workspaces","description":"Workspaces","required":[],"properties":{"name":{"type":"string","description":"Workspace Name"},"subdomain":{"type":"string","description":"The subdomain can currently only be changed in rare cases right after the creation of your new workspace."}},"example":{"workspace":{"name":"My Workspace","subdomain":"mysubdomain"}}},"WorkspaceParametersUpdate":{"type":"object","title":"Workspaces","description":"Workspaces","required":[],"properties":{"name":{"type":"string","description":"Workspace Name"},"subdomain":{"type":"string","description":"The subdomain can currently only be changed in rare cases right after the creation of your new workspace."}},"example":{"workspace":{"name":"My Workspace","subdomain":"mysubdomain"}}},"AddressesCountryAttributes":{"type":"object","title":"Country","description":"A country reference record.","required":["has_regions","iso2","iso3","localized_name","name"],"properties":{"iso2":{"type":"string","description":"ISO 3166-1 alpha-2 code (e.g. \"US\"). Pass this as country_code when setting an address."},"iso3":{"type":"string","description":"ISO 3166-1 alpha-3 code (e.g. \"USA\")."},"name":{"type":"string","description":"English country name (e.g. \"United States\")."},"localized_name":{"type":"string","description":"Country name localized to the request's locale."},"has_regions":{"type":"boolean","description":"True if the country has regions/states to choose from."}},"example":{"iso2":"US","iso3":"USA","name":"United States","localized_name":"United States","has_regions":true}},"AddressesRegionAttributes":{"type":"object","title":"Region","description":"A region (state/province) of a country.","required":["code","country_code","localized_name","name"],"properties":{"code":{"type":["string","null"],"description":"Region/state code (e.g. \"CA\"). Pass this (or name) as the address region value."},"name":{"type":"string","description":"Region/state name (e.g. \"California\")."},"localized_name":{"type":"string","description":"Region name localized to the request's locale."},"country_code":{"type":"string","description":"The country's ISO 3166-1 alpha-2 code."}},"example":{"code":"CA","name":"California","localized_name":"California","country_code":"US"}},"AppointmentsScheduledEventAttributes":{"type":"object","title":"Scheduled events","description":"Scheduled events","properties":{"id":{"type":"integer","description":"Scheduled event ID"},"public_id":{"type":["string","null"],"description":"The unique public identifier for the scheduled event"},"workspace_id":{"type":"integer","description":"Workspace ID"},"start_on":{"type":"string","format":"date-time","description":"Event Start Time"},"end_on":{"type":["string","null"],"format":"date-time","description":"End On"},"status":{"type":["string","null"],"description":"Status"},"max_invitees":{"type":["integer","null"],"description":"Max Invitees"},"order_id":{"type":["string","null"],"description":"Event Payment Order"},"comments":{"type":["string","null"],"description":"Please share anything that will help prepare for our meeting."},"tzid":{"type":["string","null"],"description":"Timezone"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"event_type":{"type":["object","null"],"title":"Scheduled events","description":"Event type information (can be null in rare cases if the event type has been deleted, but the event record wasn't)","properties":{"name":{"type":["string","null"],"description":"The display name of the scheduled event, typically including event type and invitee information"}}},"primary_contact":{"type":["object","null"],"title":"Scheduled events","description":"Scheduled events","properties":{"id":{"type":"integer","description":"Scheduled event ID"},"public_id":{"type":["string","null"],"description":"The unique public identifier for the scheduled event"},"email_address":{"type":["string","null"],"description":"The email address of the primary invitee for this scheduled event"},"first_name":{"type":["string","null"],"description":"The first name of the primary invitee for this scheduled event"},"last_name":{"type":["string","null"],"description":"The last name of the primary invitee for this scheduled event"},"phone_number":{"type":["string","null"],"description":"The phone number of the primary invitee for this scheduled event"}}}},"example":{"id":1,"public_id":"mdheDs","workspace_id":42000,"start_on":"2025-01-01T00:00:00.000Z","end_on":"2025-01-01T00:00:00.000Z","status":"scheduled","max_invitees":1,"order_id":null,"comments":"This is an example scheduled event for testing purposes.","tzid":"America/Los_Angeles","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","event_type":{"name":"30 Minute Meeting"},"primary_contact":{"id":1,"public_id":"uONtxf","email_address":"test-5cc06c0232058b060025@example.com","first_name":"Shanita","last_name":"Lockman","phone_number":"(224) 508-1342 x59891"}},"required":["comments","created_at","end_on","event_type","id","max_invitees","order_id","primary_contact","public_id","start_on","status","tzid","updated_at","workspace_id"]},"AppointmentsScheduledEventParameters":{"type":"object","title":"Scheduled events","description":"Scheduled events","required":["start_on"],"properties":{"start_on":{"type":"string","format":"date-time","description":"Event Start Time"},"end_on":{"type":["string","null"],"format":"date-time","description":"End On"},"status":{"type":["string","null"],"description":"Status"},"max_invitees":{"type":["integer","null"],"description":"Max Invitees"},"order_id":{"type":["string","null"],"description":"Event Payment Order"},"comments":{"type":["string","null"],"description":"Please share anything that will help prepare for our meeting."},"tzid":{"type":["string","null"],"description":"Timezone"}},"example":{"appointments_scheduled_event":{"start_on":"2025-01-01T00:00:00.000Z","end_on":"2025-01-01T00:00:00.000Z","status":"scheduled","max_invitees":1,"order_id":null,"comments":"This is an example scheduled event for testing purposes.","tzid":"America/Los_Angeles"}}},"AppointmentsScheduledEventParametersUpdate":{"type":"object","title":"Scheduled events","description":"Scheduled events","required":["start_on"],"properties":{"start_on":{"type":"string","format":"date-time","description":"Event Start Time"},"end_on":{"type":["string","null"],"format":"date-time","description":"End On"},"status":{"type":["string","null"],"description":"Status"},"max_invitees":{"type":["integer","null"],"description":"Max Invitees"},"order_id":{"type":["string","null"],"description":"Event Payment Order"},"comments":{"type":["string","null"],"description":"Please share anything that will help prepare for our meeting."},"tzid":{"type":["string","null"],"description":"Timezone"}},"example":{"appointments_scheduled_event":{"start_on":"2025-01-01T00:00:00.000Z","end_on":"2025-01-01T00:00:00.000Z","status":"scheduled","max_invitees":1,"order_id":null,"comments":"This is an example scheduled event for testing purposes.","tzid":"America/Los_Angeles"}}},"BlogAttributes":{"type":"object","title":"Blogs","description":"Blogs","properties":{"id":{"type":"integer","description":"Blog ID"},"public_id":{"type":"string","description":"The public identifier of the blog"},"workspace_id":{"type":"integer","description":"Workspace ID that the blog belongs to"},"site_id":{"type":["integer","null"],"description":"Site ID that the blog belongs to"},"name":{"type":"string","description":"Name of the blog"},"current_path":{"type":"string","description":"The URL path for the blog"},"url":{"type":"string","description":"The full public URL of the blog"},"theme_id":{"type":["integer","null"],"description":"Theme ID for the blog"},"resolved_template_page_id":{"type":["integer","null"],"description":"Effective Page ID used to render the blog index"},"resolved_post_template_page_id":{"type":["integer","null"],"description":"Effective Page ID used to render individual blog posts"},"resolved_category_template_page_id":{"type":["integer","null"],"description":"Effective Page ID used to render blog category archives"},"style_id":{"type":["integer","null"],"description":"Style ID for the blog"},"seo_image_id":{"type":["integer","null"],"description":"Default sharing image ID for the blog"},"seo_title":{"type":["string","null"],"description":"Default Blog title for SEO"},"seo_description":{"type":["string","null"],"description":"Default Blog description for SEO"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"aBcDeF","workspace_id":42000,"site_id":10,"name":"My Blog","current_path":"/blog","url":"https://myworkspace.myclickfunnels.com/blog","theme_id":5,"resolved_template_page_id":101,"resolved_post_template_page_id":102,"resolved_category_template_page_id":103,"style_id":null,"seo_image_id":null,"seo_title":"My Blog - Latest Articles","seo_description":"Read our latest articles and updates.","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","current_path","id","name","public_id","resolved_category_template_page_id","resolved_post_template_page_id","resolved_template_page_id","seo_description","seo_image_id","seo_title","site_id","style_id","theme_id","updated_at","url","workspace_id"]},"BlogParameters":{"type":"object","title":"Blogs","description":"Blogs","properties":{"name":{"type":"string","description":"Name of the blog"},"seo_title":{"type":["string","null"],"description":"Default Blog title for SEO"},"seo_description":{"type":["string","null"],"description":"Default Blog description for SEO"},"seo_image_id":{"type":["integer","null"],"description":"Default sharing image ID"},"theme_id":{"type":["integer","null"],"description":"Theme ID for the blog"}},"example":{"blog":{"name":"My Updated Blog","seo_title":"My Blog - Latest Articles","seo_description":"Read our latest articles and updates.","seo_image_id":null,"theme_id":5}}},"BlogsPostAttributes":{"type":"object","title":"Blogs::Posts","description":"Blog Posts","properties":{"id":{"type":"integer","description":"Post ID"},"public_id":{"type":"string","description":"The public identifier of the post"},"blog_id":{"type":"integer","description":"Blog ID that the post belongs to"},"title":{"type":"string","description":"Title of the post"},"published_at":{"type":["string","null"],"format":"date-time","description":"Date and time the post was published"},"current_path":{"type":"string","description":"The URL path for the post. Use the value returned here rather than composing a post URL yourself. See [Discover the destination and check for duplicates](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#4-discover-the-destination-and-check-for-duplicates) in the [Import External Blog Post Skill](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md)."},"url":{"type":"string","description":"The full public URL of the post"},"visibility":{"type":"string","description":"Visibility status of the post. One of `draft`, `public`, `members_only`, or `scheduled`.","enum":["draft","public","members_only","scheduled"]},"excerpt_content":{"type":["string","null"],"description":"Short summary of the blog post"},"seo_title":{"type":["string","null"],"description":"SEO page title"},"seo_description":{"type":["string","null"],"description":"SEO page description"},"image_id":{"type":["integer","null"],"description":"Featured image ID"},"image_url":{"type":["string","null"],"description":"URL of the featured image"},"categories":{"type":"array","description":"Categories associated with the post","items":{"type":"object","properties":{"name":{"type":"string","description":"Category name"}}}},"tags":{"type":"array","description":"Tags associated with the post","items":{"type":"object","properties":{"name":{"type":"string","description":"Tag name"}}}},"authors":{"type":"array","description":"Authors associated with the post","items":{"type":"object","properties":{"first_name":{"type":"string","description":"Author's first name"},"last_name":{"type":"string","description":"Author's last name"},"email_address":{"type":"string","description":"Author's email address"}}}},"markup":{"type":"string","description":"**Expandable** The PML (Page Markup Language) representation of the post's visual content. Only returned when expand[]=markup is provided. This serialization is lossy: elements PML has no equivalent for are omitted with no error and no placeholder, so a round-tripped read is not a safe basis for rewriting a post (see [the approval guardrail](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md#stop-get-approval-before-overwriting-an-existing-page)). An empty string therefore does not prove the post is empty: a post built entirely from elements PML cannot express also reads back empty. The value `` means the read failed; treat the post as unreadable and do not write that string back. See the [Page Markup Skill](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md) for the full DSL reference."},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"xYzAbC","blog_id":1,"title":"Getting started with your blog","published_at":"2025-06-01T10:00:00.000Z","current_path":"/blog/getting-started","url":"https://myworkspace.myclickfunnels.com/blog/getting-started","visibility":"public","excerpt_content":"An introduction to what you'll find on this blog.","seo_title":"Getting started with your blog","seo_description":"Learn how to make the most of your new blog.","image_id":42,"image_url":"https://example.myclickfunnels.com/uploads/image/42/file/example.jpg","categories":[{"name":"Tutorials"}],"tags":[{"name":"beginner"}],"authors":[{"first_name":"Jane","last_name":"Smith","email_address":"jane@example.com"}],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-06-01T10:00:00.000Z"},"required":["authors","blog_id","categories","created_at","current_path","excerpt_content","id","image_id","image_url","public_id","published_at","seo_description","seo_title","tags","title","updated_at","url","visibility"]},"BlogsPostParameters":{"type":"object","title":"Blogs::Posts","description":"Blog Posts","properties":{"title":{"type":"string","description":"Title of the post"},"visibility":{"type":"string","description":"Visibility status. One of `draft`, `public`, `members_only`, or `scheduled`. See [Two gotchas worth knowing](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#two-gotchas-worth-knowing) in the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md).","enum":["draft","public","members_only","scheduled"]},"published_at":{"type":["string","null"],"format":"date-time","description":"Date and time to publish the post. Required when visibility is `scheduled`. See [Publish separately](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#7-publish-separately) in the [Import External Blog Post Skill](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md)."},"excerpt_content":{"type":["string","null"],"description":"Short summary of the blog post"},"seo_title":{"type":["string","null"],"description":"SEO page title"},"seo_description":{"type":["string","null"],"description":"SEO page description"},"image_id":{"type":["integer","null"],"description":"Featured image ID. When importing an article, its images need rehosting first: see [Rehost source images during a migration](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#rehost-source-images-during-a-migration) and the [image caveat](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#image-caveat)."},"markup":{"type":["string","null"],"description":"PML (Page Markup Language) that builds the post's content tree (its page_content) — this IS the post body that renders. Replaces the existing tree, published version and editor draft alike. PML covers only a subset of what the ClickFunnels editor can build, so writing this to a post that already has a body silently drops editor-built content it cannot express. **If the post could have been written or edited in the ClickFunnels editor, stop and get explicit approval from the user before sending this on update** (a general instruction to update the post does not count): see [the approval guardrail](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md#stop-get-approval-before-overwriting-an-existing-page). Omit `markup` to leave the body untouched and change only metadata. Validated before any DB write; invalid markup returns 400 and the post is not created or updated. Markup that stops mid-construct is treated as truncated and rejected with a 400 — re-send the complete document rather than the missing tail. See the [Page Markup Skill](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md) for the DSL itself. Raw HTML from another site is not PML; normalize and wrap it as described in [Normalize external HTML for PML](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#3-normalize-external-html-for-pml)."},"author_ids":{"type":"array","description":"IDs of authors to associate with the post","items":{"type":"integer"}},"tag_ids":{"type":"array","description":"IDs of tags to associate with the post","items":{"type":"integer"}},"category_ids":{"type":"array","description":"IDs of categories to associate with the post","items":{"type":"integer"}}},"example":{"blogs_post":{"title":"Getting started with your blog","visibility":"draft","published_at":null,"excerpt_content":"An introduction to what you'll find on this blog.","seo_title":"Getting started with your blog","seo_description":"Learn how to make the most of your new blog.","image_id":null,"markup":"
Hello world
","author_ids":[],"tag_ids":[],"category_ids":[]}}},"BlogsTagAttributes":{"type":"object","title":"Blogs::Tags","description":"Blog Tags","properties":{"id":{"type":"integer","description":"Tag ID"},"public_id":{"type":"string","description":"The public identifier of the tag"},"blog_id":{"type":"integer","description":"Blog ID that the tag belongs to"},"name":{"type":"string","description":"Tag name"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"tAbCdE","blog_id":1,"name":"beginner","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["blog_id","created_at","id","name","public_id","updated_at"]},"BlogsTagParameters":{"type":"object","title":"Blogs::Tags","description":"Blog Tags","required":["name"],"properties":{"name":{"type":"string","description":"Tag name"}},"example":{"blogs_tag":{"name":"beginner"}}},"BlogsCategoryAttributes":{"type":"object","title":"Blogs::Category","description":"Blog Categories","required":["blog_id","created_at","current_path","id","name","public_id","updated_at","url"],"properties":{"id":{"type":"integer","description":"Category ID"},"public_id":{"type":"string","description":"The public identifier of the category"},"blog_id":{"type":"integer","description":"Blog ID that the category belongs to"},"name":{"type":"string","description":"Category name"},"current_path":{"type":["string","null"],"description":"The current path of the category"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"url":{"type":["string","null"],"description":"The full public URL of the category"}},"example":{"id":1,"public_id":"cAbCdE","blog_id":1,"name":"Tutorials","current_path":"/blog/category/tutorials","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","url":"https://myworkspace.myclickfunnels.com/blog/category/tutorials"}},"BlogsAuthorAttributes":{"type":"object","title":"Blogs::Author","description":"Blog Authors","required":["blog_id","created_at","display_name","email_address","first_name","full_name","id","image_id","image_url","last_name","public_id","updated_at"],"properties":{"id":{"type":"integer","description":"Author ID"},"public_id":{"type":"string","description":"The public identifier of the author"},"blog_id":{"type":"integer","description":"Blog ID that the author belongs to"},"first_name":{"type":["string","null"],"description":"Author first name"},"last_name":{"type":["string","null"],"description":"Author last name"},"email_address":{"type":["string","null"],"description":"Author email address"},"image_id":{"type":["integer","null"],"description":"ID of the author's profile image"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"full_name":{"type":["string","null"],"description":"The author's full name"},"display_name":{"type":["string","null"],"description":"The author's display name"},"image_url":{"type":["string","null"],"description":"The URL of the author's profile image"}},"example":{"id":1,"public_id":"aAbCdE","blog_id":1,"first_name":"Jane","last_name":"Smith","email_address":"jane@example.com","image_id":42,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","full_name":"Jane Smith","display_name":"Jane Smith","image_url":"https://example.myclickfunnels.com/uploads/image/42/file/example.jpg"}},"VisitAttributes":{"type":"object","title":"Visit","description":"Visit tracking information including UTM parameters and device data","properties":{"uuid":{"type":"string","description":"Unique identifier for the visit"},"utm_source":{"type":["string","null"],"description":"UTM source parameter from the visit URL"},"utm_medium":{"type":["string","null"],"description":"UTM medium parameter from the visit URL"},"utm_campaign":{"type":["string","null"],"description":"UTM campaign parameter from the visit URL"},"utm_term":{"type":["string","null"],"description":"UTM term parameter from the visit URL"},"utm_content":{"type":["string","null"],"description":"UTM content parameter from the visit URL"},"ip":{"type":["string","null"],"description":"IP address of the visitor"},"user_agent":{"type":["string","null"],"description":"User agent string from the visitor's browser"},"referrer":{"type":["string","null"],"description":"HTTP referrer URL"},"referring_domain":{"type":["string","null"],"description":"Domain extracted from the referrer URL"},"landing_page":{"type":["string","null"],"description":"The first page URL visited in this session"},"browser":{"type":["string","null"],"description":"Browser name detected from user agent"},"os":{"type":["string","null"],"description":"Operating system detected from user agent"},"device_type":{"type":["string","null"],"description":"Device type (e.g., desktop, mobile, tablet)"},"started_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when the visit session started"},"created_at":{"type":"string","format":"date-time","description":"Timestamp when the visit record was created"},"updated_at":{"type":"string","format":"date-time","description":"Timestamp when the visit record was last updated"}},"example":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"},"required":["browser","created_at","device_type","ip","landing_page","os","referrer","referring_domain","started_at","updated_at","user_agent","utm_campaign","utm_content","utm_medium","utm_source","utm_term","uuid"]},"VisitsAttributes":{"type":"object","title":"Visits","description":"Collection of visit tracking records for a contact, including first visit, last visit, and last visit with UTM parameters","properties":{"first_visit":{"description":"The first visit associated with this contact.","anyOf":[{"$ref":"#/components/schemas/VisitAttributes"},{"type":"null"}]},"last_visit":{"description":"The most recent visit. May be null if it is identical to first_visit (to avoid duplication).","anyOf":[{"$ref":"#/components/schemas/VisitAttributes"},{"type":"null"}]},"last_visit_with_utm":{"description":"The most recent visit that contains UTM parameters.","anyOf":[{"$ref":"#/components/schemas/VisitAttributes"},{"type":"null"}]}},"required":["first_visit","last_visit","last_visit_with_utm"]},"OrderVisitsAttributes":{"type":"object","title":"Order Visits","description":"Visit tracking records for orders and invoices. Contains last_visit and last_visit_with_utm only (first_visit belongs to the contact).","properties":{"last_visit":{"description":"The most recent visit associated with this order.","anyOf":[{"$ref":"#/components/schemas/VisitAttributes"},{"type":"null"}]},"last_visit_with_utm":{"description":"The most recent visit that contains UTM parameters.","anyOf":[{"$ref":"#/components/schemas/VisitAttributes"},{"type":"null"}]}},"example":{"last_visit":null,"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}},"required":["last_visit","last_visit_with_utm"]},"CommunityAttributes":{"type":"object","title":"Community","description":"Community","properties":{"id":{"type":"integer","description":"Community ID"},"public_id":{"type":["string","null"],"description":"Community public ID"},"site_id":{"type":"integer","description":"Site ID the community belongs to"},"workspace_id":{"type":"integer","description":"Workspace ID the community belongs to"},"name":{"type":["string","null"],"description":"Community Name"},"status":{"type":["string","null"],"description":"Status of the community (e.g. live, draft)"},"private":{"type":"boolean","description":"Make this Community Private? When true the community is not accessible to visitors; only invited contacts or buyers can view it."},"current_path":{"type":["string","null"],"description":"Current Path"},"logo_image_id":{"type":["integer","null"],"description":"Logo Image ID"},"social_image_id":{"type":["integer","null"],"description":"Social Image ID"},"seo_title":{"type":["string","null"],"description":"Seo Title"},"seo_description":{"type":["string","null"],"description":"Seo Description"},"seo_indexable":{"type":"boolean","description":"Whether the community is indexed by search engines"},"white_label":{"type":"boolean","description":"Enable White Label — when enabled members cannot switch between CF communities or participate in the global feed"},"allow_public_signup":{"type":"boolean","description":"Allow Public Sign-Up? When enabled guests can sign up and join the community when they try to interact."},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL — sends guests to a page to take action (e.g. Order Page, Funnel). Leave blank to allow free sign-up."},"send_membership_email":{"type":["boolean","null"],"description":"Send Membership Email? When enabled an email is sent to the contact when they become a member of the community."},"send_digest_email":{"type":"boolean","description":"Send Digest Email? When enabled contacts who have opted in receive a daily email of unread community notifications."},"require_post_approvals":{"type":["boolean","null"],"description":"Require Post Approvals? When enabled all posts require approval before being visible to members."},"require_comment_approvals":{"type":["boolean","null"],"description":"Require Comment Approvals? When enabled all comments require approval before being visible to members."},"anyone_can_invite":{"type":"boolean","description":"Anyone Can Invite? When enabled other members can invite new members to join."},"invite_only":{"type":"boolean","description":"Invite Only? Even public communities can disable signups so visitors can view but not sign up without an invitation."},"enable_block_list":{"type":"boolean","description":"Enable Block List? When enabled blocks any posts or comments with common profane words."},"notifications":{"type":["string","null"],"description":"Notification settings (e.g. all, essential, off)"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"AbCdEf","site_id":10,"workspace_id":42,"name":"My Community","status":"live","private":false,"current_path":"/my-community","logo_image_id":5,"social_image_id":6,"seo_title":"My Community","seo_description":"A great place to connect and learn.","seo_indexable":true,"white_label":false,"allow_public_signup":false,"upgrade_url":null,"send_membership_email":true,"send_digest_email":false,"require_post_approvals":false,"require_comment_approvals":false,"anyone_can_invite":false,"invite_only":false,"enable_block_list":false,"notifications":"essential","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["allow_public_signup","anyone_can_invite","created_at","current_path","enable_block_list","id","invite_only","logo_image_id","name","notifications","private","public_id","require_comment_approvals","require_post_approvals","send_digest_email","send_membership_email","seo_description","seo_indexable","seo_title","site_id","social_image_id","status","updated_at","upgrade_url","white_label","workspace_id"]},"CommunityParameters":{"type":"object","title":"Community","description":"Community","required":["name"],"properties":{"name":{"type":"string","description":"Community Name"},"status":{"type":["string","null"],"description":"Status of the community (e.g. live, draft)"},"private":{"type":["boolean","null"],"description":"Make this Community Private?"},"current_path":{"type":["string","null"],"description":"Current Path"},"logo_image_id":{"type":["integer","null"],"description":"Logo Image ID"},"social_image_id":{"type":["integer","null"],"description":"Social Image ID"},"seo_title":{"type":["string","null"],"description":"Seo Title"},"seo_description":{"type":["string","null"],"description":"Seo Description"},"seo_indexable":{"type":["boolean","null"],"description":"Seo Indexable?"},"white_label":{"type":["boolean","null"],"description":"Enable White Label"},"allow_public_signup":{"type":["boolean","null"],"description":"Allow Public Sign-Up?"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"},"send_membership_email":{"type":["boolean","null"],"description":"Send Membership Email?"},"send_digest_email":{"type":["boolean","null"],"description":"Send Digest Email?"},"require_post_approvals":{"type":["boolean","null"],"description":"Require Post Approvals?"},"require_comment_approvals":{"type":["boolean","null"],"description":"Require Comment Approvals?"},"anyone_can_invite":{"type":["boolean","null"],"description":"Anyone Can Invite?"},"invite_only":{"type":["boolean","null"],"description":"Invite Only?"},"enable_block_list":{"type":["boolean","null"],"description":"Enable Block List?"},"notifications":{"type":["string","null"],"description":"Notification settings (e.g. all, essential, off)"}},"example":{"community":{"name":"My Community"}}},"CommunityParametersUpdate":{"type":"object","title":"Community","description":"Community","properties":{"name":{"type":["string","null"],"description":"Community Name"},"status":{"type":["string","null"],"description":"Status of the community (e.g. live, draft)"},"private":{"type":["boolean","null"],"description":"Make this Community Private?"},"current_path":{"type":["string","null"],"description":"Current Path"},"logo_image_id":{"type":["integer","null"],"description":"Logo Image ID"},"social_image_id":{"type":["integer","null"],"description":"Social Image ID"},"seo_title":{"type":["string","null"],"description":"Seo Title"},"seo_description":{"type":["string","null"],"description":"Seo Description"},"seo_indexable":{"type":["boolean","null"],"description":"Seo Indexable?"},"white_label":{"type":["boolean","null"],"description":"Enable White Label"},"allow_public_signup":{"type":["boolean","null"],"description":"Allow Public Sign-Up?"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"},"send_membership_email":{"type":["boolean","null"],"description":"Send Membership Email?"},"send_digest_email":{"type":["boolean","null"],"description":"Send Digest Email?"},"require_post_approvals":{"type":["boolean","null"],"description":"Require Post Approvals?"},"require_comment_approvals":{"type":["boolean","null"],"description":"Require Comment Approvals?"},"anyone_can_invite":{"type":["boolean","null"],"description":"Anyone Can Invite?"},"invite_only":{"type":["boolean","null"],"description":"Invite Only?"},"enable_block_list":{"type":["boolean","null"],"description":"Enable Block List?"},"notifications":{"type":["string","null"],"description":"Notification settings (e.g. all, essential, off)"}},"example":{"community":{"name":"My Community","status":"live","private":false}}},"CommunitiesSpaceGroupAttributes":{"type":"object","title":"Communities::SpaceGroup","description":"Communities::SpaceGroup","properties":{"id":{"type":"integer","description":"Group ID"},"public_id":{"type":["string","null"],"description":"Group public ID"},"community_id":{"type":"integer","description":"Community ID the space group belongs to"},"workspace_id":{"type":"integer","description":"Workspace ID the space group belongs to"},"name":{"type":["string","null"],"description":"Name"},"description":{"type":["string","null"],"description":"Description"},"access":{"type":"string","enum":["is_open","is_private","is_secret"],"description":"Access level"},"group_type":{"type":"string","enum":["standard","course"],"description":"Group type"},"current_path":{"type":["string","null"],"description":"Current Path"},"emoji":{"type":["string","null"],"description":"Emoji icon for the group"},"card_image_id":{"type":["integer","null"],"description":"Card Image ID"},"auto_add_to_spaces":{"type":"boolean","description":"Automatically add members to new Topics within this Group"},"approval_terms":{"type":["string","null"],"description":"Approval Terms — if present, these terms are used to AI moderate posts and comments automatically"},"require_post_approvals":{"type":["boolean","null"],"description":"Require approvals for posts in this Group?"},"require_post_approvals_override":{"type":["boolean","null"],"description":"Whether the group-level post approval setting overrides the community-level setting"},"require_comment_approvals":{"type":["boolean","null"],"description":"Require approvals for comments in this Group?"},"require_comment_approvals_override":{"type":["boolean","null"],"description":"Whether the group-level comment approval setting overrides the community-level setting"},"is_hidden":{"type":"boolean","description":"Only show joined Topics — when enabled customers only see Topics in the sidebar they have joined"},"is_hidden_from_non_members":{"type":"boolean","description":"Hide from non-members — when enabled the group is not visible unless the customer belongs to one of its Topics"},"always_on":{"type":["boolean","null"],"description":"Always On"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL — directs non-customers to an action page to gain access to this group"},"sort_order":{"type":["integer","null"],"description":"Sort order within the community"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"BcDeFg","community_id":1,"workspace_id":42,"name":"General","description":"General discussion group","access":"is_open","group_type":"standard","current_path":"/general","emoji":"💬","card_image_id":null,"auto_add_to_spaces":false,"approval_terms":null,"require_post_approvals":false,"require_post_approvals_override":false,"require_comment_approvals":false,"require_comment_approvals_override":false,"is_hidden":false,"is_hidden_from_non_members":false,"always_on":null,"upgrade_url":null,"sort_order":1,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["access","always_on","approval_terms","auto_add_to_spaces","card_image_id","community_id","created_at","current_path","description","emoji","group_type","id","is_hidden","is_hidden_from_non_members","name","public_id","require_comment_approvals","require_comment_approvals_override","require_post_approvals","require_post_approvals_override","sort_order","updated_at","upgrade_url","workspace_id"]},"CommunitiesSpaceGroupParameters":{"type":"object","title":"Communities::SpaceGroup","description":"Communities::SpaceGroup","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"description":{"type":["string","null"],"description":"Description"},"access":{"type":["integer","null"],"description":"Access level (0 = open, 1 = private, 2 = secret)"},"group_type":{"type":["integer","null"],"description":"Group type (integer enum)"},"current_path":{"type":["string","null"],"description":"Current Path"},"emoji":{"type":["string","null"],"description":"Emoji icon for the group"},"card_image_id":{"type":["integer","null"],"description":"Card Image ID"},"auto_add_to_spaces":{"type":["boolean","null"],"description":"Automatically add members to new Topics within this Group"},"approval_terms":{"type":["string","null"],"description":"Approval Terms"},"require_post_approvals":{"type":["boolean","null"],"description":"Require approvals for posts in this Group?"},"require_post_approvals_override":{"type":["boolean","null"],"description":"Override community-level post approval setting for this group"},"require_comment_approvals":{"type":["boolean","null"],"description":"Require approvals for comments in this Group?"},"require_comment_approvals_override":{"type":["boolean","null"],"description":"Override community-level comment approval setting for this group"},"is_hidden":{"type":["boolean","null"],"description":"Only show joined Topics"},"is_hidden_from_non_members":{"type":["boolean","null"],"description":"Hide from non-members"},"always_on":{"type":["boolean","null"],"description":"Always On"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"},"sort_order":{"type":["integer","null"],"description":"Sort order within the community"}},"example":{"communities_space_group":{"name":"General"}}},"CommunitiesSpaceGroupParametersUpdate":{"type":"object","title":"Communities::SpaceGroup","description":"Communities::SpaceGroup","properties":{"name":{"type":["string","null"],"description":"Name"},"description":{"type":["string","null"],"description":"Description"},"access":{"type":["integer","null"],"description":"Access level (0 = open, 1 = private, 2 = secret)"},"group_type":{"type":["integer","null"],"description":"Group type (integer enum)"},"current_path":{"type":["string","null"],"description":"Current Path"},"emoji":{"type":["string","null"],"description":"Emoji icon for the group"},"card_image_id":{"type":["integer","null"],"description":"Card Image ID"},"auto_add_to_spaces":{"type":["boolean","null"],"description":"Automatically add members to new Topics within this Group"},"approval_terms":{"type":["string","null"],"description":"Approval Terms"},"require_post_approvals":{"type":["boolean","null"],"description":"Require approvals for posts in this Group?"},"require_post_approvals_override":{"type":["boolean","null"],"description":"Override community-level post approval setting for this group"},"require_comment_approvals":{"type":["boolean","null"],"description":"Require approvals for comments in this Group?"},"require_comment_approvals_override":{"type":["boolean","null"],"description":"Override community-level comment approval setting for this group"},"is_hidden":{"type":["boolean","null"],"description":"Only show joined Topics"},"is_hidden_from_non_members":{"type":["boolean","null"],"description":"Hide from non-members"},"always_on":{"type":["boolean","null"],"description":"Always On"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"},"sort_order":{"type":["integer","null"],"description":"Sort order within the community"}},"example":{"communities_space_group":{"name":"General","access":0,"is_hidden":false}}},"CommunitiesSpaceAttributes":{"type":"object","title":"Communities::Space","description":"Communities::Space","properties":{"id":{"type":"integer","description":"Space ID"},"public_id":{"type":["string","null"],"description":"Space public ID"},"space_group_id":{"type":"integer","description":"Space Group ID the space belongs to"},"workspace_id":{"type":"integer","description":"Workspace ID the space belongs to"},"name":{"type":["string","null"],"description":"Name"},"access":{"type":"string","enum":["is_open","is_private","is_secret"],"description":"Access level"},"current_path":{"type":["string","null"],"description":"Current Path"},"emoji":{"type":["string","null"],"description":"Emoji icon for the space"},"card_image_id":{"type":["integer","null"],"description":"Card Image ID"},"social_image_id":{"type":["integer","null"],"description":"Social Image ID"},"members_can_post":{"type":"boolean","description":"Whether members can post in this space"},"members_can_invite":{"type":["boolean","null"],"description":"Whether members can invite others to this space"},"allow_post_titles":{"type":["boolean","null"],"description":"Whether posts can have titles"},"allow_cover_images":{"type":["boolean","null"],"description":"Whether posts can have cover images"},"hide_from_featured":{"type":["boolean","null"],"description":"Whether to hide this space from the featured spaces list"},"layout_style":{"type":["string","null"],"description":"Layout style for the space"},"default_tab":{"type":["string","null"],"description":"Default tab shown when viewing the space"},"default_post_sort":{"type":["string","null"],"description":"Default sort order for posts"},"default_comment_sort":{"type":["string","null"],"description":"Default sort order for comments"},"default_member_sort":{"type":["string","null"],"description":"Default sort order for members"},"pinned_posts_label":{"type":["string","null"],"description":"Label for pinned posts section"},"seo_title":{"type":["string","null"],"description":"Seo Title"},"seo_description":{"type":["string","null"],"description":"Seo Description"},"sort_order":{"type":["integer","null"],"description":"Sort order within the space group"},"always_on":{"type":["boolean","null"],"description":"Always On"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"CdEfGh","space_group_id":1,"workspace_id":42,"name":"Welcome","access":"is_open","current_path":"/welcome","emoji":"👋","card_image_id":null,"social_image_id":null,"members_can_post":true,"members_can_invite":null,"allow_post_titles":null,"allow_cover_images":null,"hide_from_featured":null,"layout_style":null,"default_tab":null,"default_post_sort":null,"default_comment_sort":null,"default_member_sort":null,"pinned_posts_label":null,"seo_title":null,"seo_description":null,"sort_order":1,"always_on":null,"upgrade_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["access","allow_cover_images","allow_post_titles","always_on","card_image_id","created_at","current_path","default_comment_sort","default_member_sort","default_post_sort","default_tab","emoji","hide_from_featured","id","layout_style","members_can_invite","members_can_post","name","pinned_posts_label","public_id","seo_description","seo_title","social_image_id","sort_order","space_group_id","updated_at","upgrade_url","workspace_id"]},"CommunitiesSpaceParameters":{"type":"object","title":"Communities::Space","description":"Communities::Space","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"access":{"type":["integer","null"],"description":"Access level (0 = open, 1 = private, 2 = secret)"},"current_path":{"type":["string","null"],"description":"Current Path"},"emoji":{"type":["string","null"],"description":"Emoji icon for the space"},"card_image_id":{"type":["integer","null"],"description":"Card Image ID"},"social_image_id":{"type":["integer","null"],"description":"Social Image ID"},"members_can_post":{"type":["boolean","null"],"description":"Whether members can post in this space"},"members_can_invite":{"type":["boolean","null"],"description":"Whether members can invite others to this space"},"allow_post_titles":{"type":["boolean","null"],"description":"Whether posts can have titles"},"allow_cover_images":{"type":["boolean","null"],"description":"Whether posts can have cover images"},"hide_from_featured":{"type":["boolean","null"],"description":"Whether to hide this space from the featured spaces list"},"layout_style":{"type":["string","null"],"description":"Layout style for the space"},"default_tab":{"type":["string","null"],"description":"Default tab shown when viewing the space"},"default_post_sort":{"type":["string","null"],"description":"Default sort order for posts"},"default_comment_sort":{"type":["string","null"],"description":"Default sort order for comments"},"default_member_sort":{"type":["string","null"],"description":"Default sort order for members"},"pinned_posts_label":{"type":["string","null"],"description":"Label for pinned posts section"},"seo_title":{"type":["string","null"],"description":"Seo Title"},"seo_description":{"type":["string","null"],"description":"Seo Description"},"sort_order":{"type":["integer","null"],"description":"Sort order within the space group"},"always_on":{"type":["boolean","null"],"description":"Always On"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"}},"example":{"communities_space":{"name":"Welcome"}}},"CommunitiesSpaceParametersUpdate":{"type":"object","title":"Communities::Space","description":"Communities::Space","properties":{"name":{"type":["string","null"],"description":"Name"},"access":{"type":["integer","null"],"description":"Access level (0 = open, 1 = private, 2 = secret)"},"current_path":{"type":["string","null"],"description":"Current Path"},"emoji":{"type":["string","null"],"description":"Emoji icon for the space"},"card_image_id":{"type":["integer","null"],"description":"Card Image ID"},"social_image_id":{"type":["integer","null"],"description":"Social Image ID"},"members_can_post":{"type":["boolean","null"],"description":"Whether members can post in this space"},"members_can_invite":{"type":["boolean","null"],"description":"Whether members can invite others to this space"},"allow_post_titles":{"type":["boolean","null"],"description":"Whether posts can have titles"},"allow_cover_images":{"type":["boolean","null"],"description":"Whether posts can have cover images"},"hide_from_featured":{"type":["boolean","null"],"description":"Whether to hide this space from the featured spaces list"},"layout_style":{"type":["string","null"],"description":"Layout style for the space"},"default_tab":{"type":["string","null"],"description":"Default tab shown when viewing the space"},"default_post_sort":{"type":["string","null"],"description":"Default sort order for posts"},"default_comment_sort":{"type":["string","null"],"description":"Default sort order for comments"},"default_member_sort":{"type":["string","null"],"description":"Default sort order for members"},"pinned_posts_label":{"type":["string","null"],"description":"Label for pinned posts section"},"seo_title":{"type":["string","null"],"description":"Seo Title"},"seo_description":{"type":["string","null"],"description":"Seo Description"},"sort_order":{"type":["integer","null"],"description":"Sort order within the space group"},"always_on":{"type":["boolean","null"],"description":"Always On"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"}},"example":{"communities_space":{"name":"Welcome","access":0,"members_can_post":true}}},"CommunitiesSpacesPostAttributes":{"type":"object","title":"Communities::Spaces::Post","description":"Communities::Spaces::Post","properties":{"id":{"type":"integer","description":"Post ID"},"public_id":{"type":["string","null"],"description":"Post public ID"},"contact_id":{"type":["integer","null"],"description":"ID of the Contact who authored the post"},"title":{"type":["string","null"],"description":"Post title"},"body":{"type":["string","null"],"description":"Post body as plain text"},"url":{"type":["string","null"],"description":"Canonical URL of the post"},"contact":{"description":"Short representation of the authoring Contact, or null if the contact has been deleted","type":["object","null"],"properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":"string","description":"Contact public ID"},"email_address":{"type":["string","null"],"description":"Contact email address"},"first_name":{"type":["string","null"],"description":"Contact first name"},"last_name":{"type":["string","null"],"description":"Contact last name"},"phone_number":{"type":["string","null"],"description":"Contact phone number"}}},"group":{"description":"The Space Group this post belongs to","type":"object","properties":{"id":{"type":"integer","description":"Space Group ID"},"public_id":{"type":["string","null"],"description":"Space Group public ID"},"name":{"type":["string","null"],"description":"Space Group name"}}},"topic":{"description":"The Space (topic) this post belongs to","type":"object","properties":{"id":{"type":"integer","description":"Space ID"},"public_id":{"type":["string","null"],"description":"Space public ID"},"name":{"type":["string","null"],"description":"Space name"}}},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":101,"public_id":"AbCdEf","contact_id":55,"title":"Welcome to the community!","body":"Hi everyone, excited to be here.","url":"https://example.myclickfunnels.com/communities/posts/AbCdEf","contact":{"id":55,"public_id":"GhIjKl","email_address":"jane@example.com","first_name":"Jane","last_name":"Doe","phone_number":null},"group":{"id":1,"public_id":"BcDeFg","name":"General"},"topic":{"id":2,"public_id":"CdEfGh","name":"Introductions"},"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["body","contact","contact_id","created_at","group","id","public_id","title","topic","updated_at","url"]},"CommunitiesSpacesPostParameters":{"type":"object","title":"Communities::Spaces::Post","description":"Communities::Spaces::Post","required":["title"],"properties":{"title":{"type":"string","description":"Post title"},"body":{"type":["string","null"],"description":"Post body as rich HTML"},"contact_id":{"type":["integer","null"],"description":"ID of the Contact to author the post. Optional — defaults to the connected user's own contact."},"image_id":{"type":["integer","null"],"description":"Cover image ID"},"is_pinned":{"type":["boolean","null"],"description":"Whether to pin the post at the top of the space"},"current_path":{"type":["string","null"],"description":"Current path (used for tracking purposes)"}},"example":{"communities_spaces_post":{"title":"Welcome to the community!","body":"

Hi everyone, excited to be here.

"}}},"CommunitiesSpacesPostParametersUpdate":{"type":"object","title":"Communities::Spaces::Post","description":"Communities::Spaces::Post","properties":{"title":{"type":["string","null"],"description":"Post title"},"body":{"type":["string","null"],"description":"Post body as rich HTML"},"image_id":{"type":["integer","null"],"description":"Cover image ID"},"is_pinned":{"type":["boolean","null"],"description":"Whether to pin the post at the top of the space"},"current_path":{"type":["string","null"],"description":"Current path (used for tracking purposes)"}},"example":{"communities_spaces_post":{"title":"Updated post title","is_pinned":true}}},"CommunitiesSpacesPostsCommentAttributes":{"type":"object","title":"Communities::Spaces::Post::Comment","description":"Communities::Spaces::Post::Comment","properties":{"id":{"type":"integer","description":"Comment ID"},"public_id":{"type":["string","null"],"description":"Comment public ID"},"contact_id":{"type":["integer","null"],"description":"ID of the Contact who authored the comment"},"body":{"type":["string","null"],"description":"Comment body as plain text"},"url":{"type":["string","null"],"description":"Canonical URL of the comment"},"contact":{"description":"Short representation of the authoring Contact, or null if the contact has been deleted","type":["object","null"],"properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":"string","description":"Contact public ID"},"email_address":{"type":["string","null"],"description":"Contact email address"},"first_name":{"type":["string","null"],"description":"Contact first name"},"last_name":{"type":["string","null"],"description":"Contact last name"},"phone_number":{"type":["string","null"],"description":"Contact phone number"}}},"group":{"description":"The Space Group the parent post belongs to","type":"object","properties":{"id":{"type":"integer","description":"Space Group ID"},"public_id":{"type":["string","null"],"description":"Space Group public ID"},"name":{"type":["string","null"],"description":"Space Group name"}}},"post":{"description":"The Post this comment belongs to","type":"object","properties":{"id":{"type":"integer","description":"Post ID"},"public_id":{"type":["string","null"],"description":"Post public ID"},"title":{"type":["string","null"],"description":"Post title"},"url":{"type":["string","null"],"description":"Post canonical URL"}}},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":202,"public_id":"MnOpQr","contact_id":55,"body":"Great post, thanks for sharing!","url":"https://example.myclickfunnels.com/communities/posts/AbCdEf/comments/MnOpQr","contact":{"id":55,"public_id":"GhIjKl","email_address":"jane@example.com","first_name":"Jane","last_name":"Doe","phone_number":null},"group":{"id":1,"public_id":"BcDeFg","name":"General"},"post":{"id":101,"public_id":"AbCdEf","title":"Welcome to the community!","url":"https://example.myclickfunnels.com/communities/posts/AbCdEf"},"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["body","contact","contact_id","created_at","group","id","post","public_id","updated_at","url"]},"CommunitiesSpacesPostsCommentParameters":{"type":"object","title":"Communities::Spaces::Post::Comment","description":"Communities::Spaces::Post::Comment","required":["body"],"properties":{"body":{"type":"string","description":"Comment body as rich HTML"},"contact_id":{"type":["integer","null"],"description":"ID of the Contact to author the comment. Optional — defaults to the connected user's own contact."},"parent_comment_id":{"type":["integer","null"],"description":"ID of the parent comment for threaded replies. Must be a comment on the same post."},"skip_notifications":{"type":["boolean","null"],"description":"When true, suppresses email/push notifications for this comment"}},"example":{"communities_spaces_posts_comment":{"body":"

Great post, thanks for sharing!

"}}},"CommunitiesSpacesPostsCommentParametersUpdate":{"type":"object","title":"Communities::Spaces::Post::Comment","description":"Communities::Spaces::Post::Comment","properties":{"body":{"type":["string","null"],"description":"Comment body as rich HTML"},"skip_notifications":{"type":["boolean","null"],"description":"When true, suppresses email/push notifications for this comment"}},"example":{"communities_spaces_posts_comment":{"body":"

Updated comment text.

"}}},"CommunitiesSpacesPostsLikeAttributes":{"type":"object","title":"Communities::Spaces::Post::Like","description":"Communities::Spaces::Post::Like","properties":{"id":{"type":"integer","description":"Like ID"},"public_id":{"type":["string","null"],"description":"Like public ID"},"post_id":{"type":"integer","description":"ID of the Post that was liked"},"contact":{"description":"Short representation of the Contact who liked the post, or null if the contact has been deleted","type":["object","null"],"properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":"string","description":"Contact public ID"},"email_address":{"type":["string","null"],"description":"Contact email address"},"first_name":{"type":["string","null"],"description":"Contact first name"},"last_name":{"type":["string","null"],"description":"Contact last name"},"phone_number":{"type":["string","null"],"description":"Contact phone number"}}},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":301,"public_id":"StUvWx","post_id":101,"contact":{"id":55,"public_id":"GhIjKl","email_address":"jane@example.com","first_name":"Jane","last_name":"Doe","phone_number":null},"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["contact","created_at","id","post_id","public_id","updated_at"]},"CommunitiesSpacesPostsLikeParameters":{"type":"object","title":"Communities::Spaces::Post::Like","description":"Communities::Spaces::Post::Like","properties":{"contact_id":{"type":["integer","null"],"description":"ID of the Contact to record the like for. Optional — defaults to the connected user's own contact."}},"example":{"communities_spaces_posts_like":{}}},"CommunitiesSpacesPostsCommentsLikeAttributes":{"type":"object","title":"Communities::Spaces::Post::Comment::Like","description":"Communities::Spaces::Post::Comment::Like","properties":{"id":{"type":"integer","description":"Like ID"},"public_id":{"type":["string","null"],"description":"Like public ID"},"comment_id":{"type":"integer","description":"ID of the Comment that was liked"},"contact":{"description":"Short representation of the Contact who liked the comment, or null if the contact has been deleted","type":["object","null"],"properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":"string","description":"Contact public ID"},"email_address":{"type":["string","null"],"description":"Contact email address"},"first_name":{"type":["string","null"],"description":"Contact first name"},"last_name":{"type":["string","null"],"description":"Contact last name"},"phone_number":{"type":["string","null"],"description":"Contact phone number"}}},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":401,"public_id":"YzAbCd","comment_id":202,"contact":{"id":55,"public_id":"GhIjKl","email_address":"jane@example.com","first_name":"Jane","last_name":"Doe","phone_number":null},"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["comment_id","contact","created_at","id","public_id","updated_at"]},"CommunitiesSpacesPostsCommentsLikeParameters":{"type":"object","title":"Communities::Spaces::Post::Comment::Like","description":"Communities::Spaces::Post::Comment::Like","properties":{"contact_id":{"type":["integer","null"],"description":"ID of the Contact to record the like for. Optional — defaults to the connected user's own contact."}},"example":{"communities_spaces_posts_comments_like":{}}},"CommunitiesSpacesPostsVideoEmbedAttributes":{"type":"object","title":"Communities::Spaces::Post::VideoEmbed","description":"Communities::Spaces::Post::VideoEmbed","properties":{"id":{"type":"integer","description":"Video Embed ID"},"public_id":{"type":["string","null"],"description":"Video Embed public ID"},"post_id":{"type":"integer","description":"ID of the Post the video is attached to"},"provider":{"type":["string","null"],"enum":["youtube","vimeo","loom","voomly",null],"description":"Video provider name, auto-detected from the URL. One of youtube, vimeo, loom, voomly."},"url":{"type":["string","null"],"description":"Source URL of the video"},"data":{"description":"Provider-specific metadata (arbitrary key/value pairs)","type":["object","null"]},"workspace_id":{"type":["integer","null"],"description":"Workspace ID the post belongs to"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":501,"public_id":"EfGhIj","post_id":101,"provider":"youtube","url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","data":{"video_id":"dQw4w9WgXcQ","duration":212},"workspace_id":42,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","data","id","post_id","provider","public_id","updated_at","url","workspace_id"]},"CommunitiesSpacesPostsVideoEmbedParameters":{"type":"object","title":"Communities::Spaces::Post::VideoEmbed","description":"Communities::Spaces::Post::VideoEmbed","required":["url"],"properties":{"url":{"type":"string","description":"Source URL of the video"},"provider":{"type":["string","null"],"enum":["youtube","vimeo","loom","voomly",null],"description":"Video provider name. Optional and effectively ignored — the provider is auto-detected from the URL on save (set_provider before_save). One of youtube, vimeo, loom, voomly."},"data":{"description":"Provider-specific metadata (arbitrary key/value pairs)","type":["object","null"]}},"example":{"communities_spaces_posts_video_embed":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","provider":"youtube"}}},"CommunitiesMembershipAttributes":{"type":"object","title":"Communities::Membership","description":"Communities::Membership","properties":{"id":{"type":"integer","description":"Membership ID"},"public_id":{"type":["string","null"],"description":"Membership public ID"},"community_id":{"type":"integer","description":"ID of the Community this membership belongs to"},"moderator":{"type":["boolean","null"],"description":"Whether this member has moderator privileges in the community"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"contact":{"type":["object","null"],"description":"The member Contact (null if the contact has been removed)","properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":["string","null"],"description":"Contact public ID"},"email_address":{"type":["string","null"],"description":"Contact email address"},"first_name":{"type":["string","null"],"description":"Contact first name"},"last_name":{"type":["string","null"],"description":"Contact last name"},"phone_number":{"type":["string","null"],"description":"Contact phone number"}}}},"example":{"id":101,"public_id":"AbCdEf","community_id":1,"moderator":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","contact":{"id":55,"public_id":"GhIjKl","email_address":"member@example.com","first_name":"Jane","last_name":"Doe","phone_number":null}},"required":["community_id","contact","created_at","id","moderator","public_id","updated_at"]},"CommunitiesMembershipParameters":{"type":"object","title":"Communities::Membership","description":"Communities::Membership","required":["contact_id"],"properties":{"contact_id":{"type":"string","description":"Public ID of the Contact to add as a member"},"moderator":{"type":["boolean","null"],"description":"Whether this member should have moderator privileges"},"space_ids":{"type":["array","null"],"description":"Array of Space public IDs the member should belong to. The membership form syncs the member's Space memberships to exactly this list — Spaces not in the list are removed, Spaces in the list are added.\n","items":{"type":"string"}}},"example":{"communities_membership":{"contact_id":"GhIjKl","moderator":false,"space_ids":["SpAcEa","SpAcEb"]}}},"CommunitiesMembershipParametersUpdate":{"type":"object","title":"Communities::Membership","description":"Communities::Membership","properties":{"moderator":{"type":["boolean","null"],"description":"Whether this member should have moderator privileges"},"space_ids":{"type":["array","null"],"description":"Array of Space public IDs the member should belong to. The membership form syncs the member's Space memberships to exactly this list — Spaces not in the list are removed, Spaces in the list are added.\n","items":{"type":"string"}}},"example":{"communities_membership":{"moderator":true,"space_ids":["SpAcEa"]}}},"CommunitiesBanAttributes":{"type":"object","title":"Communities::Ban","description":"Communities::Ban","properties":{"id":{"type":"integer","description":"Ban ID"},"public_id":{"type":["string","null"],"description":"Ban public ID"},"community_id":{"type":"integer","description":"ID of the Community this ban applies to"},"bannable_type":{"type":"string","description":"Polymorphic type of the bannable scope (e.g. Community)"},"bannable_id":{"type":"integer","description":"Polymorphic ID of the bannable scope"},"banned_by_id":{"type":"integer","description":"ID of the membership record that issued the ban (set automatically)"},"reason":{"type":["string","null"],"description":"Optional reason for the ban (max 1024 characters)"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"contact":{"type":["object","null"],"description":"The banned Contact (null if the contact has been removed)","properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":["string","null"],"description":"Contact public ID"},"email_address":{"type":["string","null"],"description":"Contact email address"},"first_name":{"type":["string","null"],"description":"Contact first name"},"last_name":{"type":["string","null"],"description":"Contact last name"},"phone_number":{"type":["string","null"],"description":"Contact phone number"}}}},"example":{"id":201,"public_id":"MnOpQr","community_id":1,"bannable_type":"Community","bannable_id":1,"banned_by_id":12,"reason":"Violated community guidelines","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","contact":{"id":55,"public_id":"GhIjKl","email_address":"member@example.com","first_name":"Jane","last_name":"Doe","phone_number":null}},"required":["bannable_id","bannable_type","banned_by_id","community_id","contact","created_at","id","public_id","reason","updated_at"]},"CommunitiesBanParameters":{"type":"object","title":"Communities::Ban","description":"Communities::Ban","required":["contact_id"],"properties":{"contact_id":{"type":"string","description":"Public ID of the Contact to ban"},"reason":{"type":["string","null"],"description":"Optional reason for the ban (max 1024 characters)"}},"example":{"communities_ban":{"contact_id":"GhIjKl","reason":"Violated community guidelines"}}},"CommunitiesActionAttributes":{"type":"object","title":"Async Action","description":"Base response shape shared by all community async bulk-action resources. The `status` field progresses from `queued` → `processing` → `completed`. Poll the `show` endpoint until `status` is `completed` or `performed_count` equals `target_count`.\n","properties":{"id":{"type":"integer","description":"Action ID"},"public_id":{"type":["string","null"],"description":"Action public ID"},"community_id":{"type":"integer","description":"ID of the Community this action belongs to"},"target_all":{"type":"boolean","description":"When true the action targets all eligible records in the community rather than the explicit target_ids list"},"target_ids":{"type":"array","description":"Integer IDs of the targeted records (memberships or bans)","items":{"type":"integer"}},"failed_ids":{"type":"array","description":"Integer IDs of records that could not be processed","items":{"type":"integer"}},"target_count":{"type":["integer","null"],"description":"Total number of records that will be processed"},"performed_count":{"type":["integer","null"],"description":"Number of records processed so far"},"started_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when the background job began processing"},"completed_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when the background job finished"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"status":{"type":"string","enum":["queued","processing","completed"],"description":"Current status of the async action. Progresses: queued → processing → completed."}},"required":["community_id","completed_at","created_at","failed_ids","id","performed_count","public_id","started_at","status","target_all","target_count","target_ids","updated_at"]},"CommunitiesMembershipsBanActionAttributes":{"type":"object","title":"Communities::Memberships::BanAction","description":"Communities::Memberships::BanAction","allOf":[{"$ref":"#/components/schemas/CommunitiesActionAttributes"},{"type":"object","properties":{"reason":{"type":["string","null"],"description":"Optional reason applied to each ban created by this action"}}}],"example":{"id":501,"public_id":"BnAcT1","community_id":1,"target_all":false,"target_ids":[101,102],"failed_ids":[],"target_count":2,"performed_count":2,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:01:05.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:05.000Z","status":"completed","reason":"Violated community guidelines"},"required":["community_id","completed_at","created_at","failed_ids","id","performed_count","public_id","reason","started_at","status","target_all","target_count","target_ids","updated_at"]},"CommunitiesMembershipsBanActionParameters":{"type":"object","title":"Communities::Memberships::BanAction","description":"Communities::Memberships::BanAction","properties":{"target_all":{"type":"boolean","description":"When true, ban all members in the community (target_ids is ignored)"},"target_ids":{"type":"array","description":"Array of membership public IDs to ban. Required when target_all is false.","items":{"type":"string"}},"reason":{"type":["string","null"],"description":"Optional reason applied to each ban"}},"example":{"communities_memberships_ban_action":{"target_all":false,"target_ids":["AbCdEf","GhIjKl"],"reason":"Violated community guidelines"}}},"CommunitiesMembershipsAddToGroupActionAttributes":{"type":"object","title":"Communities::Memberships::AddToGroupAction","description":"Communities::Memberships::AddToGroupAction","allOf":[{"$ref":"#/components/schemas/CommunitiesActionAttributes"},{"type":"object","properties":{"space_ids":{"type":"array","description":"Integer IDs of the spaces (groups) members are added to","items":{"type":"integer"}}}}],"example":{"id":502,"public_id":"AdGrP1","community_id":1,"target_all":false,"target_ids":[101,102],"failed_ids":[],"target_count":2,"performed_count":2,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:01:05.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:05.000Z","status":"completed","space_ids":[10,11]},"required":["community_id","completed_at","created_at","failed_ids","id","performed_count","public_id","space_ids","started_at","status","target_all","target_count","target_ids","updated_at"]},"CommunitiesMembershipsAddToGroupActionParameters":{"type":"object","title":"Communities::Memberships::AddToGroupAction","description":"Communities::Memberships::AddToGroupAction","properties":{"target_all":{"type":"boolean","description":"When true, add all members in the community to the specified spaces (target_ids is ignored)"},"target_ids":{"type":"array","description":"Array of membership public IDs to add to the spaces. Required when target_all is false.","items":{"type":"string"}},"space_ids":{"type":"array","description":"Array of space public IDs to add the members to","items":{"type":"string"}}},"example":{"communities_memberships_add_to_group_action":{"target_all":false,"target_ids":["AbCdEf","GhIjKl"],"space_ids":["SpAcEa","SpAcEb"]}}},"CommunitiesMembershipsRemoveFromGroupActionAttributes":{"type":"object","title":"Communities::Memberships::RemoveFromGroupAction","description":"Communities::Memberships::RemoveFromGroupAction","allOf":[{"$ref":"#/components/schemas/CommunitiesActionAttributes"},{"type":"object","properties":{"space_ids":{"type":"array","description":"Integer IDs of the spaces (groups) members are removed from","items":{"type":"integer"}}}}],"example":{"id":503,"public_id":"RmGrP1","community_id":1,"target_all":false,"target_ids":[101,102],"failed_ids":[],"target_count":2,"performed_count":2,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:01:05.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:05.000Z","status":"completed","space_ids":[10,11]},"required":["community_id","completed_at","created_at","failed_ids","id","performed_count","public_id","space_ids","started_at","status","target_all","target_count","target_ids","updated_at"]},"CommunitiesMembershipsRemoveFromGroupActionParameters":{"type":"object","title":"Communities::Memberships::RemoveFromGroupAction","description":"Communities::Memberships::RemoveFromGroupAction","properties":{"target_all":{"type":"boolean","description":"When true, remove all members in the community from the specified spaces (target_ids is ignored)"},"target_ids":{"type":"array","description":"Array of membership public IDs to remove from the spaces. Required when target_all is false.","items":{"type":"string"}},"space_ids":{"type":"array","description":"Array of space public IDs to remove the members from","items":{"type":"string"}}},"example":{"communities_memberships_remove_from_group_action":{"target_all":false,"target_ids":["AbCdEf","GhIjKl"],"space_ids":["SpAcEa"]}}},"CommunitiesMembershipsExportActionAttributes":{"type":"object","title":"Communities::Memberships::ExportAction","description":"Communities::Memberships::ExportAction","allOf":[{"$ref":"#/components/schemas/CommunitiesActionAttributes"},{"type":"object","properties":{"fields":{"type":"array","description":"Column names included in the export file","items":{"type":"string"}}}}],"example":{"id":504,"public_id":"ExPrt1","community_id":1,"target_all":true,"target_ids":[],"failed_ids":[],"target_count":150,"performed_count":150,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:01:30.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:30.000Z","status":"completed","fields":["name","email","joined_at"]},"required":["community_id","completed_at","created_at","failed_ids","fields","id","performed_count","public_id","started_at","status","target_all","target_count","target_ids","updated_at"]},"CommunitiesMembershipsExportActionParameters":{"type":"object","title":"Communities::Memberships::ExportAction","description":"Communities::Memberships::ExportAction","properties":{"target_all":{"type":"boolean","description":"When true, export all members in the community (target_ids is ignored)"},"target_ids":{"type":"array","description":"Array of membership public IDs to export. Required when target_all is false.","items":{"type":"string"}},"fields":{"type":"array","description":"Array of column names to include in the export","items":{"type":"string"}}},"example":{"communities_memberships_export_action":{"target_all":true,"target_ids":[],"fields":["name","email","joined_at"]}}},"CommunitiesBansUnbanActionAttributes":{"type":"object","title":"Communities::Bans::UnbanAction","description":"Communities::Bans::UnbanAction","allOf":[{"$ref":"#/components/schemas/CommunitiesActionAttributes"}],"example":{"id":505,"public_id":"UnBn01","community_id":1,"target_all":false,"target_ids":[201,202],"failed_ids":[],"target_count":2,"performed_count":2,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:01:05.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:05.000Z","status":"completed"},"required":["community_id","completed_at","created_at","failed_ids","id","performed_count","public_id","started_at","status","target_all","target_count","target_ids","updated_at"]},"CommunitiesBansUnbanActionParameters":{"type":"object","title":"Communities::Bans::UnbanAction","description":"Communities::Bans::UnbanAction","properties":{"target_all":{"type":"boolean","description":"When true, unban all banned contacts in the community (target_ids is ignored)"},"target_ids":{"type":"array","description":"Array of ban public IDs to unban. Required when target_all is false.","items":{"type":"string"}}},"example":{"communities_bans_unban_action":{"target_all":false,"target_ids":["MnOpQr","StUvWx"]}}},"CommunitiesBansExportActionAttributes":{"type":"object","title":"Communities::Bans::ExportAction","description":"Communities::Bans::ExportAction","allOf":[{"$ref":"#/components/schemas/CommunitiesActionAttributes"},{"type":"object","properties":{"fields":{"type":"array","description":"Column names included in the export file","items":{"type":"string"}}}}],"example":{"id":506,"public_id":"BnExP1","community_id":1,"target_all":true,"target_ids":[],"failed_ids":[],"target_count":50,"performed_count":50,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:01:15.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:15.000Z","status":"completed","fields":["contact_name","contact_email","reason","created_at"]},"required":["community_id","completed_at","created_at","failed_ids","fields","id","performed_count","public_id","started_at","status","target_all","target_count","target_ids","updated_at"]},"CommunitiesBansExportActionParameters":{"type":"object","title":"Communities::Bans::ExportAction","description":"Communities::Bans::ExportAction","properties":{"target_all":{"type":"boolean","description":"When true, export all bans in the community (target_ids is ignored)"},"target_ids":{"type":"array","description":"Array of ban public IDs to export. Required when target_all is false.","items":{"type":"string"}},"fields":{"type":"array","description":"Array of column names to include in the export","items":{"type":"string"}}},"example":{"communities_bans_export_action":{"target_all":true,"target_ids":[],"fields":["contact_name","contact_email","reason","created_at"]}}},"ContactBaseAttributes":{"type":"object","title":"Contacts","description":"Contacts","properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":"string","description":"Contact public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"anonymous":{"type":["integer","null"],"description":"Anonymous"},"email_address":{"type":["string","null"],"description":"The contact's email address. It is currently not expected to be null and is the main identifier for a contact."},"first_name":{"type":["string","null"],"description":"First name"},"last_name":{"type":["string","null"],"description":"Last name"},"phone_number":{"type":["string","null"],"description":"Phone number"},"time_zone":{"type":["string","null"],"description":"The human-readable time zone, usually set dynamically by the app for the contact, for example, during opt-in.\nRead 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).\n"},"uuid":{"type":"string","description":"UUID"},"unsubscribed_at":{"type":["string","null"],"description":"Unsubscribed"},"last_notification_email_sent_at":{"type":["string","null"],"description":"Last notification email sent"},"email_suppression_reason":{"type":["string","null"],"description":"The reason the contact's email address is suppressed from receiving emails. Null when no suppression exists."},"is_active":{"type":"boolean","description":"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":{"type":["string","null"],"description":"Facebook URL"},"twitter_url":{"type":["string","null"],"description":"Twitter URL"},"instagram_url":{"type":["string","null"],"description":"Instagram URL"},"linkedin_url":{"type":["string","null"],"description":"LinkedIn URL"},"website_url":{"type":["string","null"],"description":"Website URL"},"created_at":{"type":"string","format":"date-time","description":"Date added"},"updated_at":{"type":"string","format":"date-time","description":"Last updated"},"tags":{"type":["array","null"],"items":{"type":"object","title":"Contact Tags","description":"Contact Tags","properties":{"id":{"type":"integer","description":"Tag ID"},"public_id":{"type":"string","description":"Tag public ID"},"name":{"type":"string","description":"Name"},"color":{"type":"string","description":"Color"},"applied_at":{"type":["string","null"],"description":"The datetime the tag was applied by creating a Contacts::AppliedTag that maps the tag to the contact."}}},"description":"Contact Tags"},"custom_attributes":{"type":"object","additionalProperties":{"type":"string"},"description":"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":{"allOf":[{"$ref":"#/components/schemas/VisitsAttributes"}],"description":"Visit tracking information for this contact, including first visit, last visit, and last visit with UTM parameters"}},"example":{"id":24359,"public_id":"vQxYMj","workspace_id":4,"anonymous":0,"email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199","time_zone":"Madrid","uuid":"80b7f903-76cd-4edf-94bf-fc34c13ee654","unsubscribed_at":null,"last_notification_email_sent_at":null,"email_suppression_reason":null,"is_active":true,"fb_url":null,"twitter_url":null,"instagram_url":null,"linkedin_url":null,"website_url":null,"created_at":"2026-01-09T15:27:56.647Z","updated_at":"2026-01-09T15:28:08.075Z","tags":[],"custom_attributes":{},"visits":{"first_visit":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"},"last_visit":null,"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}}},"required":["anonymous","created_at","custom_attributes","email_address","email_suppression_reason","fb_url","first_name","id","instagram_url","is_active","last_name","last_notification_email_sent_at","linkedin_url","phone_number","public_id","tags","time_zone","twitter_url","unsubscribed_at","updated_at","uuid","visits","website_url","workspace_id"]},"ContactAttributes":{"allOf":[{"$ref":"#/components/schemas/ContactBaseAttributes"}],"type":"object","title":"Contacts","description":"Contacts","properties":{"email_engagement":{"type":"object","description":"**Expandable** Email engagement timestamps. Only included when `expand[]=email_engagement` is passed. See the [Expanding guide](https://developers.myclickfunnels.com/docs/expand) for details.","properties":{"last_email_sent_at":{"type":["string","null"],"format":"date-time","description":"The datetime of the last email sent to this contact."},"last_email_opened_at":{"type":["string","null"],"format":"date-time","description":"The datetime of the last email opened by this contact."},"last_email_clicked_at":{"type":["string","null"],"format":"date-time","description":"The datetime of the last email link clicked by this contact."}}}},"example":{"id":24359,"public_id":"vQxYMj","workspace_id":4,"anonymous":0,"email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199","time_zone":"Madrid","uuid":"80b7f903-76cd-4edf-94bf-fc34c13ee654","unsubscribed_at":null,"last_notification_email_sent_at":null,"email_suppression_reason":null,"is_active":true,"fb_url":null,"twitter_url":null,"instagram_url":null,"linkedin_url":null,"website_url":null,"created_at":"2026-01-09T15:27:56.647Z","updated_at":"2026-01-09T15:28:08.075Z","tags":[],"custom_attributes":{},"visits":{"first_visit":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"},"last_visit":null,"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}}},"required":["anonymous","created_at","custom_attributes","email_address","email_suppression_reason","fb_url","first_name","id","instagram_url","is_active","last_name","last_notification_email_sent_at","linkedin_url","phone_number","public_id","tags","time_zone","twitter_url","unsubscribed_at","updated_at","uuid","visits","website_url","workspace_id"]},"ContactShortAttributes":{"type":"object","title":"Contact (Short)","description":"A compact contact representation used in nested resources.","properties":{"id":{"type":"integer","description":"The ID of the contact."},"public_id":{"type":"string","description":"The public ID of the contact."},"email_address":{"type":"string","description":"The email address of the contact."},"first_name":{"type":["string","null"],"description":"The first name of the contact."},"last_name":{"type":["string","null"],"description":"The last name of the contact."},"phone_number":{"type":["string","null"],"description":"The phone number of the contact."}},"example":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"},"required":["email_address","first_name","id","last_name","phone_number","public_id"]},"ContactParameters":{"type":"object","title":"Contacts","description":"Contacts","required":[],"properties":{"email_address":{"type":["string","null"],"description":"Email address"},"first_name":{"type":["string","null"],"description":"First name"},"last_name":{"type":["string","null"],"description":"Last name"},"phone_number":{"type":["string","null"],"description":"Phone number"},"time_zone":{"type":["string","null"],"description":"The human-readable time zone, usually set dynamically by the app for the contact, for example, during opt-in.\nRead 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).\n"},"fb_url":{"type":["string","null"],"description":"Facebook URL"},"twitter_url":{"type":["string","null"],"description":"Twitter URL"},"instagram_url":{"type":["string","null"],"description":"Instagram URL"},"linkedin_url":{"type":["string","null"],"description":"LinkedIn URL"},"website_url":{"type":["string","null"],"description":"Website URL"},"tag_ids":{"type":"array","items":{"type":"integer"},"description":"Contact Tag IDs. Any valid array, empty or with valid tags will overwrite existing values. To avoid losing existing tags first use the Fetch Contact endpoint, then be sure to include the existing tags in your payload along with any new addition(s)."},"custom_attributes":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom attributes are usually added in ClickFunnels to a contact when they submit forms that contain custom contact attributes. Here you can directly create them during contact modification.\n\nCustom attributes are provided as key-value pairs:\nA key that does not exist, will create a new custom contact attribute.\nA key that already exists, will update the value of an existing custom contact attribute.\n\nEmpty or null values, will set the custom attribute values to empty strings. A key that has special characters or spaces will be automatically converted to `snake_case` (For example, 'Favorite Food! 🥑' will be converted to 'favorite_food').\n\nEmpty keys will trigger a bad request response. Also, non-object inputs for custom_attributes (e.g. an array or string), it will be ignored.\nKeys that are default properties on the Contact resource or variations of it will result in an error. E.g., 'first_name', 'First Name', etc. are not valid inputs.\n"}},"example":{"contact":{"email_address":"test-4059727ec8e173ce4648@example.com","first_name":"Sol","last_name":"Jones","phone_number":"(224) 508-1342 x59891","time_zone":"Pacific Time (US & Canada)","fb_url":"https://www.facebook.com/example","twitter_url":"https://twitter.com/example","instagram_url":null,"linkedin_url":"https://www.linkedin.com/in/example","website_url":"https://example.com"}}},"ContactParametersUpdate":{"type":"object","title":"Contacts","description":"Contacts","required":[],"properties":{"email_address":{"type":["string","null"],"description":"Email address"},"first_name":{"type":["string","null"],"description":"First name"},"last_name":{"type":["string","null"],"description":"Last name"},"phone_number":{"type":["string","null"],"description":"Phone number"},"time_zone":{"type":["string","null"],"description":"The human-readable time zone, usually set dynamically by the app for the contact, for example, during opt-in.\nRead 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).\n"},"fb_url":{"type":["string","null"],"description":"Facebook URL"},"twitter_url":{"type":["string","null"],"description":"Twitter URL"},"instagram_url":{"type":["string","null"],"description":"Instagram URL"},"linkedin_url":{"type":["string","null"],"description":"LinkedIn URL"},"website_url":{"type":["string","null"],"description":"Website URL"},"tag_ids":{"type":"array","items":{"type":"integer"},"description":"Contact Tag IDs. Any valid array, empty or with valid tags will overwrite existing values. To avoid losing existing tags first use the Fetch Contact endpoint, then be sure to include the existing tags in your payload along with any new addition(s)."},"custom_attributes":{"type":"object","additionalProperties":{"type":"string"},"description":"Custom attributes are usually added in ClickFunnels to a contact when they submit forms that contain custom contact attributes. Here you can directly create them during contact modification.\n\nCustom attributes are provided as key-value pairs:\nA key that does not exist, will create a new custom contact attribute.\nA key that already exists, will update the value of an existing custom contact attribute.\n\nEmpty or null values, will set the custom attribute values to empty strings. A key that has special characters or spaces will be automatically converted to `snake_case` (For example, 'Favorite Food! 🥑' will be converted to 'favorite_food').\n\nEmpty keys will trigger a bad request response. Also, non-object inputs for custom_attributes (e.g. an array or string), it will be ignored.\nKeys that are default properties on the Contact resource or variations of it will result in an error. E.g., 'first_name', 'First Name', etc. are not valid inputs.\n"}},"example":{"contact":{"email_address":"test-4059727ec8e173ce4648@example.com","first_name":"Sol","last_name":"Jones","phone_number":"(224) 508-1342 x59891","time_zone":"Pacific Time (US & Canada)","fb_url":"https://www.facebook.com/example","twitter_url":"https://twitter.com/example","instagram_url":null,"linkedin_url":"https://www.linkedin.com/in/example","website_url":"https://example.com"}}},"ContactsAppliedTagAttributes":{"type":"object","title":"Contacts Applied Tags","description":"Contacts Applied Tags","properties":{"id":{"type":"integer","description":"Applied Tag ID"},"public_id":{"type":["string","null"],"description":"Applied Tag public ID"},"contact_id":{"type":"integer","description":"Contact ID"},"tag_id":{"type":"integer","description":"Tag ID"},"created_at":{"type":["string","null"],"format":"date-time","description":"Date added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Last updated"},"tag":{"type":"object","title":"Contact Tags","description":"Contact Tags","properties":{"public_id":{"type":["string","null"],"description":"Tag public ID"},"name":{"type":"string","description":"Name"},"color":{"type":"string","description":"Color"}}},"contact":{"$ref":"#/components/schemas/ContactShortAttributes"}},"example":{"id":1,"public_id":"PYfeiE","contact_id":1,"tag_id":3,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","tag":{"public_id":"KekAvg","name":"Example Tag","color":"#00FF00"},"contact":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"}},"required":["contact","contact_id","created_at","id","public_id","tag","tag_id","updated_at"]},"ContactsAppliedTagParameters":{"type":"object","title":"Contacts Applied Tags","description":"Contacts Applied Tags","required":["tag_id"],"properties":{"tag_id":{"type":"integer","description":"Tag ID"}},"example":{"contacts_applied_tag":{"tag_id":3}}},"ContactsAppliedTagParametersUpdate":{"type":"object","title":"Contacts Applied Tags","description":"Contacts Applied Tags","required":["tag_id"],"properties":{"tag_id":{"type":"integer","description":"Tag ID"}},"example":{"contacts_applied_tag":{"tag_id":3}}},"ContactsTagAttributes":{"type":"object","title":"Contact Tags","description":"Contact Tags","properties":{"id":{"type":"integer","description":"Tag ID"},"public_id":{"type":["string","null"],"description":"Tag public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Name"},"color":{"type":"string","description":"Color"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":4,"public_id":"LutgGM","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["color","created_at","id","name","public_id","updated_at","workspace_id"]},"ContactsTagParameters":{"type":"object","title":"Contact Tags","description":"Contact Tags","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"color":{"type":"string","description":"Tag Color"}},"example":{"contacts_tag":{"name":"Example Tag","color":"#FF5733"}}},"ContactsTagParametersUpdate":{"type":"object","title":"Contact Tags","description":"Contact Tags","required":[],"properties":{"name":{"type":"string","description":"Tag Name"},"color":{"type":"string","description":"Tag Color"}},"example":{"contacts_tag":{"name":"renamed-tag","color":"#FF5733"}}},"ContactsTagActionAttributes":{"type":"object","title":"Contacts Tag Actions","description":"Bulk tag-apply or tag-remove action targeting a collection of contacts","properties":{"id":{"type":"integer","description":"Tag Action ID"},"public_id":{"type":["string","null"],"description":"Tag Action public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"tag_ids":{"type":"array","items":{"type":"integer"},"description":"The raw integer IDs of the tags applied or removed by this action. The response echoes the stored integer tag IDs, not the public IDs passed on create."},"action_type":{"type":"string","description":"Whether to apply or remove the tags. `\"add\"` (default) tags matching contacts; `\"remove\"` untags them.","enum":["add","remove"]},"filter_id":{"type":["integer","null"],"description":"ID of the `Refine::StoredFilter` that drives target selection. Populated automatically when `stable_id` or `stored_filter_id` is supplied on create. `null` when the action targets explicit `target_ids` or `target_all`."},"target_all":{"type":["boolean","null"],"description":"When `true` the action targets every contact in the workspace. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"target_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"Explicit list of targeted contacts as raw integer IDs. The response echoes the stored integer IDs, not the public IDs passed on create."},"target_count":{"type":["integer","null"],"description":"Total number of contacts selected for this action. `null` until the async job has resolved the audience size."},"performed_count":{"type":["integer","null"],"description":"Number of contacts processed so far. Poll this field alongside `target_count` to track async progress."},"created_by_id":{"type":["integer","null"],"description":"ID of the workspace membership that created this action."},"approved_by_id":{"type":["integer","null"],"description":"ID of the membership that approved this action (reserved for future use)."},"scheduled_for":{"type":["string","null"],"format":"date-time","description":"When set, the action will not execute until this datetime. `null` means execute immediately."},"started_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job began processing contacts. `null` until started."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job finished. `null` until complete."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"aB3cD4","workspace_id":42000,"tag_ids":[12,34],"action_type":"add","filter_id":7,"target_all":false,"target_ids":[],"target_count":850,"performed_count":200,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:00.000Z"},"required":["action_type","approved_by_id","completed_at","created_at","created_by_id","filter_id","id","performed_count","public_id","scheduled_for","started_at","tag_ids","target_all","target_count","target_ids","updated_at","workspace_id"]},"ContactsTagActionParameters":{"type":"object","title":"Contacts Tag Actions","description":"Contacts Tag Actions","required":["tag_ids"],"properties":{"tag_ids":{"type":"array","items":{"type":"string"},"description":"One or more tag `public_id` strings identifying existing tags to apply or remove. Every id must reference a tag that already exists in this workspace; unknown ids are rejected with a 422 (tags are not auto-created)."},"action_type":{"type":"string","description":"`\"add\"` (default) applies the tags; `\"remove\"` removes them.","enum":["add","remove"]},"stable_id":{"type":"string","description":"A URL-encoded Refine `stable_id` token — the standard gzip+base64 full-state format used by both the `contacts/filters` API endpoint and the server-rendered filter UI, making tokens interoperable. Returned by `POST /api/v2/workspaces/{workspace_id}/contacts/filters` in the `stable_id` field. Pass the token exactly as returned; do not decode or re-encode it. The server persists the decoded filter so the async job can re-derive the audience at perform time. Mutually exclusive with `stored_filter_id`, `target_ids`, and `target_all`."},"stored_filter_id":{"type":"string","description":"The `id` (integer) or `public_id` (string) of a saved `Refine::StoredFilter` scoped to this workspace (must be a ContactsFilter). Also accepted as `filter_id`. Mutually exclusive with `stable_id`, `target_ids`, and `target_all`."},"target_ids":{"type":"array","items":{"type":"string"},"description":"Explicit list of contacts to tag/untag, as the `public_id` strings returned by the contacts endpoints (e.g. `\"aB3cD4\"`) — the same id format used everywhere else in this API. Numeric ids are also accepted. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_all`."},"target_all":{"type":"boolean","description":"Set to `true` to target every contact in the workspace. Use deliberately. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"scheduled_for":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime. When supplied the action is deferred until this time. Omit (or pass `null`) to execute immediately."}},"example":{"contacts_tag_action":{"tag_ids":["12","34"],"action_type":"add","stored_filter_id":"7"}}},"ContactsEnrollActionAttributes":{"type":"object","title":"Contacts Enroll Actions","description":"Bulk course-enrollment action targeting a collection of contacts","properties":{"id":{"type":"integer","description":"Enroll Action ID"},"public_id":{"type":["string","null"],"description":"Enroll Action public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"course_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"The raw integer IDs of the courses contacts were enrolled into. The response echoes stored integer IDs, not the public IDs passed on create."},"section_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"The raw integer IDs of the course sections contacts were enrolled into. The response echoes stored integer IDs, not the public IDs passed on create."},"filter_id":{"type":["integer","null"],"description":"ID of the `Refine::StoredFilter` that drives target selection. Populated automatically when `stable_id` or `stored_filter_id` is supplied on create. `null` when the action targets explicit `target_ids` or `target_all`."},"target_all":{"type":["boolean","null"],"description":"When `true` the action targets every contact in the workspace. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"target_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"Explicit list of targeted contacts as raw integer IDs. The response echoes the stored integer IDs, not the public IDs passed on create."},"target_count":{"type":["integer","null"],"description":"Total number of contacts selected for this action. `null` until the async job has resolved the audience size."},"performed_count":{"type":["integer","null"],"description":"Number of contacts processed so far. Poll this field alongside `target_count` to track async progress."},"created_by_id":{"type":["integer","null"],"description":"ID of the workspace membership that created this action."},"scheduled_for":{"type":["string","null"],"format":"date-time","description":"When set, the action will not execute until this datetime. `null` means execute immediately."},"started_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job began processing contacts. `null` until started."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job finished. `null` until complete."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"aB3cD4","workspace_id":42000,"course_ids":[4],"section_ids":[8],"filter_id":7,"target_all":false,"target_ids":[],"target_count":200,"performed_count":50,"created_by_id":5,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:00.000Z"},"required":["completed_at","course_ids","created_at","created_by_id","filter_id","id","performed_count","public_id","scheduled_for","section_ids","started_at","target_all","target_count","target_ids","updated_at","workspace_id"]},"ContactsEnrollActionParameters":{"type":"object","title":"Contacts Enroll Actions","description":"Contacts Enroll Actions","properties":{"course_ids":{"type":"array","items":{"type":"string"},"description":"Public IDs of the courses to enroll contacts into. Contacts are enrolled into every section of each course. Provide `course_ids`, `section_ids`, or both."},"section_ids":{"type":"array","items":{"type":"string"},"description":"Public IDs of specific course sections to enroll contacts into. Use when you want finer-grained control than `course_ids`."},"stable_id":{"type":"string","description":"A URL-encoded Refine `stable_id` token — the standard gzip+base64 full-state format used by both the `contacts/filters` API endpoint and the server-rendered filter UI, making tokens interoperable. Returned by `POST /api/v2/workspaces/{workspace_id}/contacts/filters` in the `stable_id` field. Pass the token exactly as returned; do not decode or re-encode it. The server persists the decoded filter so the async job can re-derive the audience at perform time. Mutually exclusive with `stored_filter_id`, `target_ids`, and `target_all`."},"stored_filter_id":{"type":"string","description":"The `id` (integer) or `public_id` (string) of a saved `Refine::StoredFilter` scoped to this workspace (must be a ContactsFilter). Also accepted as `filter_id`. Mutually exclusive with `stable_id`, `target_ids`, and `target_all`."},"target_ids":{"type":"array","items":{"type":"string"},"description":"Explicit list of contacts to enroll, as the `public_id` strings returned by the contacts endpoints. Numeric ids are also accepted. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_all`."},"target_all":{"type":"boolean","description":"Set to `true` to target every contact in the workspace. Use deliberately. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"scheduled_for":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime. When supplied the action is deferred until this time. Omit (or pass `null`) to execute immediately."}},"example":{"contacts_enroll_action":{"course_ids":["QwdWoj"],"stored_filter_id":"7"}}},"ContactsRunWorkflowActionAttributes":{"type":"object","title":"Contacts Run Workflow Actions","description":"Bulk workflow-trigger action targeting a collection of contacts","properties":{"id":{"type":"integer","description":"Run Workflow Action ID"},"public_id":{"type":["string","null"],"description":"Run Workflow Action public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"workflow_id":{"type":"integer","description":"ID of the workflow to run against the targeted contacts."},"force_run":{"type":["boolean","null"],"description":"When `true`, contacts already in the workflow are re-enqueued. Defaults to `false`."},"filter_id":{"type":["integer","null"],"description":"ID of the `Refine::StoredFilter` that drives target selection. Populated automatically when `stable_id` or `stored_filter_id` is supplied on create. `null` when the action targets explicit `target_ids` or `target_all`."},"target_all":{"type":["boolean","null"],"description":"When `true` the action targets every contact in the workspace. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"target_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"Explicit list of targeted contacts as raw integer IDs. The response echoes the stored integer IDs, not the public IDs passed on create."},"target_count":{"type":["integer","null"],"description":"Total number of contacts selected for this action. `null` until the async job has resolved the audience size."},"performed_count":{"type":["integer","null"],"description":"Number of contacts processed so far. Poll this field alongside `target_count` to track async progress."},"created_by_id":{"type":["integer","null"],"description":"ID of the workspace membership that created this action."},"approved_by_id":{"type":["integer","null"],"description":"ID of the membership that approved this action (reserved for future use)."},"scheduled_for":{"type":["string","null"],"format":"date-time","description":"When set, the action will not execute until this datetime. `null` means execute immediately."},"started_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job began processing contacts. `null` until started."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job finished. `null` until complete."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"bC4dE5","workspace_id":42000,"workflow_id":99,"force_run":false,"filter_id":7,"target_all":false,"target_ids":[],"target_count":500,"performed_count":100,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:00.000Z"},"required":["approved_by_id","completed_at","created_at","created_by_id","filter_id","force_run","id","performed_count","public_id","scheduled_for","started_at","target_all","target_count","target_ids","updated_at","workflow_id","workspace_id"]},"ContactsRunWorkflowActionParameters":{"type":"object","title":"Contacts Run Workflow Actions","description":"Contacts Run Workflow Actions","required":["workflow_id"],"properties":{"workflow_id":{"type":"string","description":"The `public_id` of the workflow to run against the targeted contacts. Required."},"force_run":{"type":"boolean","description":"When `true`, contacts already enrolled in the workflow are re-enqueued. Defaults to `false`."},"stable_id":{"type":"string","description":"A URL-encoded Refine `stable_id` token — the standard gzip+base64 full-state format used by both the `contacts/filters` API endpoint and the server-rendered filter UI, making tokens interoperable. Returned by `POST /api/v2/workspaces/{workspace_id}/contacts/filters` in the `stable_id` field. Pass the token exactly as returned; do not decode or re-encode it. The server persists the decoded filter so the async job can re-derive the audience at perform time. Mutually exclusive with `stored_filter_id`, `target_ids`, and `target_all`."},"stored_filter_id":{"type":"string","description":"The `id` (integer) or `public_id` (string) of a saved `Refine::StoredFilter` scoped to this workspace (must be a ContactsFilter). Also accepted as `filter_id`. Mutually exclusive with `stable_id`, `target_ids`, and `target_all`."},"target_ids":{"type":"array","items":{"type":"string"},"description":"Explicit list of contacts to run the workflow against, as the `public_id` strings returned by the contacts endpoints. Numeric ids are also accepted. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_all`."},"target_all":{"type":"boolean","description":"Set to `true` to target every contact in the workspace. Use deliberately. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"scheduled_for":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime. When supplied the action is deferred until this time. Omit (or pass `null`) to execute immediately."}},"example":{"contacts_run_workflow_action":{"workflow_id":"Wf1aB2","stored_filter_id":"7"}}},"ContactsUnsubscribeActionAttributes":{"type":"object","title":"Contacts Unsubscribe Actions","description":"Bulk email-unsubscribe action targeting a collection of contacts","properties":{"id":{"type":"integer","description":"Unsubscribe Action ID"},"public_id":{"type":["string","null"],"description":"Unsubscribe Action public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"filter_id":{"type":["integer","null"],"description":"ID of the `Refine::StoredFilter` that drives target selection. Populated automatically when `stable_id` or `stored_filter_id` is supplied on create. `null` when the action targets explicit `target_ids` or `target_all`."},"target_all":{"type":["boolean","null"],"description":"When `true` the action targets every contact in the workspace. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"target_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"Explicit list of targeted contacts as raw integer IDs. The response echoes the stored integer IDs, not the public IDs passed on create."},"target_count":{"type":["integer","null"],"description":"Total number of contacts selected for this action. `null` until the async job has resolved the audience size."},"performed_count":{"type":["integer","null"],"description":"Number of contacts processed so far. Poll this field alongside `target_count` to track async progress."},"created_by_id":{"type":["integer","null"],"description":"ID of the workspace membership that created this action."},"approved_by_id":{"type":["integer","null"],"description":"ID of the membership that approved this action (reserved for future use)."},"scheduled_for":{"type":["string","null"],"format":"date-time","description":"When set, the action will not execute until this datetime. `null` means execute immediately."},"started_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job began processing contacts. `null` until started."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job finished. `null` until complete."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"cD5eF6","workspace_id":42000,"filter_id":7,"target_all":false,"target_ids":[],"target_count":300,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["approved_by_id","completed_at","created_at","created_by_id","filter_id","id","performed_count","public_id","scheduled_for","started_at","target_all","target_count","target_ids","updated_at","workspace_id"]},"ContactsUnsubscribeActionParameters":{"type":"object","title":"Contacts Unsubscribe Actions","description":"Contacts Unsubscribe Actions","properties":{"stable_id":{"type":"string","description":"A URL-encoded Refine `stable_id` token — the standard gzip+base64 full-state format used by both the `contacts/filters` API endpoint and the server-rendered filter UI, making tokens interoperable. Returned by `POST /api/v2/workspaces/{workspace_id}/contacts/filters` in the `stable_id` field. Pass the token exactly as returned; do not decode or re-encode it. The server persists the decoded filter so the async job can re-derive the audience at perform time. Mutually exclusive with `stored_filter_id`, `target_ids`, and `target_all`."},"stored_filter_id":{"type":"string","description":"The `id` (integer) or `public_id` (string) of a saved `Refine::StoredFilter` scoped to this workspace (must be a ContactsFilter). Also accepted as `filter_id`. Mutually exclusive with `stable_id`, `target_ids`, and `target_all`."},"target_ids":{"type":"array","items":{"type":"string"},"description":"Explicit list of contacts to unsubscribe, as the `public_id` strings returned by the contacts endpoints. Numeric ids are also accepted. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_all`."},"target_all":{"type":"boolean","description":"Set to `true` to target every contact in the workspace. Use deliberately. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"scheduled_for":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime. When supplied the action is deferred until this time. Omit (or pass `null`) to execute immediately."}},"example":{"contacts_unsubscribe_action":{"stored_filter_id":"7"}}},"ContactsExportActionAttributes":{"type":"object","title":"Contacts Export Actions","description":"Bulk CSV-export action targeting a collection of contacts","properties":{"id":{"type":"integer","description":"Export Action ID"},"public_id":{"type":["string","null"],"description":"Export Action public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"fields":{"type":["array","null"],"items":{"type":"string"},"description":"The contact field keys to include as columns in the exported CSV (e.g. `[\"email_address\", \"first_name\", \"tag_ids\"]`). Custom attribute keys are also accepted."},"file_url":{"type":["string","null"],"description":"Download URL for the generated CSV file. `null` until the async export job completes."},"filter_id":{"type":["integer","null"],"description":"ID of the `Refine::StoredFilter` that drives target selection. Populated automatically when `stable_id` or `stored_filter_id` is supplied on create. `null` when the action targets explicit `target_ids` or `target_all`."},"target_all":{"type":["boolean","null"],"description":"When `true` the action targets every contact in the workspace. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"target_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"Explicit list of targeted contacts as raw integer IDs. The response echoes the stored integer IDs, not the public IDs passed on create."},"target_count":{"type":["integer","null"],"description":"Total number of contacts selected for this action. `null` until the async job has resolved the audience size."},"performed_count":{"type":["integer","null"],"description":"Number of contacts processed so far. Poll this field alongside `target_count` to track async progress."},"created_by_id":{"type":["integer","null"],"description":"ID of the workspace membership that created this action."},"approved_by_id":{"type":["integer","null"],"description":"ID of the membership that approved this action (reserved for future use)."},"scheduled_for":{"type":["string","null"],"format":"date-time","description":"When set, the action will not execute until this datetime. `null` means execute immediately."},"started_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job began processing contacts. `null` until started."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job finished. `null` until complete."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"dE6fG7","workspace_id":42000,"fields":["email_address","first_name","tag_ids"],"file_url":null,"filter_id":7,"target_all":false,"target_ids":[],"target_count":1500,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["approved_by_id","completed_at","created_at","created_by_id","fields","file_url","filter_id","id","performed_count","public_id","scheduled_for","started_at","target_all","target_count","target_ids","updated_at","workspace_id"]},"ContactsExportActionParameters":{"type":"object","title":"Contacts Export Actions","description":"Contacts Export Actions","required":["fields"],"properties":{"fields":{"type":"array","items":{"type":"string"},"description":"The contact field keys to include as columns in the exported CSV. Standard keys include `email_address`, `first_name`, `last_name`, `tag_ids`, `phone_number`, etc. Custom attribute keys are also accepted. Required."},"stable_id":{"type":"string","description":"A URL-encoded Refine `stable_id` token — the standard gzip+base64 full-state format used by both the `contacts/filters` API endpoint and the server-rendered filter UI, making tokens interoperable. Returned by `POST /api/v2/workspaces/{workspace_id}/contacts/filters` in the `stable_id` field. Pass the token exactly as returned; do not decode or re-encode it. The server persists the decoded filter so the async job can re-derive the audience at perform time. Mutually exclusive with `stored_filter_id`, `target_ids`, and `target_all`."},"stored_filter_id":{"type":"string","description":"The `id` (integer) or `public_id` (string) of a saved `Refine::StoredFilter` scoped to this workspace (must be a ContactsFilter). Also accepted as `filter_id`. Mutually exclusive with `stable_id`, `target_ids`, and `target_all`."},"target_ids":{"type":"array","items":{"type":"string"},"description":"Explicit list of contacts to export, as the `public_id` strings returned by the contacts endpoints. Numeric ids are also accepted. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_all`."},"target_all":{"type":"boolean","description":"Set to `true` to target every contact in the workspace. Use deliberately. Mutually exclusive with `stable_id`, `stored_filter_id`, and `target_ids`."},"scheduled_for":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime. When supplied the action is deferred until this time. Omit (or pass `null`) to execute immediately."}},"example":{"contacts_export_action":{"fields":["email_address","first_name","tag_ids"],"stored_filter_id":"7"}}},"CourseAttributes":{"type":"object","title":"Courses","description":"Courses","properties":{"id":{"type":"integer","description":"Course ID"},"public_id":{"type":["string","null"],"description":"Course public ID"},"title":{"type":"string","description":"Title"},"published_at":{"type":["string","null"],"format":"date-time","description":"Available at"},"root_section_id":{"type":["string","null"],"description":"Root section. Auto-created with the course and the implicit parent of every top-level module. See [How a course is structured](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#how-a-course-is-structured) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md)."},"description":{"type":"string","description":"Description"},"current_path":{"type":["string","null"],"description":"Course Path URL"},"sharing_fingerprint":{"type":["string","null"],"description":"Sharing Fingerprint"},"show_in_community":{"type":["boolean","null"],"description":"Show In Customer Center?"},"show_to_non_members":{"type":["boolean","null"],"description":"Show To Non Members"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"},"redirect_to_full_course":{"type":["boolean","null"],"description":"Redirect To Full Course"},"unauthorized_redirect_url":{"type":["string","null"],"description":"Unauthorized Redirect"},"comments_enabled":{"type":["boolean","null"],"description":"Enable Lesson Comments?"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"},"image_url":{"type":["string","null"],"description":"The URL of the image that is shown on the storefront of the main course page"}},"example":{"id":1,"public_id":"iawbIp","title":"Example Course","published_at":"2025-01-01T00:00:00.000Z","root_section_id":null,"description":"A practical and engaging course designed to build core skills in Marketing.","current_path":null,"sharing_fingerprint":null,"show_in_community":false,"show_to_non_members":false,"upgrade_url":null,"redirect_to_full_course":true,"unauthorized_redirect_url":null,"comments_enabled":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","image_url":"https://example.myclickfunnels.com/uploads/image/1/file/9c8d1e7d480dc9882c519d4b4528826f.png"},"required":["comments_enabled","created_at","current_path","description","id","image_url","public_id","published_at","redirect_to_full_course","root_section_id","sharing_fingerprint","show_in_community","show_to_non_members","title","unauthorized_redirect_url","updated_at","upgrade_url"]},"CourseParameters":{"type":"object","title":"Courses","description":"Courses","required":["title"],"properties":{"title":{"type":"string","description":"Title"},"description":{"type":"string","description":"Description"},"show_in_community":{"type":["boolean","null"],"description":"Show In Customer Center?"},"redirect_to_full_course":{"type":["boolean","null"],"description":"Redirect To Full Course"},"image_id":{"type":["integer","null"],"description":"The ID of an Image to show on the storefront of the main course page"}},"example":{"course":{"title":"Getting Started"}}},"CourseParametersUpdate":{"type":"object","title":"Courses","description":"Courses. Updates are partial — only the attributes you include are changed; omitted attributes are left unchanged.","properties":{"title":{"type":"string","description":"Title"},"description":{"type":"string","description":"Description"},"show_in_community":{"type":["boolean","null"],"description":"Show In Customer Center?"},"redirect_to_full_course":{"type":["boolean","null"],"description":"Redirect To Full Course"},"image_id":{"type":["integer","null"],"description":"The ID of an Image to show on the storefront of the main course page"}},"example":{"course":{"title":"Example Course","description":"A practical and engaging course designed to build core skills in Marketing.","show_in_community":false,"redirect_to_full_course":true,"image_id":1}}},"CoursesEnrollmentAttributes":{"type":"object","title":"Enrollments","description":"Enrollments","properties":{"id":{"type":"integer","description":"Enrollment ID"},"public_id":{"type":["string","null"],"description":"Enrollment public ID"},"contact_id":{"type":"integer","description":"Contact ID"},"course_id":{"type":"integer","description":"Course"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"suspended":{"type":["boolean","null"],"description":"Suspended"},"suspension_reason":{"type":["string","null"],"description":"Suspension Reason"},"current_path":{"type":["string","null"],"description":"Current Path"},"origination_source_type":{"type":["string","null"],"description":"Origination Source Type"},"origination_source_id":{"type":"integer","description":"Origination Source ID"},"contact":{"$ref":"#/components/schemas/ContactShortAttributes"}},"example":{"id":1,"public_id":"kvqOCw","contact_id":3,"course_id":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","suspended":false,"suspension_reason":"Call in to reapply after robot incident","current_path":"/enrollments/17cadca5ec21c9c4aede396f1e2104138b4897e43a1a974026bd0fb407556d2c65","origination_source_type":"Membership","origination_source_id":3,"contact":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"}},"required":["contact","contact_id","course_id","created_at","current_path","id","origination_source_id","origination_source_type","public_id","suspended","suspension_reason","updated_at"]},"CoursesEnrollmentParameters":{"type":"object","title":"Enrollments","description":"Enrollments","required":["contact_id"],"properties":{"contact_id":{"type":"integer","description":"Contact ID"},"suspended":{"type":["boolean","null"],"description":"Suspended"},"suspension_reason":{"type":["string","null"],"description":"Suspension Reason"}},"example":{"courses_enrollment":{"contact_id":3,"suspended":false,"suspension_reason":"Call in to reapply after robot incident"}}},"CoursesEnrollmentParametersUpdate":{"type":"object","title":"Enrollments","description":"Enrollments","required":[],"properties":{"suspended":{"type":["boolean","null"],"description":"Suspended"},"suspension_reason":{"type":["string","null"],"description":"Suspension Reason"}},"example":{"courses_enrollment":{"suspended":false,"suspension_reason":"Call in to reapply after robot incident"}}},"CoursesSectionAttributes":{"type":"object","title":"Modules","description":"Modules","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"course_id":{"type":"integer","description":"Course ID"},"title":{"type":"string","description":"Title"},"published_at":{"type":["string","null"],"format":"date-time","description":"Published at"},"description":{"type":["string","null"],"description":"Description"},"days_till_drip_access":{"type":["integer","null"],"description":"Days until drip access"},"blocker_section_id":{"type":["integer","null"],"description":"Blocker section"},"blocker_lesson_id":{"type":["integer","null"],"description":"Blocker lesson"},"current_path":{"type":["string","null"],"description":"Current Path"},"is_hidden_from_non_members":{"type":["boolean","null"],"description":"Current Path"},"upgrade_url":{"type":["string","null"],"description":"Upgrade URL"},"parent_id":{"type":["string","null"],"description":"Parent ID is pointing to the parent section. If it's `nil` then it's the root section."},"sort_order":{"type":["integer","null"],"description":"Builder display order within the parent module. Scoped per parent, so it is not globally unique across the sections list (the root section and each parent's first child both start at 0)."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"sSwcZK","course_id":3,"title":"Module 1","published_at":"2025-01-01T00:00:00.000Z","description":"Example Course Section","days_till_drip_access":5,"blocker_section_id":null,"blocker_lesson_id":null,"current_path":"/section-example","is_hidden_from_non_members":true,"upgrade_url":null,"parent_id":null,"sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["blocker_lesson_id","blocker_section_id","course_id","created_at","current_path","days_till_drip_access","description","id","is_hidden_from_non_members","parent_id","public_id","published_at","sort_order","title","updated_at","upgrade_url"]},"CoursesSectionParameters":{"type":"object","title":"Modules","description":"Modules","required":["title","blocker_lesson_id"],"properties":{"title":{"type":"string","description":"Title"},"description":{"type":["string","null"],"description":"Description"},"days_till_drip_access":{"type":["integer","null"],"description":"Days until drip access"},"blocker_section_id":{"type":["string","null"],"description":"Blocker section"},"blocker_lesson_id":{"type":"string","description":"Blocker lesson"},"is_hidden_from_non_members":{"type":["boolean","null"],"description":"Current Path"}},"example":{"courses_section":{"title":"Module 1","description":"Example Course Section","days_till_drip_access":5,"blocker_section_id":null,"blocker_lesson_id":null,"is_hidden_from_non_members":true}}},"CoursesSectionParametersUpdate":{"type":"object","title":"Modules","description":"Modules","required":[],"properties":{"title":{"type":"string","description":"Title"},"description":{"type":["string","null"],"description":"Description"},"days_till_drip_access":{"type":["integer","null"],"description":"Days until drip access"},"blocker_section_id":{"type":["integer","null"],"description":"Blocker section"},"blocker_lesson_id":{"type":["integer","null"],"description":"Blocker lesson"},"is_hidden_from_non_members":{"type":["boolean","null"],"description":"Current Path"}},"example":{"courses_section":{"title":"Module 1","description":"Example Course Section","days_till_drip_access":5,"blocker_section_id":123,"blocker_lesson_id":123,"is_hidden_from_non_members":true}}},"CoursesSectionsPublishActionAttributes":{"type":"object","title":"Course Section Publish Actions","description":"Asynchronous action that publishes one or more course sections and their lessons","properties":{"id":{"type":"integer","description":"Publish Action ID"},"public_id":{"type":["string","null"],"description":"Publish Action public ID"},"course_id":{"type":"integer","description":"ID of the course whose sections are being published"},"target_all":{"type":["boolean","null"],"description":"When `true`, every unpublished non-root section of the course is targeted for publishing. Mutually exclusive with `target_ids`."},"target_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"Explicit list of course-section IDs targeted for publishing, always emitted as integers. The create request also accepts public IDs, which are resolved on input. Mutually exclusive with `target_all`."},"auto_enroll":{"type":["boolean","null"],"description":"When `true`, existing course enrollees are automatically granted access to the newly published sections."},"send_email":{"type":["boolean","null"],"description":"When `true` (and `auto_enroll` is also `true`), enrolled contacts receive an email notification about the newly published sections."},"offer_new_section_via_all_access_products":{"type":["boolean","null"],"description":"When `true`, products that grant full course access are updated to also offer the newly published sections."},"target_count":{"type":["integer","null"],"description":"Total number of sections targeted by this action. `null` until the async job has resolved the count."},"performed_count":{"type":["integer","null"],"description":"Number of sections processed so far. Poll alongside `target_count` to track async progress."},"published_lessons_count":{"type":["integer","null"],"description":"Number of lesson publish timestamps this action changed. Immediate actions make those lessons live, including individually scheduled lessons they force-publish; a future one-step course launch assigns its requested future timestamp instead. Lessons already live are excluded. The one-step count is recorded synchronously per section, so it reflects that flow's work rather than `0`."},"status":{"type":"string","enum":["queued","scheduled","processing","completed"],"description":"Progress of the async receipt: `queued` (saved, not yet started), `scheduled` (deferred to a future `scheduled_for`), `processing` (running), or `completed`. Poll this to tell whether work is still ongoing without inferring it from the timestamps."},"scheduled_for":{"type":["string","null"],"format":"date-time","description":"When set, the action is deferred until this datetime. Must be a future datetime. `null` means execute immediately."},"started_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job began processing sections. `null` until started."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async job finished. `null` until complete."},"created_by_id":{"type":["integer","null"],"description":"ID of the workspace membership that created this action."},"approved_by_id":{"type":["integer","null"],"description":"ID of the membership that approved this action (reserved for future use)."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"aB3cD4","course_id":5,"target_all":false,"target_ids":[8,9],"auto_enroll":true,"send_email":true,"offer_new_section_via_all_access_products":false,"target_count":2,"performed_count":1,"published_lessons_count":4,"status":"processing","scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":null,"created_by_id":3,"approved_by_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:00.000Z"},"required":["approved_by_id","auto_enroll","completed_at","course_id","created_at","created_by_id","id","offer_new_section_via_all_access_products","performed_count","public_id","published_lessons_count","scheduled_for","send_email","started_at","status","target_all","target_count","target_ids","updated_at"]},"CoursesSectionsPublishActionParameters":{"type":"object","title":"Course Section Publish Actions","description":"Parameters for creating a course-section publish action. Select exactly one of a nonempty `target_ids` array or `target_all: true`.","properties":{"target_all":{"type":"boolean","description":"Set to `true` to publish every unpublished non-root section of the course. Mutually exclusive with `target_ids`. Exactly one of `target_all` or `target_ids` must be supplied."},"target_ids":{"type":"array","items":{"type":"string"},"description":"Array of course-section public IDs to publish. Mutually exclusive with `target_all`. Exactly one of `target_ids` or `target_all` must be supplied."},"auto_enroll":{"type":"boolean","description":"When `true`, existing course enrollees are granted access to the newly published sections automatically."},"send_email":{"type":"boolean","description":"When `true` (requires `auto_enroll: true`), enrolled contacts receive an email notification about the newly published sections."},"offer_new_section_via_all_access_products":{"type":"boolean","description":"When `true`, products that grant full course access are updated to also include the newly published sections."},"scheduled_for":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime. The publish is deferred until this time. Must be a future datetime. Omit to publish immediately."}},"example":{"target_ids":["sSwcZK"],"auto_enroll":true,"send_email":true},"oneOf":[{"title":"Publish specific sections","required":["target_ids"],"properties":{"target_ids":{"minItems":1}}},{"title":"Publish all sections","required":["target_all"],"properties":{"target_all":{"const":true}}}]},"CoursesLessonAttributes":{"type":"object","title":"Lessons","description":"Lessons","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"title":{"type":"string","description":"Title"},"body":{"type":["string","null"],"description":"Description"},"section_id":{"type":["integer","null"],"description":"Parent module"},"published_at":{"type":["string","null"],"format":"date-time","description":"Schedule for"},"current_path":{"type":["string","null"],"description":"Current Path"},"sort_order":{"type":["integer","null"],"description":"Builder display order of the lesson within its section (section_id). Scoped per section, starting at 0."},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":1,"public_id":"ucGpIe","title":"Lesson 1","body":"Example Lesson","section_id":2,"published_at":"2025-01-01T00:00:00.000Z","current_path":null,"sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["body","created_at","current_path","id","public_id","published_at","section_id","sort_order","title","updated_at"]},"CoursesLessonParameters":{"type":"object","title":"Lessons","description":"Lessons","required":["title"],"properties":{"title":{"type":"string","description":"Title"},"body":{"type":["string","null"],"description":"Description"},"lesson_content":{"type":["string","null"],"description":"Markdown lesson content. This is the primary content field for the lesson; on create it is converted into the lesson's page content."},"image_id":{"type":["string","null"],"description":"Public ID of an image in the workspace to use as the lesson image."}},"example":{"courses_lesson":{"title":"Lesson 1","body":"Example Lesson","lesson_content":"## Welcome\nThis is the lesson content."}}},"CoursesLessonParametersUpdate":{"type":"object","title":"Lessons","description":"Lessons","required":[],"properties":{"title":{"type":"string","description":"Title"},"body":{"type":["string","null"],"description":"Description"},"lesson_content":{"type":["string","null"],"description":"Markdown lesson content. This is the primary content field for the lesson body. It is Markdown, not PML. See [Lessons](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#lessons) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md)."},"image_id":{"type":["string","null"],"description":"Public ID of an image in the workspace to use as the lesson image."}},"example":{"courses_lesson":{"title":"Lesson 1","body":"Example Lesson","lesson_content":"## Welcome\nThis is the lesson content."}}},"CoursesLessonCompletionAttributes":{"type":"object","title":"Completed lessons","description":"Completed lessons","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"enrollment_id":{"type":"integer","description":"The ID of the `Courses::Enrollment` record that completed the lesson"},"lesson_id":{"type":"integer","description":"The ID of the `Courses::Lesson` record that was completed"},"completed_at":{"type":"string","format":"date-time","description":"The time when the record was completed; It is set automatically to the current time when the record is created"}},"example":{"id":1,"public_id":"MkFHBo","enrollment_id":2,"lesson_id":2,"completed_at":"2025-01-01T00:00:00.000Z"},"required":["completed_at","enrollment_id","id","lesson_id","public_id"]},"CoursesLessonCompletionParameters":{"type":"object","title":"Completed lessons","description":"Completed lessons","required":["enrollment_id","lesson_id"],"properties":{"enrollment_id":{"type":"integer","description":"The ID of the `Courses::Enrollment` record that completed the lesson"},"lesson_id":{"type":"integer","description":"The ID of the `Courses::Lesson` record that was completed"}},"example":{"courses_lesson_completion":{"enrollment_id":2,"lesson_id":2}}},"CoursesLessonCompletionParametersUpdate":{"type":"object","title":"Completed lessons","description":"Completed lessons","required":["enrollment_id","lesson_id"],"properties":{"enrollment_id":{"type":"integer","description":"The ID of the `Courses::Enrollment` record that completed the lesson"},"lesson_id":{"type":"integer","description":"The ID of the `Courses::Lesson` record that was completed"}},"example":{"courses_lesson_completion":{"enrollment_id":2,"lesson_id":2}}},"DiscountAttributes":{"type":"object","title":"Discount","description":"A reusable, workspace-scoped discount applied on top of a price.","properties":{"id":{"type":"integer","description":"Discount ID"},"public_id":{"type":["string","null"],"description":"Discount public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Internal name for the discount."},"code":{"type":"string","description":"The code a buyer redeems at checkout. Uppercased on save; unique within the workspace (cannot collide with a coupon code)."},"discount_type":{"type":"string","enum":["code","automatic","sale"],"description":"`code` (the default) is a redeemable coupon code. `automatic` and `sale` are deprecated."},"discount_method":{"type":"string","enum":["percentage","fixed","shipping","bogo"],"description":"How the discount is calculated. `percentage` uses `percent`; `fixed` uses `amount`. `shipping` and `bogo` exist but are outside the simple flow."},"amount":{"type":["string","null"],"description":"Fixed amount off, as a decimal string (e.g. \"10.00\"). `null` for a percentage discount."},"percent":{"type":["string","null"],"description":"Percentage off between 0.01 and 100 (e.g. \"20.0\"). `null` for a fixed discount."},"currency":{"type":"string","description":"ISO currency code, lowercased. Defaults to the workspace currency."},"applies_to":{"type":"string","enum":["all_products","specific_products","specific_variants","specific_collections"],"description":"Scope of the discount. `all_products` (the default) applies workspace-wide; the `specific_*` values restrict it to the ids passed in `product_ids` / `variant_ids` / `products_collection_ids`."},"apply_from":{"type":"string","format":"date-time","description":"When the discount becomes active. Defaults to the creation time."},"apply_until":{"type":["string","null"],"format":"date-time","description":"When the discount expires. `null` means it never expires."},"limit_1_per_customer":{"type":"boolean","description":"When true, each contact can redeem the discount only once."},"require_minimum_spend":{"type":"boolean","description":"When true, the order must meet `require_minimum_spend_amount` for the discount to apply."},"require_minimum_spend_amount":{"type":["integer","null"],"description":"Minimum order subtotal required, when `require_minimum_spend` is true. In whole currency units, not cents - `50` on a `usd` discount means $50."},"discounts_per_redemption":{"type":["integer","null"],"description":"Optional cap on how many line items a single redemption discounts."},"redemptions_count":{"type":"integer","description":"How many times the discount has been redeemed on a completed sale. This is not a deletability signal - a discount can report zero redemptions and still return 422 on DELETE because it is attached to an order."},"product_ids":{"type":"array","items":{"type":"integer"},"description":"The products the discount is scoped to (empty unless `applies_to` is `specific_products`)."},"variant_ids":{"type":"array","items":{"type":"integer"},"description":"The variants the discount is scoped to (empty unless `applies_to` is `specific_variants`)."},"products_collection_ids":{"type":"array","items":{"type":"integer"},"description":"The collections the discount is scoped to (empty unless `applies_to` is `specific_collections`)."},"active":{"type":"boolean","description":"Derived - true when the discount is neither scheduled for the future nor expired."},"expired":{"type":"boolean","description":"Derived - true when `apply_until` is in the past. An expired discount is frozen - every further update returns 422, so rename before you expire."},"scheduled":{"type":"boolean","description":"Derived - true when `apply_from` is in the future."},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":771,"public_id":"gBEDMo","workspace_id":42000,"name":"Launch 20","code":"LAUNCH20","discount_type":"code","discount_method":"percentage","amount":null,"percent":"20.0","currency":"usd","applies_to":"all_products","apply_from":"2025-01-01T00:00:00.000Z","apply_until":null,"limit_1_per_customer":false,"require_minimum_spend":false,"require_minimum_spend_amount":null,"discounts_per_redemption":null,"redemptions_count":0,"product_ids":[],"variant_ids":[],"products_collection_ids":[],"active":true,"expired":false,"scheduled":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["active","amount","applies_to","apply_from","apply_until","code","created_at","currency","discount_method","discount_type","discounts_per_redemption","expired","id","limit_1_per_customer","name","percent","product_ids","products_collection_ids","public_id","redemptions_count","require_minimum_spend","require_minimum_spend_amount","scheduled","updated_at","variant_ids","workspace_id"]},"DiscountParameters":{"type":"object","title":"Discount","description":"Fields accepted when creating a discount.","required":["name"],"properties":{"name":{"type":"string","description":"Internal name for the discount."},"code":{"type":"string","pattern":"^[a-zA-Z0-9-]+$","description":"Required for a `code`-type discount. Letters, numbers and hyphens only - spaces, underscores and punctuation return 422. Uppercased on save; must be unique within the workspace (it cannot collide with a coupon code either)."},"discount_type":{"type":"string","enum":["code","automatic","sale"],"description":"Defaults to `code`."},"discount_method":{"type":"string","enum":["percentage","fixed","shipping","bogo"],"description":"Defaults to `percentage`. `percentage` requires `percent`; `fixed` requires a positive `amount`."},"percent":{"type":"string","description":"Percentage off (0.01-100). Required when `discount_method` is `percentage`."},"amount":{"type":"string","description":"Fixed amount off as a decimal string. Required when `discount_method` is `fixed`."},"currency":{"type":"string","description":"ISO currency code. Defaults to the workspace currency."},"applies_to":{"type":"string","enum":["all_products","specific_products","specific_variants","specific_collections"],"description":"Defaults to `all_products`."},"apply_from":{"type":"string","format":"date-time","description":"When the discount becomes active. Defaults to now. Set in the future to schedule it."},"apply_until":{"type":"string","format":"date-time","description":"When the discount expires. Omit for no expiry. There is no `expired` create field - sending one returns 422 whatever its value, including `false`, because expiring on create can never succeed (it would set `apply_until` to now, and `apply_from` then defaults to a hair later). Create the discount first, then expire it with `PATCH { \"discount\": { \"expired\": true } }`."},"limit_1_per_customer":{"type":"boolean"},"require_minimum_spend":{"type":"boolean"},"require_minimum_spend_amount":{"type":"integer","description":"Minimum order subtotal, in whole currency units rather than cents - `50` on a `usd` discount means $50. Must be positive when `require_minimum_spend` is true."},"discounts_per_redemption":{"type":"integer"},"product_ids":{"type":"array","items":{"type":"integer"},"description":"Product ids to scope to, when `applies_to` is `specific_products`."},"variant_ids":{"type":"array","items":{"type":"integer"},"description":"Variant ids to scope to, when `applies_to` is `specific_variants`."},"products_collection_ids":{"type":"array","items":{"type":"integer"},"description":"Collection ids to scope to, when `applies_to` is `specific_collections`."}},"example":{"name":"Launch 20","code":"LAUNCH20","discount_type":"code","discount_method":"percentage","percent":"20.0","applies_to":"all_products"}},"DiscountParametersUpdate":{"type":"object","title":"Discount","description":"Fields accepted when updating a discount. Two lock-out rules apply, in this order: once the discount has been redeemed on an order its money-affecting fields (amount, percent, discount_method, applies_to, apply_from, the scoping arrays, limit_1_per_customer, discounts_per_redemption) are locked and return 422, while renaming and expiring still work; a discount that is already expired freezes its other fields and returns 422 (`Discount cannot be changed because it has expired`). Expiring is reversible - `expired: false` clears the end date and a future `apply_until` pushes it out, either of which makes the discount live again - so editing an expired discount means lifting the expiry first. Expiring a discount and renaming it in the same request is fine; it is a rename sent to a discount that is already expired that gets refused.","required":[],"properties":{"name":{"type":"string"},"code":{"type":"string","pattern":"^[a-zA-Z0-9-]+$","description":"Letters, numbers and hyphens only. Uppercased on save; must be unique within the workspace."},"discount_type":{"type":"string","enum":["code","automatic","sale"],"description":"`code` is a redeemable coupon code. `automatic` and `sale` are deprecated."},"discount_method":{"type":"string","enum":["percentage","fixed","shipping","bogo"]},"percent":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string","description":"ISO currency code. Locked once the discount has been applied to an order."},"applies_to":{"type":"string","enum":["all_products","specific_products","specific_variants","specific_collections"]},"apply_from":{"type":"string","format":"date-time"},"apply_until":{"type":["string","null"],"format":"date-time","description":"Schedule a future end date. Must be after `apply_from`; a past date returns 422. To expire a live discount now, use `expired: true` instead."},"expired":{"type":"boolean","description":"Virtual switch over `apply_until`, accepted on update only (sending it on create returns 422). `true` expires the discount immediately by setting `apply_until` to now; `false` lifts an expiry by clearing `apply_until`, the same as Remove Expiration in the app. It ends a discount that has not started yet (`scheduled: true`) as well, discarding the future `apply_from`, since nothing can end before it starts. A discount that has been redeemed cannot be un-expired and returns 422. Sending the state the discount is already in changes nothing and returns 200 without moving `apply_until`, so echoing a serialized discount back in a routine update cannot clear a scheduled end date - to remove a future end date, PATCH `apply_until` to null instead. Only `true` and `false` are accepted; any other value returns 422 rather than being read as \"expire it\"."},"limit_1_per_customer":{"type":"boolean"},"require_minimum_spend":{"type":"boolean"},"require_minimum_spend_amount":{"type":"integer","description":"Minimum order subtotal, in whole currency units rather than cents - `50` on a `usd` discount means $50."},"discounts_per_redemption":{"type":"integer"},"product_ids":{"type":"array","items":{"type":"integer"}},"variant_ids":{"type":"array","items":{"type":"integer"}},"products_collection_ids":{"type":"array","items":{"type":"integer"}}},"example":{"expired":true}},"DomainAttributes":{"type":"object","title":"Domains","description":"Domains","properties":{"id":{"type":"integer","description":"Domain ID"},"public_id":{"type":"string","description":"The public identifier of the domain"},"workspace_id":{"type":"integer","description":"The ID of the workspace that the domain belongs to"},"name":{"type":"string","description":"The domain name (e.g. example.com)"},"status":{"type":"string","enum":["initialized","connecting","ownership_verified","securing","secured","removing"],"description":"The current connection status of the domain"},"connected":{"type":"boolean","description":"Whether the domain is fully connected and active"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"}},"example":{"id":1,"public_id":"aBcDeF","workspace_id":42000,"name":"example.com","status":"secured","connected":true,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["connected","created_at","id","name","public_id","status","updated_at","workspace_id"]},"DownloadAttributes":{"type":"object","title":"Downloads","description":"Downloads","properties":{"id":{"type":"integer","description":"Download ID"},"public_id":{"type":["string","null"],"description":"Download public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"asset_id":{"type":["integer","null"],"description":"The Asset ID to pass in `product_variant.asset_ids` when granting this download through a product variant."},"name":{"type":["string","null"],"description":"Download name"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":73,"public_id":"VpQLxN","workspace_id":42000,"asset_id":904,"name":"Conversion Checklist.pdf","created_at":"2026-07-20T09:30:00.000Z","updated_at":"2026-07-21T14:45:00.000Z"},"required":["asset_id","created_at","id","name","public_id","updated_at","workspace_id"]},"EmailsAddressAttributes":{"type":"object","title":"Email Addresses","description":"Email Addresses","properties":{"id":{"type":"integer","description":"Address ID"},"public_id":{"type":["string","null"],"description":"Address public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"email_address":{"type":"string","description":"Email address"},"name":{"type":["string","null"],"description":"Display name associated with this email address"},"is_workspace_default":{"type":"boolean","description":"Whether this address is on the shared ClickFunnels sending domain (the workspace default). A workspace-default address is usable as a sender only as a fallback: once the workspace has a usable custom sender of its own, its workspace-default address reports `usable_as_sender: false`. So `is_workspace_default: true` together with `usable_as_sender: false` is expected whenever the workspace already has a usable custom sender."},"usable_as_sender":{"type":"boolean","description":"Whether this address is eligible to be used as the `from` sender of an email broadcast. A custom-domain address is usable once its sending domain is verified (DKIM/SPF/DMARC or a verified SMTP setting) and the workspace owns that domain. A workspace-default (shared-domain) address is usable only as a fallback - it is `true` when the workspace has no usable custom sender of its own and flips to `false` once one exists. Filter broadcast senders to addresses where this is true to avoid a broadcast failing validation at send time. See [Addresses (pick a usable sender)](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#addresses-pick-a-usable-sender) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md)."},"emails_domain":{"type":["object","null"],"description":"Sending-domain verification status for this address. `null` for shared-domain / workspace-default addresses, which send via shared infrastructure and have no per-workspace sending domain.","properties":{"name":{"type":"string","description":"The sending domain name."},"verified":{"type":"boolean","description":"Whether the sending domain has completed transport verification (DKIM/SPF/DMARC DNS records, or a verified SMTP setting). This alone does not mean the address can send; select senders on the address's top-level `usable_as_sender` field."},"dkim_verified":{"type":"boolean","description":"Whether the domain's DKIM DNS record is verified."},"spf_verified":{"type":"boolean","description":"Whether the domain's SPF DNS record is verified."},"dmarc_verified":{"type":"boolean","description":"Whether the domain's DMARC DNS record is verified."},"smtp_verified":{"type":"boolean","description":"Whether the domain is verified via a verified SMTP setting (an alternative to DNS verification). A domain is `verified` when its DKIM/SPF/DMARC are all verified OR `smtp_verified` is true — so when a domain is SMTP-verified, `verified` is true while dkim_verified/spf_verified/dmarc_verified are false."}}},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"AbCdEf","workspace_id":42000,"email_address":"marketing@example.com","name":"Marketing Team","is_workspace_default":false,"usable_as_sender":true,"emails_domain":{"name":"example.com","verified":true,"dkim_verified":true,"spf_verified":true,"dmarc_verified":true,"smtp_verified":false},"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","email_address","emails_domain","id","is_workspace_default","name","public_id","updated_at","usable_as_sender","workspace_id"]},"EmailsAddressParameters":{"type":"object","title":"Email Address","description":"A sender (from) email address.","required":[],"properties":{"username":{"type":"string","description":"The local part before the @ (e.g. \"hello\" for hello@yourdomain.com). Required when creating."},"domain":{"type":"string","description":"Selects among ClickFunnels' shared sending domains only; normally omit it to get the default (`clickfunnelsmail.com`). This is not how you use your own domain: putting a custom name here neither provisions nor authenticates it, and the request is rejected with `422` unless `emails_domain_id` is also given. To send from your own domain, provision it first and pass its numeric id as `emails_domain_id`, which is what the address is then created on."},"name":{"type":"string","description":"The from-name shown to recipients (e.g. \"Acme Support\"). Required when creating."},"label":{"type":"string","description":"Optional internal label."},"emails_domain_id":{"type":"integer","description":"Numeric `id` (not `public_id`) of a custom sending domain belonging to this workspace. Use the Email Domains endpoints to provision it and wait until that domain is ready to send before sending from the resulting address."}},"example":{"emails_address":{"username":"hello","name":"Acme Support"}}},"EmailsBroadcastAttributes":{"type":"object","title":"Email Broadcasts","description":"Email Broadcasts","properties":{"id":{"type":"integer","description":"Broadcast ID"},"public_id":{"type":["string","null"],"description":"Broadcast public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":["string","null"],"description":"Internal name for the broadcast"},"subject":{"type":["string","null"],"description":"Email subject line seen by recipients"},"preheadline":{"type":["string","null"],"description":"Preview text shown in email clients before opening (max 150 characters)"},"status":{"type":"string","enum":["draft","scheduled","sending","paused","unhealthy","complete","canceled"],"description":"Current broadcast status. New broadcasts start as draft."},"origination_channel_type":{"type":["string","null"],"description":"The type of origination channel that created this broadcast"},"origination_channel_id":{"type":["integer","null"],"description":"The ID of the origination channel"},"external_id":{"type":["string","null"],"description":"An optional external identifier for tracking purposes"},"filter_id":{"type":["integer","null"],"description":"The contact filter determining which contacts receive this broadcast. Numeric `Refine::StoredFilter` id (not the public id) — the broadcast's own unnamed copy of the filter, created automatically from the `filter_id` (or `recipients`) supplied on create/update. `null` until an audience is set. See [Applying filters to email broadcasts](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-email-broadcasts).\n"},"send_at":{"type":["string","null"],"description":"Scheduled send date"},"send_at_local_time":{"type":["string","null"],"description":"Scheduled send time in HH:MM:SS format, relative to the specified time zone"},"time_zone":{"type":["string","null"],"description":"Time zone for scheduled sending"},"send_immediately":{"type":"boolean","description":"Whether the broadcast sends immediately upon creation"},"sending_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when sending actually began"},"complete_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when sending completed"},"from_email":{"type":["string","null"],"description":"The sender email address"},"from_name":{"type":["string","null"],"description":"The sender display name associated with the from address"},"reply_to_email":{"type":["string","null"],"description":"The reply-to email address"},"template":{"type":["object","null"],"description":"A lean reference to the email template this broadcast uses (a broadcast points at a template; it does not copy it, unlike a workflow send-email step). Null when no template is attached. The template's rendered body is not inlined here — fetch it from the templates endpoint via this public_id: GET /api/v2/emails/templates/{public_id}?expand[]=html_body.","properties":{"id":{"type":"integer","description":"Template ID"},"public_id":{"type":"string","description":"Template public ID"},"name":{"type":["string","null"],"description":"Template name"}}},"topic_ids":{"type":"array","items":{"type":"integer"},"description":"IDs of topics associated with this broadcast"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"GhIjKl","workspace_id":42000,"name":"Weekly Newsletter","subject":"This Week's Updates","preheadline":"Check out what's new","status":"draft","origination_channel_type":null,"origination_channel_id":null,"external_id":null,"filter_id":null,"send_at":null,"send_at_local_time":null,"time_zone":"Pacific Time (US & Canada)","send_immediately":false,"sending_at":null,"complete_at":null,"from_email":"marketing@example.com","from_name":"Marketing Team","reply_to_email":null,"template":{"id":3001,"public_id":"TmPl01","name":"Weekly Newsletter Template"},"topic_ids":[1,2],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["complete_at","created_at","external_id","filter_id","from_email","from_name","id","name","origination_channel_id","origination_channel_type","preheadline","public_id","reply_to_email","send_at","send_at_local_time","send_immediately","sending_at","status","subject","template","time_zone","topic_ids","updated_at","workspace_id"]},"EmailsBroadcastParameters":{"type":"object","title":"Email Broadcasts","description":"Email Broadcasts","required":["name","from_email"],"properties":{"name":{"type":"string","description":"Internal name for the broadcast (required)"},"subject":{"type":"string","description":"Email subject line seen by recipients"},"preheadline":{"type":["string","null"],"description":"Preview text shown in email clients before opening. Maximum 150 characters."},"from_email":{"type":"string","description":"Sender email address. Required on create. Must be an email address that belongs to the workspace, and it must have `usable_as_sender: true` or the send is rejected with 422. Do not pick by the sending domain's `verified` flag: that covers email transport only. See GET /workspaces/{workspace_id}/emails/addresses, where a shared workspace-default address is usable only while the workspace has no ready custom sender."},"reply_to_email":{"type":["string","null"],"description":"Reply-to email address. Must be an address in the workspace if provided. Pick one whose `usable_as_sender` is `true`."},"html_body":{"type":["string","null"],"description":"HTML email body. If provided without a template_id, a template is automatically created from this content."},"text_body":{"type":["string","null"],"description":"Plain text email body"},"template_id":{"type":["integer","null"],"description":"Numeric id of an existing email template in this workspace to use. Alternative to providing html_body/text_body directly; takes precedence when both are given. The broadcast references this template (it is not copied)."},"filter_id":{"type":["string","integer","null"],"description":"Contact filter for the broadcast audience. Accepts any of three forms: the numeric `id` or the public id (string) of a saved contact filter (`Refine::StoredFilter`) in this workspace, or a serialized contact filter. The supplied filter is copied onto the broadcast — the broadcast points at its own copy, so later edits to (or deletion of) the saved filter never change this broadcast's audience. Saved contact filters can be created/listed via the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md). If `recipients` are provided instead, a filter is created automatically from them and takes precedence over `filter_id`. See [Applying filters to email broadcasts](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-email-broadcasts).\n"},"send_immediately":{"type":"boolean","description":"Set to true to send the broadcast immediately upon creation. If false, use send_at, send_at_local_time, and time_zone to schedule."},"send_at":{"type":["string","null"],"description":"Scheduled send date. Required when send_immediately is false."},"send_at_local_time":{"type":["string","null"],"description":"Scheduled send time in HH:MM:SS format. Defaults to 18:00:00."},"time_zone":{"type":["string","null"],"description":"Time zone for scheduling (defaults to workspace time zone)"},"external_id":{"type":["string","null"],"description":"An optional external identifier for your own tracking"},"topic_ids":{"type":"array","items":{"type":"integer"},"description":"Topic IDs to associate. Only topics belonging to the workspace are accepted."},"recipients":{"type":"array","items":{"type":"object","required":["email"],"properties":{"email":{"type":"string","description":"Recipient email address (required)"},"first_name":{"type":["string","null"],"description":"Recipient first name"},"last_name":{"type":["string","null"],"description":"Recipient last name"}}},"description":"List of recipients (maximum 1,000). Contacts are created or matched by email address."}},"example":{"emails_broadcast":{"name":"Weekly Newsletter","subject":"This Week's Updates","preheadline":"Check out what's new","from_email":"marketing@example.com","reply_to_email":"replies@example.com","html_body":"

Hello World

","text_body":"Hello World","send_immediately":false,"send_at":"2025-06-01","send_at_local_time":"18:00:00","time_zone":"Pacific Time (US & Canada)","topic_ids":[1,2],"recipients":[{"email":"user@example.com","first_name":"Jane","last_name":"Doe"}]}}},"EmailsBroadcastParametersUpdate":{"type":"object","title":"Email Broadcasts","description":"Email Broadcasts. Only draft broadcasts can be updated.","required":[],"properties":{"name":{"type":"string","description":"Internal name for the broadcast"},"subject":{"type":"string","description":"Email subject line seen by recipients"},"preheadline":{"type":["string","null"],"description":"Preview text shown in email clients before opening. Maximum 150 characters."},"from_email":{"type":"string","description":"Sender email address. Must be a verified email address that belongs to the workspace."},"reply_to_email":{"type":["string","null"],"description":"Reply-to email address. Must be a verified address in the workspace if provided."},"html_body":{"type":["string","null"],"description":"HTML email body"},"text_body":{"type":["string","null"],"description":"Plain text email body"},"template_id":{"type":["integer","null"],"description":"Numeric id of an existing email template in this workspace to point this draft broadcast at (swaps the referenced template). Takes precedence over an inline html_body/text_body. Only draft broadcasts can be updated; an unknown id returns 422."},"filter_id":{"type":["string","integer","null"],"description":"Contact filter for the broadcast audience. Accepts any of three forms: the numeric `id` or the public id (string) of a saved contact filter (`Refine::StoredFilter`) in this workspace, or a serialized contact filter. The supplied filter is copied onto the broadcast — the broadcast points at its own copy, so later edits to (or deletion of) the saved filter never change this broadcast's audience. Saved contact filters can be created/listed via the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md). See [Applying filters to email broadcasts](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-email-broadcasts).\n"},"send_at":{"type":["string","null"],"description":"Scheduled send date"},"send_at_local_time":{"type":["string","null"],"description":"Scheduled send time in HH:MM:SS format"},"time_zone":{"type":["string","null"],"description":"Time zone for scheduling"},"external_id":{"type":["string","null"],"description":"An optional external identifier for your own tracking"},"topic_ids":{"type":"array","items":{"type":"integer"},"description":"Topic IDs to associate"}},"example":{"emails_broadcast":{"name":"Updated Newsletter","subject":"Updated Subject"}}},"EmailsBroadcastsSendActionAttributes":{"type":"object","title":"Email Broadcast Send Actions","description":"An asynchronous action that sends (or schedules) the delivery of a parent email broadcast. The action runs in the background; poll `performed_count` vs `target_count` to track progress.","properties":{"id":{"type":"integer","description":"Send Action ID"},"public_id":{"type":["string","null"],"description":"Send Action public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"send_type":{"type":"string","enum":["default","split_test_main","split_test_variant","split_test_winner","send_in_contacts_time_zone","schedule_send_in_contacts_time_zone"],"description":"The delivery strategy used for this send action."},"target_ids":{"type":["array","null"],"items":{"type":"integer"},"description":"Array of broadcast IDs targeted by this send action. For a standard broadcast send, this contains the single broadcast ID being delivered."},"target_count":{"type":["integer","null"],"description":"Total number of contacts targeted by this send action. `null` until the async job has resolved the audience count."},"performed_count":{"type":["integer","null"],"description":"Number of contacts processed so far. Poll alongside `target_count` to track async delivery progress."},"scheduled_for":{"type":["string","null"],"format":"date-time","description":"Datetime the send is scheduled to begin. Reflects the `send_at` passed at creation, adjusted to the workspace time zone. `null` for immediate sends."},"started_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async delivery job began processing contacts. `null` until the job has started."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Datetime the async delivery job finished. `null` until delivery is complete."},"created_by_id":{"type":["integer","null"],"description":"Reserved; `null` in most cases. The member who triggered the send is recorded in `approved_by_id` instead."},"approved_by_id":{"type":["integer","null"],"description":"ID of the workspace membership that created/approved this send action — the member that triggered the send. Populated for API-created sends."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"},"broadcast_id":{"type":["integer","null"],"description":"The ID of the email broadcast being delivered. Convenience field derived from `target_ids[0]`."}},"example":{"id":1,"public_id":"aB3cD4","workspace_id":42000,"send_type":"default","target_ids":[7],"target_count":1500,"performed_count":750,"scheduled_for":null,"started_at":"2025-06-01T18:00:05.000Z","completed_at":null,"created_by_id":null,"approved_by_id":3,"created_at":"2025-06-01T17:59:00.000Z","updated_at":"2025-06-01T18:00:05.000Z","broadcast_id":7},"required":["approved_by_id","broadcast_id","completed_at","created_at","created_by_id","id","performed_count","public_id","scheduled_for","send_type","started_at","target_count","target_ids","updated_at","workspace_id"]},"EmailsBroadcastsSendActionParameters":{"type":"object","title":"Email Broadcast Send Actions","description":"Parameters for creating a send action. The request body is optional — a bodyless POST sends the broadcast immediately.","properties":{"emails_broadcasts_send_action":{"type":"object","properties":{"send_at":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime. When provided, the broadcast is scheduled for that day at the given hour in the workspace's time zone. Omit (or send an empty body) to dispatch immediately."}}}},"example":{"emails_broadcasts_send_action":{"send_at":"2025-09-15T18:00:00.000Z"}}},"DnsRecord":{"type":"object","title":"DNS Record","description":"A single DNS record to add at the domain's DNS provider to configure email transport (or, for the return path, bounce handling).","properties":{"type":{"type":"string","description":"The DNS record type (e.g. `TXT`, `CNAME`)."},"name":{"type":"string","description":"The DNS host/name to create the record on (e.g. `example.com` or `_dmarc.example.com`)."},"value":{"type":"string","description":"The exact value to paste at the registrar for this record."},"ttl":{"type":"integer","description":"Recommended TTL, in seconds, for the record."},"verified":{"type":"boolean","description":"Whether this specific record has been confirmed live at the DNS provider. It reflects stored DNS verification state; call `verifyEmailsDomains` to re-check."}},"example":{"type":"TXT","name":"_dmarc.example.com","value":"v=DMARC1; p=none;","ttl":300,"verified":false},"required":["name","ttl","type","value","verified"]},"EmailsDomainAttributes":{"type":"object","title":"Email Domains","description":"Email Domains","properties":{"id":{"type":"integer","description":"Email Domain ID"},"public_id":{"type":["string","null"],"description":"Email Domain public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"The sending domain name (lowercase), e.g. `example.com` - the part after the `@` shared by every email address created on this domain."},"ownership_verified":{"type":"boolean","description":"Whether ClickFunnels has confirmed that this workspace owns the domain name. It becomes true when the same name is connected to this workspace as a website/hosting domain whose ownership is verified - done in the ClickFunnels app, not through this API. No API call can make it true; ask the customer to connect the domain."},"verified":{"type":"boolean","description":"Whether email transport is verified. True once DKIM, SPF, and DMARC are all verified via DNS, or when a verified SMTP setting exists. This field does not prove domain ownership and is not sufficient by itself to send."},"ready_for_sending":{"type":"boolean","description":"Whether addresses on this custom domain can be used as senders. True only when both `ownership_verified` and the transport-only `verified` field are true. The return-path record is independent and does not control this value."},"dkim_verified":{"type":"boolean","description":"Whether the domain's DKIM DNS record is verified."},"spf_verified":{"type":"boolean","description":"Whether the domain's SPF DNS record is verified."},"dmarc_verified":{"type":"boolean","description":"Whether the domain's DMARC DNS record is verified."},"smtp_verified":{"type":"boolean","description":"Whether email transport is verified via a verified SMTP setting (an alternative to DKIM/SPF/DMARC verification). When true, `verified` can be true while dkim_verified/spf_verified/dmarc_verified are false; ownership must still be verified before `ready_for_sending` becomes true."},"return_address_verified":{"type":"boolean","description":"Whether the domain's return-path CNAME record (used for bounce handling) is verified. This is independent of `verified` and `ready_for_sending` and is not required for either one to become true."},"dkim_record":{"description":"The DKIM TXT record to add at the registrar. `null` until the DKIM key has been generated, which happens automatically shortly after the domain is created; POST the same name again to retry provisioning if it stays `null`.","anyOf":[{"$ref":"#/components/schemas/DnsRecord"},{"type":"null"}]},"spf_record":{"description":"The SPF TXT record to add at the registrar.","anyOf":[{"$ref":"#/components/schemas/DnsRecord"},{"type":"null"}]},"dmarc_record":{"description":"The DMARC TXT record to add at the registrar.","anyOf":[{"$ref":"#/components/schemas/DnsRecord"},{"type":"null"}]},"return_address_record":{"description":"The return-path CNAME record to add at the registrar (used for bounce handling).","anyOf":[{"$ref":"#/components/schemas/DnsRecord"},{"type":"null"}]},"next_steps":{"type":"array","items":{"type":"string"},"description":"Plain-English guidance you can surface to users. It distinguishes the required ownership step (connect the domain to the workspace in ClickFunnels) and the required transport records from the recommended ClickFunnels return path, accounts for verified SMTP, and explains how to re-check readiness."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"QrStUv","workspace_id":42000,"name":"example.com","ownership_verified":false,"verified":false,"ready_for_sending":false,"dkim_verified":false,"spf_verified":false,"dmarc_verified":false,"smtp_verified":false,"return_address_verified":false,"dkim_record":{"type":"TXT","name":"second._domainkey.example.com","value":"v=DKIM1; k=rsa; p=...","ttl":300,"verified":false},"spf_record":{"type":"TXT","name":"example.com","value":"v=spf1 include:mailer.myclickfunnels.com -all","ttl":300,"verified":false},"dmarc_record":{"type":"TXT","name":"_dmarc.example.com","value":"v=DMARC1; p=none;","ttl":300,"verified":false},"return_address_record":{"type":"CNAME","name":"cf2mail.example.com","value":"mailer.myclickfunnels.com","ttl":300,"verified":false},"next_steps":["Connect example.com to this workspace in ClickFunnels so ownership is confirmed. Addresses on this domain cannot send until it is, even once every record below verifies.","Add dkim_record, spf_record, and dmarc_record at the DNS provider for example.com to authenticate email transport.","Recommended for ClickFunnels bounce handling: add return_address_record at the DNS provider.","DNS changes can take up to 48 hours to propagate. Re-check with POST /api/v2/emails/domains/QrStUv/verify; results are cached for about 10 minutes.","Manual setup help: https://support.myclickfunnels.com/docs/email-settings-how-to-verify-email-dns-records"],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","dkim_record","dkim_verified","dmarc_record","dmarc_verified","id","name","next_steps","ownership_verified","public_id","ready_for_sending","return_address_record","return_address_verified","smtp_verified","spf_record","spf_verified","updated_at","verified","workspace_id"]},"EmailsDomainParameters":{"type":"object","title":"Email Domains","description":"A sending domain to provision for a workspace.","required":["name"],"properties":{"name":{"type":"string","description":"A valid public bare root domain name to provision as a sending domain (e.g. `example.com`), with no URL scheme, port, path, or whitespace. Ownership is confirmed at the root domain, so a subdomain such as `mail.example.com` is rejected with `422` naming the root domain to use instead. The name is trimmed and lowercased before it is matched or created. If a sending domain with this name already exists for the workspace, it is returned as-is rather than creating a duplicate."}},"example":{"name":"example.com"}},"EmailsSettingsParameters":{"type":"object","title":"Email Settings","description":"Email/marketing settings for a workspace","required":[],"properties":{"name":{"type":"string","description":"Business/sender name shown on email broadcasts"},"address_single_line":{"type":"boolean","description":"Render the marketing address on a single line"},"hide_branding":{"type":"boolean","description":"Hide ClickFunnels branding in the email footer"},"unsubscribe_footer":{"type":"string","description":"Custom unsubscribe footer text"},"footer_alignment":{"type":"string","description":"Alignment of the email footer"},"system_emails_from_address_id":{"type":["integer","null"],"description":"An Emails::Address id used as the from address for system emails"},"system_emails_reply_to_address_id":{"type":["integer","null"],"description":"An Emails::Address id used as the reply-to address for system emails"},"marketing_emails_from_address_id":{"type":["integer","null"],"description":"An Emails::Address id used as the from address for marketing emails"},"marketing_emails_reply_to_address_id":{"type":["integer","null"],"description":"An Emails::Address id used as the reply-to address for marketing emails"},"address":{"type":"object","description":"The marketing (business) address. This workspace-wide prerequisite must be complete before creating a broadcast or workflow send-email step, and before sending a broadcast.","properties":{"address_one":{"type":"string","description":"Street address line one"},"address_two":{"type":["string","null"],"description":"Street address line two"},"city":{"type":"string","description":"City"},"postal_code":{"type":"string","description":"Postal/ZIP code"},"country_code":{"type":"string","description":"ISO 3166-1 alpha-2 country code, e.g. \"US\""},"region":{"type":"string","description":"State/region by its code (e.g. \"CA\") or name"}}}},"example":{"marketing_setting":{"name":"Acme Inc.","address":{"address_one":"123 Main St","city":"San Francisco","postal_code":"94105","country_code":"US","region":"CA"}}}},"EmailsSettingsAttributes":{"type":"object","title":"Email Settings","description":"Email Settings","properties":{"workspace_id":{"type":"integer","description":"Workspace ID"},"system_emails_from_address":{"type":["object","null"],"properties":{"email_address":{"type":"string","description":"Email address"},"name":{"type":["string","null"],"description":"Display name"}},"description":"From address for system emails"},"system_emails_reply_to_address":{"type":["object","null"],"properties":{"email_address":{"type":"string","description":"Email address"},"name":{"type":["string","null"],"description":"Display name"}},"description":"Reply-to address for system emails"},"marketing_emails_from_address":{"type":["object","null"],"properties":{"email_address":{"type":"string","description":"Email address"},"name":{"type":["string","null"],"description":"Display name"}},"description":"From address for marketing emails"},"marketing_emails_reply_to_address":{"type":["object","null"],"properties":{"email_address":{"type":"string","description":"Email address"},"name":{"type":["string","null"],"description":"Display name"}},"description":"Reply-to address for marketing emails"},"address":{"type":["object","null"],"properties":{"address_one":{"type":"string","description":"Street address line one"},"address_two":{"type":["string","null"],"description":"Street address line two"},"city":{"type":"string","description":"City"},"postal_code":{"type":"string","description":"Postal/ZIP code"},"region_name":{"type":["string","null"],"description":"State/region name"},"region":{"type":["string","null"],"description":"State/region code (e.g. \"CA\")"},"country":{"type":["string","null"],"description":"ISO 3166-1 alpha-2 country code (e.g. \"US\")"}},"description":"The marketing (business) address used on email broadcasts"},"address_complete":{"type":"boolean","description":"True once the marketing address satisfies the email broadcast gate. See the [Business mailing address prerequisite](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#business-mailing-address-prerequisite) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md)."}},"example":{"workspace_id":42000,"system_emails_from_address":{"email_address":"system@example.com","name":"System Notifications"},"system_emails_reply_to_address":{"email_address":"support@example.com","name":"Support"},"marketing_emails_from_address":{"email_address":"marketing@example.com","name":"Marketing Team"},"marketing_emails_reply_to_address":null,"address":{"address_one":"123 Main St","address_two":null,"city":"San Francisco","postal_code":"94105","region_name":"California","region":"CA","country":"US"},"address_complete":true},"required":["address","address_complete","marketing_emails_from_address","marketing_emails_reply_to_address","system_emails_from_address","system_emails_reply_to_address","workspace_id"]},"EmailsTemplateAttributes":{"type":"object","title":"Email Templates","description":"Email Templates","properties":{"id":{"type":"integer","description":"Template ID"},"public_id":{"type":["string","null"],"description":"Template public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":["string","null"],"description":"Template name"},"template_type":{"type":"string","description":"Template type"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"},"subject":{"type":["string","null"],"description":"Default email subject line for the template"},"html_body":{"type":["string","null"],"description":"**Expandable** The template's rendered HTML body. Only returned when expand[]=html_body is provided. get_html is a per-template cloud-storage read, so this is omitted from list and show by default; expanding it on a list fans out to one read per row — use sparingly. See [Templates](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#templates) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md)."},"text_body":{"type":["string","null"],"description":"**Expandable** The template's plain text body. Only returned when expand[]=text_body is provided."},"created_via_api":{"type":"boolean","description":"Whether this template was authored via the public API. API-created templates are hidden from the visual template pickers and cannot be edited in the visual (BeeFree) editor."},"from_address":{"type":["object","null"],"description":"The template's sender address, or null when unset.","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"email_address":{"type":["string","null"]},"name":{"type":["string","null"]}}}},"example":{"id":1,"public_id":"MnOpQr","workspace_id":42000,"name":"Welcome Email","template_type":"email","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","subject":"Welcome aboard!","html_body":"

Hello

","text_body":"Hello","created_via_api":true,"from_address":{"id":4001,"public_id":"FrAd01","email_address":"marketing@example.com","name":"Marketing Team"}},"required":["created_at","created_via_api","from_address","id","name","public_id","subject","template_type","updated_at","workspace_id"]},"EmailsTemplateParameters":{"type":"object","title":"Email Templates","description":"Parameters for creating an email template. Provide the body as html_body/text_body (mapped to the template content). Templates created via the API are marked api-created and are hidden from the visual template pickers.","required":["name"],"properties":{"name":{"type":"string","description":"Internal name for the template (required)"},"subject":{"type":["string","null"],"description":"Default email subject line. May be blank."},"html_body":{"type":["string","null"],"description":"HTML email body"},"text_body":{"type":["string","null"],"description":"Plain text email body"},"from_address_id":{"type":["integer","null"],"description":"ID of a sending address that belongs to this workspace. Pick one whose top-level `usable_as_sender` is true rather than one whose sending domain is merely `verified` (see GET /workspaces/{workspace_id}/emails/addresses). A foreign address is rejected with 422."}},"example":{"emails_template":{"name":"Welcome Email","subject":"Welcome aboard!","html_body":"

Hello

","text_body":"Hello","from_address_id":4001}}},"EmailsTemplateParametersUpdate":{"type":"object","title":"Email Templates","description":"Parameters for updating an email template. Only the provided fields are changed. Invalid Liquid in html_body is rejected with 422.","required":[],"properties":{"name":{"type":"string","description":"Internal name for the template"},"subject":{"type":["string","null"],"description":"Default email subject line"},"html_body":{"type":["string","null"],"description":"HTML email body"},"text_body":{"type":["string","null"],"description":"Plain text email body"},"from_address_id":{"type":["integer","null"],"description":"ID of a sending address that belongs to this workspace. A foreign address is rejected with 422."}},"example":{"emails_template":{"html_body":"

Updated

"}}},"EmailsTopicAttributes":{"type":"object","title":"Email Topics","description":"Email Topics","properties":{"id":{"type":"integer","description":"Topic ID"},"public_id":{"type":["string","null"],"description":"Topic public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Topic name"},"description":{"type":["string","null"],"description":"Topic description"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at datetime"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at datetime"}},"example":{"id":1,"public_id":"StUvWx","workspace_id":42000,"name":"Product Updates","description":"Updates about our products","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","description","id","name","public_id","updated_at","workspace_id"]},"EmailsTopicParameters":{"type":"object","title":"Email Topics","description":"Email Topics","required":["name"],"properties":{"name":{"type":"string","description":"Topic name"},"description":{"type":["string","null"],"description":"Topic description"}},"example":{"emails_topic":{"name":"Product Updates","description":"Updates about our products"}}},"EmailsTopicParametersUpdate":{"type":"object","title":"Email Topics","description":"Email Topics","required":[],"properties":{"name":{"type":"string","description":"Topic name"},"description":{"type":["string","null"],"description":"Topic description"}},"example":{"emails_topic":{"name":"Renamed Topic","description":"Updated description"}}},"FormAttributes":{"type":"object","title":"Forms","description":"Forms","properties":{"id":{"type":"integer","description":"Form ID"},"public_id":{"type":["string","null"],"description":"Form public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Name"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":9,"public_id":"cozYwE","workspace_id":42000,"name":"Example Form","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","id","name","public_id","updated_at","workspace_id"]},"FormParameters":{"type":"object","title":"Forms","description":"Forms","required":["name"],"properties":{"name":{"type":"string","description":"Name"}},"example":{"form":{"name":"Example Form"}}},"FormParametersUpdate":{"type":"object","title":"Forms","description":"Forms","required":[],"properties":{"name":{"type":"string","description":"Name"}},"example":{"form":{"name":"Example Form"}}},"FormsFieldSetAttributes":{"type":"object","title":"Field sets","description":"Field sets","properties":{"id":{"type":"integer","description":"Field set ID"},"public_id":{"type":["string","null"],"description":"Field set public ID"},"form_id":{"type":"integer","description":"Form ID"},"title":{"type":"string","description":"Title"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":9,"public_id":"wzITqe","form_id":10,"title":"Example Field Set","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","form_id","id","public_id","title","updated_at"]},"FormsFieldSetParameters":{"type":"object","title":"Field sets","description":"Field sets","required":["title"],"properties":{"title":{"type":"string","description":"Title"}},"example":{"forms_field_set":{"title":"Example Field Set"}}},"FormsFieldSetParametersUpdate":{"type":"object","title":"Field sets","description":"Field sets","required":[],"properties":{"title":{"type":"string","description":"Title"}},"example":{"forms_field_set":{"title":"Example Field Set"}}},"FormsFieldAttributes":{"type":"object","title":"Fields","description":"Fields","properties":{"id":{"type":"integer","description":"Field ID"},"public_id":{"type":["string","null"],"description":"Field public ID"},"field_set_id":{"type":"integer","description":"Field set ID"},"label":{"type":"string","description":"Label"},"field_type":{"type":["string","null"],"description":"Field Type"},"allow_multiple":{"type":["boolean","null"],"description":"Allow Multiple"},"key":{"type":"string","description":"Key"},"hidden":{"type":["boolean","null"],"description":"Hidden"},"sort_order":{"type":["integer","null"],"description":"Sort order"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":9,"public_id":"eQlJiT","field_set_id":10,"label":"MyString","field_type":"MyString","allow_multiple":false,"key":"CustomKey","hidden":false,"sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["allow_multiple","created_at","field_set_id","field_type","hidden","id","key","label","public_id","sort_order","updated_at"]},"FormsFieldParameters":{"type":"object","title":"Fields","description":"Fields","required":["label","key"],"properties":{"label":{"type":"string","description":"Label"},"field_type":{"type":["string","null"],"description":"Field Type"},"allow_multiple":{"type":["boolean","null"],"description":"Allow Multiple"},"key":{"type":"string","description":"Key"},"hidden":{"type":["boolean","null"],"description":"Hidden"}},"example":{"forms_field":{"label":"MyString","field_type":"MyString","allow_multiple":false,"key":"CustomKey","hidden":false}}},"FormsFieldParametersUpdate":{"type":"object","title":"Fields","description":"Fields","required":[],"properties":{"label":{"type":"string","description":"Label"},"field_type":{"type":["string","null"],"description":"Field Type"},"allow_multiple":{"type":["boolean","null"],"description":"Allow Multiple"},"key":{"type":"string","description":"Key"},"hidden":{"type":["boolean","null"],"description":"Hidden"}},"example":{"forms_field":{"label":"Example Field","field_type":"MyString","allow_multiple":false,"key":"CustomKey","hidden":false}}},"FormsFieldsOptionAttributes":{"type":"object","title":"Options","description":"Options","properties":{"id":{"type":"integer","description":"Option ID"},"public_id":{"type":["string","null"],"description":"Option public ID"},"field_id":{"type":"integer","description":"Field ID"},"label":{"type":"string","description":"Label"},"sort_order":{"type":["integer","null"],"description":"Sort order"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":27,"public_id":"gHOzhu","field_id":10,"label":"Test Label","sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","field_id","id","label","public_id","sort_order","updated_at"]},"FormsFieldsOptionParameters":{"type":"object","title":"Options","description":"Options","required":["label"],"properties":{"label":{"type":"string","description":"Label"}},"example":{"forms_fields_option":{"label":"Test Label"}}},"FormsFieldsOptionParametersUpdate":{"type":"object","title":"Options","description":"Options","required":[],"properties":{"label":{"type":"string","description":"Label"}},"example":{"forms_fields_option":{"label":"Example Option"}}},"FormsSubmissionAttributes":{"type":"object","title":"Submissions","description":"Submissions","properties":{"id":{"type":"integer","description":"Submission ID"},"public_id":{"type":["string","null"],"description":"Submission public ID"},"form_id":{"type":"integer","description":"Form ID"},"contact_id":{"type":["integer","null"],"description":"Contact"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":6,"public_id":"tWxHeY","form_id":15,"contact_id":5,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["contact_id","created_at","form_id","id","public_id","updated_at"]},"FormsSubmissionParameters":{"type":"object","title":"Submissions","description":"Submissions","required":[],"properties":{"contact_id":{"type":["integer","null"],"description":"Contact"}},"example":{"forms_submission":{"contact_id":5}}},"FormsSubmissionParametersUpdate":{"type":"object","title":"Submissions","description":"Submissions","required":[],"properties":{"contact_id":{"type":["integer","null"],"description":"Contact"}},"example":{"forms_submission":{"contact_id":5}}},"FormsSubmissionsAnswerAttributes":{"type":"object","title":"Answers","description":"Answers","properties":{"id":{"type":"integer","description":"Answer ID"},"public_id":{"type":["string","null"],"description":"Answer public ID"},"submission_id":{"type":"integer","description":"Submission ID"},"field_id":{"type":"integer","description":"Field"},"fields_option_id":{"type":["integer","null"],"description":"ID of a record from the Forms::Fields::Option API."},"entry":{"type":["string","null"],"description":"Entry"},"fields_option_ids":{"type":["array","null"],"description":"Fields Options"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":9,"public_id":"PKjxCi","submission_id":8,"field_id":20,"fields_option_id":56,"entry":"MyText","fields_option_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","entry","field_id","fields_option_id","fields_option_ids","id","public_id","submission_id","updated_at"]},"FormsSubmissionsAnswerParameters":{"type":"object","title":"Answers","description":"Answers","required":["field_id"],"properties":{"field_id":{"type":"integer","description":"Field"},"fields_option_id":{"type":["integer","null"],"description":"ID of a record from the Forms::Fields::Option API."},"entry":{"type":["string","null"],"description":"Entry"},"fields_option_ids":{"type":["array","null"],"description":"Fields Options"}},"example":{"forms_submissions_answer":{"field_id":20,"fields_option_id":56,"entry":"MyText","fields_option_ids":[]}}},"FormsSubmissionsAnswerParametersUpdate":{"type":"object","title":"Answers","description":"Answers","required":[],"properties":{"field_id":{"type":"string","description":"Field"},"fields_option_id":{"type":["integer","null"],"description":"ID of a record from the Forms::Fields::Option API."},"entry":{"type":["string","null"],"description":"Entry"},"fields_option_ids":{"type":["array","null"],"description":"Fields Options"}},"example":{"forms_submissions_answer":{"field_id":123,"fields_option_id":56,"entry":"MyText","fields_option_ids":[]}}},"FormSubmissionAttributes":{"type":"object","title":"Form submissions","description":"Form submissions","properties":{"id":{"type":"integer","description":"The unique identifier for the form submission"},"public_id":{"type":["string","null"],"description":"The unique public identifier for the form submission"},"contact_id":{"type":["integer","null"],"description":"The unique identifier of the contact who submitted the form"},"workspace_id":{"type":"integer","description":"The unique identifier of the workspace that the form was part of"},"page_id":{"type":["integer","null"],"description":"The unique identifier of the page that the form was on"},"created_at":{"type":["string","null"],"description":"The date and time the form was submitted"},"updated_at":{"type":["string","null"],"description":"The date and time the form submission was last updated"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"The dynamic form field data submitted by the user. The HTML form input field names build the keys of this object, and the user's HTML inputs are the values."}},"example":{"id":1,"public_id":"LkmpVe","contact_id":7,"workspace_id":42000,"page_id":1,"created_at":null,"updated_at":null,"data":{"url":"/contact","first_name":"John","last_name":"Doe","email":"john@example.com"}},"required":["contact_id","created_at","data","id","page_id","public_id","updated_at","workspace_id"]},"FormSubmissionParameters":{"type":"object","title":"Form submissions","description":"Form submissions","required":[],"properties":{"contact_id":{"type":["integer","null"],"description":"The unique identifier of the contact who submitted the form"},"page_id":{"type":["integer","null"],"description":"The unique identifier of the page that the form was on"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"The dynamic form field data submitted by the user. The HTML form input field names build the keys of this object, and the user's HTML inputs are the values."}},"example":{"form_submission":{"contact_id":7,"page_id":1,"data":{"url":"/contact","first_name":"John","last_name":"Doe","email":"john@example.com"}}}},"FormSubmissionParametersUpdate":{"type":"object","title":"Form submissions","description":"Form submissions","required":[],"properties":{"contact_id":{"type":["integer","null"],"description":"The unique identifier of the contact who submitted the form"},"page_id":{"type":["integer","null"],"description":"The unique identifier of the page that the form was on"},"data":{"type":"object","additionalProperties":{"type":"string"},"description":"The dynamic form field data submitted by the user. The HTML form input field names build the keys of this object, and the user's HTML inputs are the values."}},"example":{"form_submission":{"contact_id":7,"page_id":1,"data":{"url":"/contact","first_name":"John","last_name":"Doe","email":"john@example.com"}}}},"FulfillmentAttributes":{"type":"object","title":"Fulfillments","description":"Fulfillments","properties":{"id":{"type":"integer","description":"Fulfillment ID"},"public_id":{"type":["string","null"],"description":"The fulfillment ID that would be visible to the customer within the CF app"},"workspace_id":{"type":"integer","description":"The workspace that the fulfillment belongs to"},"contact_id":{"type":"integer","description":"The contact that made the order that is being fulfilled."},"status":{"type":"string","enum":["cancelled","fulfilled","restocked"],"description":"The status of the fulfillment"},"tracking_url":{"type":["string","null"],"description":"Tracking URL"},"shipping_provider":{"type":["string","null"],"description":"Shipping Provider"},"tracking_code":{"type":["string","null"],"description":"Tracking Code"},"location_id":{"type":"integer","description":"The location that the fulfillment is being fulfilled from"},"fulfillment_number":{"type":["integer","null"],"description":"An auto-generated number of the fulfillment"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"included_invoices_line_items":{"type":["array","null"],"items":{"type":"object","title":"Included orders invoices line item","description":"The orders invoice line item to fulfill as part of this fulfillment","properties":{"id":{"type":"integer","description":"Included orders line item ID"},"public_id":{"type":["string","null"],"description":"The public ID of the included order invoices line item"},"fulfillment_id":{"type":"integer","description":"Fulfillment ID"},"quantity":{"type":"integer","description":"The quantity of the invoices line item subject that is part of this fulfillment. Your stock must have enough quantity for a successful fulfillment."},"invoices_line_item_id":{"type":"integer","description":"The invoice line item of an order that is part of this fulfillment."}}},"description":"Line items that are included in your fulfillment. They reference invoice line items of one or more orders and have extra data about the line item that is being fulfilled like the quantity that is part of this fulfillment."}},"example":{"id":1,"public_id":"dcbmDy","workspace_id":42000,"contact_id":8,"status":"fulfilled","tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","location_id":1,"fulfillment_number":1,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_invoices_line_items":[{"id":1,"public_id":"PYvAJe","fulfillment_id":1,"quantity":1,"invoices_line_item_id":125}]},"required":["contact_id","created_at","fulfillment_number","id","included_invoices_line_items","location_id","public_id","shipping_provider","status","tracking_code","tracking_url","updated_at","workspace_id"]},"FulfillmentParameters":{"type":"object","title":"Fulfillments","description":"Fulfillments","required":["contact_id","location_id","included_orders_invoices_line_items_attributes"],"properties":{"contact_id":{"type":"integer","description":"The contact that made the order that is being fulfilled."},"tracking_url":{"type":["string","null"],"description":"Tracking URL"},"shipping_provider":{"type":["string","null"],"description":"Shipping Provider"},"tracking_code":{"type":["string","null"],"description":"Tracking Code"},"location_id":{"type":"integer","description":"The location that the fulfillment is being fulfilled from"},"ignore_out_of_stock":{"type":"boolean","description":"Create a fulfillment despite the item being out of stock."},"notify_customer":{"type":"boolean","description":"Send an email to the customer when the fulfillment is created. Will use workspace default behavior if left unset."},"included_orders_invoices_line_items_attributes":{"type":"array","description":"The orders invoices line items to fulfill as part of this fulfillment.","items":{"type":"object","properties":{"invoices_line_item_id":{"type":"integer","description":"The orders invoice line item to fulfill"},"quantity":{"type":"integer","description":"The quantity to fulfill"}}}}},"example":{"fulfillment":{"contact_id":8,"tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","location_id":1,"ignore_out_of_stock":true,"notify_customer":true,"included_orders_invoices_line_items_attributes":[{"invoices_line_item_id":1,"quantity":1},{"invoices_line_item_id":2,"quantity":2}]}}},"FulfillmentParametersUpdate":{"type":"object","title":"Fulfillments","description":"Fulfillments","required":[],"properties":{"tracking_url":{"type":["string","null"],"description":"Tracking URL"},"shipping_provider":{"type":["string","null"],"description":"Shipping Provider"},"tracking_code":{"type":["string","null"],"description":"Tracking Code"},"notify_customer":{"type":"boolean","description":"Send an email to the customer when the fulfillment is updated. Will use workspace default behavior if left unset"}},"example":{"fulfillment":{"tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","notify_customer":true}}},"FulfillmentsLocationAttributes":{"type":"object","title":"Locations","description":"Locations","properties":{"id":{"type":"integer","description":"Location ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Location name"},"address_name":{"type":"string","description":"Address name"},"email_address":{"type":"string","description":"Email address"},"phone_number":{"type":["string","null"],"description":"Phone number"},"sort_order":{"type":["integer","null"],"description":"Sort order"},"archived":{"type":"boolean","description":"Indicates if the location is archived"},"external_app":{"type":["boolean","null"],"description":"External app"},"created_at":{"type":["string","null"],"description":"Added"},"updated_at":{"type":["string","null"],"description":"Updated"},"address":{"type":"object","title":"Locations","description":"Locations","properties":{"address_one":{"type":["string","null"],"description":"Address line 1"},"address_two":{"type":["string","null"],"description":"Address line 2"},"city":{"type":["string","null"],"description":"City"},"region":{"type":["string","null"],"description":"Region"},"country":{"type":["string","null"],"description":"Country"},"postal_code":{"type":["string","null"],"description":"Postal code"}}}},"example":{"id":2,"public_id":"jEvMrK","workspace_id":42000,"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939677@example.com","phone_number":"(123)-555-4567","sort_order":1,"archived":false,"external_app":true,"created_at":null,"updated_at":null,"address":{"address_one":"3443 W. Bavaria St.","address_two":"Suite 100","city":"Eagle","region":"Idaho","country":"US","postal_code":"83616"}},"required":["address","address_name","archived","created_at","email_address","external_app","id","name","phone_number","public_id","sort_order","updated_at","workspace_id"]},"FulfillmentsLocationParameters":{"type":"object","title":"Locations","description":"Locations","required":["name","address_name","email_address"],"properties":{"name":{"type":"string","description":"Location name"},"address_name":{"type":"string","description":"Address name"},"email_address":{"type":"string","description":"Email address"},"phone_number":{"type":["string","null"],"description":"Phone number"},"archived":{"type":"boolean","default":false,"description":"Indicates if the location is archived"},"external_app":{"type":"boolean","description":"Indicates a location managed by an external integration. Only to be used for requests made with Oauth 2.0 access tokens. External app locations do not need to provide an address."},"address":{"type":"object","properties":{"address_one":{"type":"string","description":"The first line of the address"},"address_two":{"type":"string","description":"The second line of the address"},"city":{"type":"string","description":"The city"},"region":{"type":"string","description":"The state or province"},"country":{"type":"string","description":"The country (ISO2 code)"},"postal_code":{"type":"string","description":"The postal code"}}}},"example":{"fulfillments_location":{"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939677@example.com","phone_number":"(123)-555-4567","archived":false}}},"FulfillmentsLocationParametersUpdate":{"type":"object","title":"Locations","description":"Locations","required":[],"properties":{"name":{"type":"string","description":"Location name"},"address_name":{"type":"string","description":"Address name"},"email_address":{"type":"string","description":"Email address"},"phone_number":{"type":["string","null"],"description":"Phone number"},"archived":{"type":"boolean","default":false,"description":"Indicates if the location is archived"},"external_app":{"type":"boolean","description":"Indicates a location managed by an external integration. Only to be used for requests made with Oauth 2.0 access tokens. External app locations do not need to provide an address."},"address":{"type":"object","properties":{"address_one":{"type":"string","description":"The first line of the address"},"address_two":{"type":"string","description":"The second line of the address"},"city":{"type":"string","description":"The city"},"region":{"type":"string","description":"The state or province"},"country":{"type":"string","description":"The country (ISO2 code)"},"postal_code":{"type":"string","description":"The postal code"}}}},"example":{"fulfillments_location":{"name":"Example Location","address_name":"Example Address","email_address":"myemail@example.com","phone_number":"(123)-555-4567","archived":false}}},"FunnelAttributes":{"type":"object","title":"Funnels","description":"Funnels","properties":{"id":{"type":"integer","description":"Funnel ID"},"public_id":{"type":"string","description":"The public identifier of the funnel"},"workspace_id":{"type":"integer","description":"The ID of the workspace that the funnel belongs to"},"name":{"type":"string","description":"Name of the Funnel"},"archived":{"type":"boolean","description":"Archived status"},"current_path":{"type":"string","description":"The URL path of the funnel"},"live_mode":{"type":"boolean","description":"In Live Mode your Funnel cannot be tested and will process live payments"},"domain_id":{"type":["integer","null"],"description":"The ID of the domain associated with this funnel. Use the Domains API to look up available domain IDs."},"favicon_image_id":{"type":["string","null"],"description":"The ID of the image used as the favicon for this funnel"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"tags":{"type":"array","items":{"type":"object","title":"Funnel Tags","description":"Funnel Tags","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":"string","description":"Public ID"},"name":{"type":"string","description":"The name of the funnel tag"},"color":{"type":"string","description":"The color of the funnel tag"}}},"description":"Funnel Tags"},"head_code":{"type":["string","null"],"description":"**Expandable** Custom HTML/JavaScript code injected into the funnel head section. Only returned when expand[]=head_code is provided. Note: expanding may add latency, especially on list endpoints. Use sparingly."},"footer_code":{"type":["string","null"],"description":"**Expandable** Custom HTML/JavaScript code injected before the closing body tag. Only returned when expand[]=footer_code is provided. Note: expanding may add latency, especially on list endpoints. Use sparingly."}},"example":{"id":1,"public_id":"gESyMv","workspace_id":42000,"name":"Example Funnel","archived":false,"current_path":"/example-path","live_mode":true,"domain_id":42,"favicon_image_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","tags":[{"id":1,"public_id":"JgjGTv","name":"Example Funnel Tag","color":"#00FF00"}]},"required":["archived","created_at","current_path","domain_id","favicon_image_id","id","live_mode","name","public_id","tags","updated_at","workspace_id"]},"FunnelSummary":{"type":"object","title":"Funnel Summary","description":"Lightweight funnel identifier used inside stats responses.","properties":{"id":{"type":"integer","description":"The funnel ID"},"public_id":{"type":"string","description":"The public identifier of the funnel"},"name":{"type":"string","description":"The name of the funnel"}},"example":{"id":1,"public_id":"gESyMv","name":"My Sales Funnel"}},"PageSummary":{"type":"object","title":"Page Summary","description":"Lightweight page identifier used inside the Page Stats response.","properties":{"id":{"type":"integer","description":"The page ID"},"public_id":{"type":"string","description":"The public identifier of the page"},"name":{"type":"string","description":"The page name"},"current_path":{"type":"string","description":"The canonical page-level path for this page"},"type":{"type":"string","description":"The page type (e.g. `landing_page`, `site_page`, `funnel_page`, `theme_page`)"}},"example":{"id":100,"public_id":"abc123","name":"Order Page","current_path":"/order-canonical","type":"funnel_page"}},"FunnelStepStats":{"type":"object","title":"Funnel Step Stats","description":"Per-step statistics for a funnel step. Used in the `steps` array of the Funnel Stats response and as the `step` object in the Page Stats response.","properties":{"page_id":{"type":["integer","null"],"description":"The id of the page this step renders (when the step is a show-page step). `null` for non-page steps."},"name":{"type":"string","description":"The step name"},"current_path":{"type":"string","description":"The workflow-level routing segment for this step (from the `Workflows::Step#current_path` attribute). Note: this is the workflow step path, not the page's own `current_path` which is the page-level canonical path."},"views_all":{"type":"integer","description":"Total pageviews for this step"},"views_unique":{"type":"integer","description":"Unique pageviews for this step"},"optins":{"type":"integer","description":"Number of opt-ins on this step"},"optin_rate":{"type":"number","format":"float","description":"Opt-in rate (optins / unique views)"},"sales_count":{"type":"integer","description":"Number of sales on this step"},"sales_rate":{"type":"number","format":"float","description":"Sales conversion rate (sales / unique views)"},"sales_value":{"type":"string","description":"Total sales value as a decimal string (see top-level currency field)"},"recurring_sales_count":{"type":"integer","description":"Number of recurring sales"},"recurring_sales_value":{"type":"string","description":"Total recurring sales value as a decimal string (see top-level currency field)"},"earnings_per_view":{"type":"string","description":"Earnings per view as a decimal string (see top-level currency field)"},"earnings_per_unique_view":{"type":"string","description":"Earnings per unique view as a decimal string (see top-level currency field)"}},"example":{"page_id":100,"name":"Sign Up Page","current_path":"/","views_all":17,"views_unique":17,"optins":0,"optin_rate":0,"sales_count":0,"sales_rate":0,"sales_value":"0.00","recurring_sales_count":0,"recurring_sales_value":"0.00","earnings_per_view":"0.00","earnings_per_unique_view":"0.00"}},"FunnelStatsAttributes":{"type":"object","title":"Funnel Stats","description":"Detailed funnel statistics with aggregate summary and optional per-step breakdown.","properties":{"funnel":{"$ref":"#/components/schemas/FunnelSummary"},"currency":{"type":"string","description":"ISO 4217 currency code for all monetary values (e.g. USD, EUR)"},"timerange":{"type":"object","description":"The actual time range used for the stats (after any clamping)","properties":{"from":{"type":"string","format":"date-time","description":"Start of the timerange (ISO 8601)"},"to":{"type":"string","format":"date-time","description":"End of the timerange (ISO 8601)"}}},"summary":{"type":"object","description":"Aggregate funnel summary metrics","properties":{"earnings_per_click":{"type":"string","description":"Earnings per click as a decimal string (see currency field)"},"upfront_sales":{"type":"string","description":"Total upfront sales as a decimal string (see currency field)"},"upfront_sales_count":{"type":"integer","description":"Number of upfront sales"},"recurring_sales":{"type":"string","description":"Total recurring sales as a decimal string (see currency field)"},"average_cart_value":{"type":"string","description":"Average cart value as a decimal string (see currency field)"},"pageviews":{"type":"integer","description":"Total pageviews across all funnel steps"}}},"page_public_ids":{"type":"array","description":"Public IDs of the pages associated with each funnel step, in step order. Present when `expand[]=steps` is NOT requested. Steps without an associated page are omitted.","items":{"type":"string"}},"steps":{"type":"array","description":"Per-step statistics. Present only when `expand[]=steps` is requested. When this field is present, `page_public_ids` is absent.","items":{"$ref":"#/components/schemas/FunnelStepStats"}}},"example":{"funnel":{"id":1,"public_id":"gESyMv","name":"My Sales Funnel"},"currency":"USD","timerange":{"from":"2026-03-03T00:00:00Z","to":"2026-04-02T23:59:59Z"},"summary":{"earnings_per_click":"0.00","upfront_sales":"0.00","upfront_sales_count":0,"recurring_sales":"0.00","average_cart_value":"0.00","pageviews":85},"page_public_ids":["NnAdPE","kJzvQi"]},"required":["currency","funnel","summary","timerange"]},"PageStatsAttributes":{"type":"object","title":"Page Stats","description":"Statistics for a page, including views, opt-ins, sales, and earnings. Stats are computed from the page's associated funnel step. `funnel` and `step` are `null` when the page is not part of a funnel (e.g. a standalone page or site page). This endpoint currently only reports analytics for pages reached via a funnel step; page-level analytics for standalone pages will be exposed in a future release.","properties":{"currency":{"type":"string","description":"ISO 4217 currency code for all monetary values (e.g. USD, EUR)"},"timerange":{"type":"object","description":"The actual time range used for the stats (after any clamping)","properties":{"from":{"type":"string","format":"date-time","description":"Start of the timerange (ISO 8601)"},"to":{"type":"string","format":"date-time","description":"End of the timerange (ISO 8601)"}}},"page":{"$ref":"#/components/schemas/PageSummary"},"funnel":{"description":"The funnel associated with this page. Null if the page is not linked to a funnel.","oneOf":[{"$ref":"#/components/schemas/FunnelSummary"},{"type":"null"}]},"step":{"description":"Per-step statistics for the funnel step this page belongs to. Null if the page is not linked to a funnel step.","oneOf":[{"$ref":"#/components/schemas/FunnelStepStats"},{"type":"null"}]}},"example":{"currency":"USD","timerange":{"from":"2026-03-03T00:00:00Z","to":"2026-04-02T23:59:59Z"},"page":{"id":100,"public_id":"abc123","name":"Order Page","current_path":"/order-canonical","type":"funnel_page"},"funnel":{"id":3,"public_id":"xYzAbC","name":"Sales Funnel"},"step":{"page_id":100,"name":"Order Page","current_path":"/order","views_all":100,"views_unique":80,"optins":3,"optin_rate":0.0375,"sales_count":5,"sales_rate":0.0625,"sales_value":"500.00","recurring_sales_count":2,"recurring_sales_value":"100.00","earnings_per_view":"5.00","earnings_per_unique_view":"6.25"}},"required":["currency","funnel","page","step","timerange"]},"FunnelParameters":{"type":"object","title":"Funnels","description":"Funnels","required":["name"],"properties":{"name":{"type":"string","description":"Name of the Funnel"},"live_mode":{"type":"boolean","description":"In Live Mode your Funnel cannot be tested and will process live payments"}},"example":{"funnel":{"name":"Example Funnel","live_mode":true}}},"FunnelParametersCreate":{"type":"object","title":"Funnels","description":"Funnels","required":["name"],"properties":{"name":{"type":"string","description":"Name of the Funnel"},"current_path":{"type":"string","description":"The URL path for the funnel. If not provided, a path will be auto-generated from the name."},"live_mode":{"type":"boolean","description":"In Live Mode your Funnel cannot be tested and will process live payments"},"domain_id":{"type":["integer","null"],"description":"The ID of the domain to associate with this funnel. Use the Domains API to look up available domain IDs."},"tag_ids":{"type":"array","items":{"type":"integer"},"description":"An array of tag IDs to associate with this funnel"},"head_code":{"type":["string","null"],"description":"Custom code to inject into the funnel's section. Content should be wrapped in appropriate HTML tags such as ","head_code_mode":"append"}}},"FunnelsTagAttributes":{"type":"object","title":"Funnel Tags","description":"Funnel Tags","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"The name of the funnel tag"},"color":{"type":"string","description":"The color of the funnel tag"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"}},"example":{"id":2,"public_id":"izTPVd","workspace_id":42000,"name":"Example Funnel Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["color","created_at","id","name","public_id","updated_at","workspace_id"]},"FunnelsTagParameters":{"type":"object","title":"Funnel Tags","description":"Funnel Tags","required":["name"],"properties":{"name":{"type":"string","description":"The name of the funnel tag"},"color":{"type":"string","description":"The color of the funnel tag"}},"example":{"funnels_tag":{"name":"Example Funnel Tag","color":"#FF5733"}}},"FunnelsTagParametersUpdate":{"type":"object","title":"Funnel Tags","description":"Funnel Tags","required":[],"properties":{"name":{"type":"string","description":"Name of the funnel tag"},"color":{"type":"string","description":"The color of the funnel tag"}},"example":{"funnels_tag":{"name":"Example Funnel Tag","color":"#FF5733"}}},"SplitTestStepAttributes":{"type":"object","title":"Split Test Step","description":"A split test step wraps an existing page in a funnel in a two-branch split. Each\nvariant carries the `show_page_step` + `page` attached to that branch (both `null`\nwhen the branch is empty), plus the branch's traffic `weight` (0..100).\n","properties":{"id":{"type":"integer","description":"Split test step ID"},"public_id":{"type":"string","description":"Obfuscated split test step ID"},"funnel":{"type":"object","description":"The funnel containing this split test.","properties":{"id":{"type":"integer","description":"Funnel ID"},"public_id":{"type":"string","description":"Obfuscated funnel ID"},"name":{"type":"string","description":"Funnel name"}}},"variants":{"type":"array","description":"Ordered variants. Binary split tests always have 2 entries.","items":{"type":"object","properties":{"show_page_step":{"type":["object","null"],"description":"The ShowPageStep function attached to this branch, or null if empty.","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"name":{"type":"string"},"current_path":{"type":"string"}}},"page":{"type":["object","null"],"description":"The page attached to this branch, or null if empty.","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"name":{"type":"string"}}},"weight":{"type":"integer","description":"Percentage of traffic sent to this branch (0..100). Branches must sum to 100."}}}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"example":{"id":1234,"public_id":"AbCdEf","funnel":{"id":42,"public_id":"xYz123","name":"My Funnel"},"variants":[{"show_page_step":{"id":100,"public_id":"ShPgId","name":"Squeeze Page step","current_path":"/squeeze"},"page":{"id":500,"public_id":"PageId","name":"Squeeze Page"},"weight":100},{"show_page_step":null,"page":null,"weight":0}],"created_at":"2026-04-24T00:00:00.000Z","updated_at":"2026-04-24T00:00:00.000Z"},"required":["created_at","funnel","id","public_id","updated_at","variants"]},"SplitTestStepParametersCreate":{"type":"object","title":"Create Split Test Step","description":"Parameters for wrapping an existing page in a new split test. Provide 1 or 2 variants.\nThe first variant's `page_id` must already be attached to a step in this funnel's\nworkflow (that page gets wrapped). The second variant's `page_id` must be a fresh page\n(not already used by any step anywhere). No cloning occurs.\n\n### Positioning the split\n\nBy default (no `show_page_step_id`), the split lands at the funnel entry —\n`sort_order 0` under the workflow root — with all surviving steps moved into a\n`Root Step after Sequence End` convergence sequence positioned right after the split.\n\nWhen `show_page_step_id` references an existing show-page step in this funnel, the\nsplit is inserted **after that step** under the same parent, and steps\nN+1...end are migrated under the convergence sequence. This is the \"split between\nstep N and step N+1\" shape.\n\nSee [Positioning the split](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#positioning-the-split) in the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md) for picking a safe anchor step, and [Placing an external (SDK) page in a branch](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#placing-an-external-sdk-page-in-a-branch) to use a page you host yourself as a variant.\n","required":["split_test_step"],"properties":{"split_test_step":{"type":"object","required":["variants"],"properties":{"variants":{"type":"array","description":"1 or 2 variant entries.","minItems":1,"maxItems":2,"items":{"type":"object","additionalProperties":false,"properties":{"page_id":{"type":"integer","description":"Page ID (required on the first variant; optional on the second)."},"weight":{"type":"integer","description":"Traffic weight (0..100). Either omit on both variants (defaults 100/0 for 1 variant or 50/50 for 2) or provide on both."}}}},"show_page_step_id":{"type":["integer","string"],"description":"Optional. Insert the new split AFTER the workflow step that wraps this\n`show_page_step`. Accepts a numeric `Workflows::Steps::ShowPageStep` id\nor its obfuscated public id (you can read either off any page response).\nWhen omitted, the split lands at funnel entry.\nCaution: creating a split moves the wrapped step inside a branch sequence,\nso an id fetched earlier may no longer sit where you think — read the\nfunnel structure immediately before creating, and note that anchoring on\na step inside another split's branch nests the new split in that branch.\n"}}}},"example":{"split_test_step":{"variants":[{"page_id":500,"weight":60},{"page_id":501,"weight":40}],"show_page_step_id":100}}},"SplitTestStepParametersUpdate":{"type":"object","title":"Update Split Test Step","description":"Parameters for updating a split test's variants. The `variants` array length must\nequal the current number of branches (2 for the standard binary case). Each entry may\nprovide any subset of `{ page_id, weight }`.\n","required":["split_test_step"],"properties":{"split_test_step":{"type":"object","required":["variants"],"properties":{"variants":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","additionalProperties":false,"properties":{"page_id":{"type":"integer","description":"New page to attach/swap to this branch. Must be a fresh page (no existing ShowPageStep)."},"weight":{"type":"integer","description":"Traffic weight (0..100). If any variant provides weight, all must — and they must sum to 100."}}}}}}},"example":{"split_test_step":{"variants":[{"page_id":500,"weight":70},{"page_id":501,"weight":30}]}}},"ConditionalSplitStepAttributes":{"type":"object","title":"Conditional Split Step","description":"A conditional split step routes contacts down one of two branches based on whether\nthey match a contact filter (`condition`). Each branch carries the\n`show_page_step` + `page` attached to that branch (both `null` when the branch is\nempty). The first branch (`branches[0]`) is the **matched** branch; the second\n(`branches[1]`) is the **unmatched** branch.\n\nSee the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#conditional-split-steps) for the full conditional-split surface (positioning, multi-page branches, attaching filters).\n\nThe `condition.filter_id` is the public id of a RefineFilter scoped to the same workspace.\nPass it on PATCH to attach or replace the filter. Create filters first via `POST /api/v2/workspaces/{workspace_id}/refine_filters` — see [Attaching a filter](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#attaching-a-filter) and the cross-link to [Applying filters to conditional split steps](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-conditional-split-steps).\n\nOn `GET /funnels/{funnel_id}/conditional_split_steps/{id}` (show), `condition.filter` is always\nincluded as a full RefineFilter object. On the list endpoint it is included only when\n`expand[]=filter` is passed.\n","properties":{"id":{"type":"integer","description":"Conditional split step ID"},"public_id":{"type":"string","description":"Obfuscated conditional split step ID"},"funnel_id":{"type":"integer","description":"ID of the funnel containing this conditional split"},"funnel_public_id":{"type":"string","description":"Obfuscated funnel ID"},"condition":{"type":"object","properties":{"filter_id":{"type":["string","null"],"description":"Public id of the attached RefineFilter. `null` when no filter has been set up."},"is_setup":{"type":"boolean","description":"True when a filter has been attached and the conditional split is ready to evaluate."},"filter":{"description":"The full RefineFilter object for the attached filter. Always present on the show endpoint.\nPresent on the list endpoint only when `expand[]=filter` is requested. Absent (key omitted)\nwhen no filter is attached or the expand param is not passed.\n","oneOf":[{"$ref":"#/components/schemas/RefineFilterAttributes"},{"type":"null"}]}}},"branches":{"type":"array","minItems":2,"maxItems":2,"description":"Ordered branches — `[matched, unmatched]`.","items":{"type":"object","properties":{"show_page_step":{"type":["object","null"],"description":"The ShowPageStep function attached to this branch, or null if empty.","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"name":{"type":"string"},"current_path":{"type":"string"}}},"page":{"type":["object","null"],"description":"The page attached to this branch, or null if empty.","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"name":{"type":"string"}}}}}},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"example":{"id":9876,"public_id":"CsXyZ1","funnel_id":42,"funnel_public_id":"xYz123","condition":{"filter_id":"AbCdEf","is_setup":true,"filter":{"id":42,"public_id":"AbCdEf","workspace_id":5,"name":"VIP newsletter audience","filter_class":"ContactsFilter","conjunction":"and","criteria":[{"attribute":"tags.id","clause":"in","value":["tag-pub-id-1"]}],"created_at":"2026-04-01T12:00:00.000Z","updated_at":"2026-04-01T12:00:00.000Z"}},"branches":[{"show_page_step":{"id":200,"public_id":"ShPgMa","name":"Matched Page step","current_path":"/matched"},"page":{"id":600,"public_id":"PgMatch","name":"Matched Page"}},{"show_page_step":null,"page":null}],"created_at":"2026-05-01T00:00:00.000Z","updated_at":"2026-05-01T00:00:00.000Z"},"required":["branches","condition","created_at","funnel_id","funnel_public_id","id","public_id","updated_at"]},"ConditionalSplitStepParametersCreate":{"type":"object","title":"Create Conditional Split Step","description":"Parameters for adding a new conditional split step to a funnel's workflow. The split\nalways starts as a 2-branch tree (`matched` first, `unmatched` second). All fields\nbelow are optional — providing none creates an empty unconfigured split that\nthe caller can fill in later via PATCH.\n\n### `condition`\n\nSupply `filter_id` — the public id of a RefineFilter scoped to the same workspace.\nCreate filters first via `POST /api/v2/workspaces/{workspace_id}/refine_filters`.\nRaw numeric ids are rejected for cross-tenant safety. See [Attaching a filter](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#attaching-a-filter)\nand [Applying filters to conditional split steps](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-conditional-split-steps).\n\n### Branches\n\nOptional `branches` array — up to 2 entries; `branches[0]` is the matched branch,\n`branches[1]` is the unmatched branch. Each entry may carry either:\n\n- `page_id` — a single fresh `user_page` id to attach as the branch's first step.\n- `page_ids` — an array of fresh `user_page` ids to attach in order. Use this to\n build a branch with multiple sequential pages (e.g. matched users see Welcome →\n Onboarding → CTA, while unmatched users see Email Capture → Welcome).\n\n`page_id` and `page_ids` are mutually exclusive per branch entry. Each page\nreferenced must be in the same workspace and not already wired to any\n`ShowPageStep` anywhere.\n\n### Positioning\n\nSee `show_page_step_id` semantics — identical to the split test step endpoint.\n","properties":{"conditional_split_step":{"type":"object","properties":{"condition":{"type":"object","properties":{"filter_id":{"type":"string","description":"Public id of a RefineFilter in this workspace. Create filters via `POST /api/v2/workspaces/{workspace_id}/refine_filters`."}}},"branches":{"type":"array","minItems":0,"maxItems":2,"description":"Optional 0..2 branch entries; `branches[0]` is the matched branch, `branches[1]` is the unmatched branch.","items":{"type":"object","additionalProperties":false,"properties":{"page_id":{"type":"integer","description":"Optional id of a page with no existing show-page step (an unattached internal page or a standalone external page) to attach as the branch's first step. Mutually exclusive with `page_ids`. See [Placing an external (SDK) page in a branch](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#placing-an-external-sdk-page-in-a-branch) in the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md) for creating the standalone external page you reference here."},"page_ids":{"type":"array","items":{"type":"integer"},"description":"Optional list of fresh `user_page` ids to attach in order under this branch.\nUse this to build branches with multiple sequential steps. Mutually exclusive with `page_id`.\n"}}}},"show_page_step_id":{"type":["integer","string"],"description":"Optional. Insert the new conditional split AFTER the workflow step that wraps\nthis `show_page_step`. Accepts a numeric `Workflows::Steps::ShowPageStep` id\nor its obfuscated public id (you can read either off any page response).\nWhen omitted, the split lands at funnel entry.\nCaution: creating a split moves the wrapped step inside a branch sequence,\nso an id fetched earlier may no longer sit where you think — read the\nfunnel structure immediately before creating, and note that anchoring on\na step inside another split's branch nests the new split in that branch.\n"}}}},"example":{"conditional_split_step":{"condition":{"filter_id":"AbCdEf"},"branches":[{"page_ids":[600,601,602]},{"page_ids":[603]}],"show_page_step_id":100}}},"ConditionalSplitStepParametersUpdate":{"type":"object","title":"Update Conditional Split Step","description":"Update the `condition` and/or attach pages to existing `branches`. At least one of\nthe two must be provided.\n\n- `condition.filter_id` is the public id of a RefineFilter in the same workspace.\n Create or update filters via the RefineFilter endpoints. See [Attaching a filter](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#attaching-a-filter)\n and [Applying filters to conditional split steps](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-conditional-split-steps).\n- `branches` must be a 2-entry array (matched, unmatched).\n - `page_id` (single) — when the branch is empty: attach. When the branch already\n has show-page-steps: swap the FIRST step's page (subsequent steps preserved).\n - `page_ids` (array) — APPEND the listed fresh pages to the end of the branch.\n Use this to grow a branch with more sequential steps over multiple PATCHes.\n Both forms are mutually exclusive per entry; any page referenced must be a\n fresh `user_page` in the same workspace with no existing ShowPageStep.\n","properties":{"conditional_split_step":{"type":"object","properties":{"condition":{"type":"object","properties":{"filter_id":{"type":"string","description":"Public id of a RefineFilter in this workspace."}}},"branches":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","additionalProperties":false,"properties":{"page_id":{"type":"integer","description":"Page id to attach (currently empty branch) or swap (first step on populated branch). Mutually exclusive with `page_ids`."},"page_ids":{"type":"array","items":{"type":"integer"},"description":"List of fresh page ids to APPEND to the end of this branch. Mutually exclusive with `page_id`."}}}}}}},"example":{"conditional_split_step":{"condition":{"filter_id":"AbCdEf"},"branches":[{"page_ids":[600,601,602]},{"page_id":603}]}}},"ImageAttributes":{"type":"object","title":"Images","description":"Images","properties":{"id":{"type":"integer","description":"Image ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"url":{"type":"string","description":"The URL of the image"},"workspace_id":{"type":"integer","description":"Workspace ID"},"alt_text":{"type":["string","null"],"description":"Image alt attribute"},"name":{"type":["string","null"],"description":"Image name"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":11,"public_id":"CGFcPI","url":"https://example.myclickfunnels.com/uploads/image/1/file/9c8d1e7d480dc9882c519d4b4528826f.png","workspace_id":42000,"alt_text":"Alt text of the image","name":"Amazing Shot","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["alt_text","created_at","id","name","public_id","updated_at","url","workspace_id"]},"ImageParameters":{"type":"object","title":"Images","description":"Images","required":["upload_source_url"],"properties":{"alt_text":{"type":["string","null"],"description":"Image alt attribute"},"name":{"type":["string","null"],"description":"Image name"},"upload_source_url":{"type":"string","description":"The source URL of the image that you want to upload. Not required on Update when not needed to re-upload the image."}},"example":{"image":{"alt_text":"Alt text of the image","name":"Amazing Shot","upload_source_url":"https://image-hosting-x.com/cdn/123"}}},"ImageParametersUpdate":{"type":"object","title":"Images","description":"Images","required":[],"properties":{"alt_text":{"type":["string","null"],"description":"Image alt attribute"},"name":{"type":["string","null"],"description":"Image name"},"upload_source_url":{"type":"string","description":"The source URL of the image that you want to upload. Not required on Update when not needed to re-upload the image."}},"example":{"image":{"alt_text":"Alt text of the image","name":"Amazing Shot","upload_source_url":"https://image-hosting-x.com/cdn/123"}}},"OrderAttributes":{"type":"object","title":"Orders","description":"Orders","allOf":[{"$ref":"#/components/schemas/OrderBaseAttributes"},{"type":"object","properties":{"workspace_id":{"type":"integer","description":"ClickFunnels Workspace ID"},"contact_id":{"type":"integer","description":"The contact associated with the order."},"currency":{"type":"string","description":"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":{"type":["integer","null"],"description":"Page ID"},"tax_amount":{"type":["string","null"],"description":"Tax Amount"},"billing_payment_method_id":{"type":["string","null"],"description":"Payment Method"},"funnel_name":{"type":["string","null"],"description":"Funnel Name"},"discount_ids":{"type":"array","items":{"type":"integer"},"description":"Discounts"},"workspace_sharing_id":{"type":["string","null"],"description":"Workspace Sharing ID"},"paid_until":{"type":["string","null"],"format":"date-time","description":"The date until which the subscription order is paid."},"resource_install_intent":{"type":["string","null"],"description":"Resource install intent for the order."},"created_at":{"type":["string","null"],"format":"date-time","description":"Date Ordered"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Date Updated"},"external_id":{"type":["string","null"],"description":"An external ID, e.g., a payment provider's ID or an ID managed by the client internally"},"payment_processor":{"type":["string","null"],"description":"The payment processor of the order. Currently, it can be one of `payments_ai` and `external`."},"phone_number":{"type":["string","null"],"description":"Phone Number"},"page_name":{"type":["string","null"],"description":"Page Name. Want to filter by it? See our help guide on that topic."},"contact_groups":{"type":["array","null"],"items":{"type":"object","title":"Groups","description":"Groups","properties":{"id":{"type":"integer","description":"Group ID"},"public_id":{"type":"string","description":"Group Public ID"},"name":{"type":"string","description":"Name"}}},"description":"Contact Groups"},"workspace":{"type":"object","allOf":[{"$ref":"#/components/schemas/WorkspaceAttributes"}],"description":"Workspace"},"segments":{"type":["array","null"],"items":{"type":"object","title":"Segments","description":"Segments","properties":{"id":{"type":"integer","description":"Segment ID"},"public_id":{"type":"string","description":"Segment public ID"},"name":{"type":"string","description":"Name"}}},"description":"Segments"},"line_items":{"type":["array","null"],"items":{"$ref":"#/components/schemas/OrdersLineItemAttributes"},"description":"Order Line Items"},"previous_line_item":{"type":["string","null"],"description":"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":{"allOf":[{"$ref":"#/components/schemas/OrderVisitsAttributes"}],"description":"Visit tracking information for this order. Contains last_visit and last_visit_with_utm (but not first_visit, which belongs to the contact)."}}}],"example":{"id":22642,"public_id":"JmRRyN","order_number":"#2146","workspace_id":4,"contact_id":22440,"live_mode":true,"total_amount":"396.00","currency":"USD","origination_channel_id":11,"origination_channel_type":"Platform::Application","shipping_address_first_name":"Caroll","shipping_address_last_name":"Kirlin","shipping_address_organization_name":"Testing, Inc.","shipping_address_phone_number":"+19053871234","shipping_address_street_one":"3443 W Bavaria St","shipping_address_street_two":"","shipping_address_city":"Eagle","shipping_address_region":"ID","shipping_address_country":"US","shipping_address_postal_code":"83616","billing_address_street_one":"3443 W Bavaria St","billing_address_street_two":"","billing_address_city":"Eagle","billing_address_region":"ID","billing_address_country":"US","billing_address_postal_code":"83616","recurring_invoices_paid_count":1,"page_id":null,"notes":"For Fulfillment","in_trial":false,"billing_status":"pending","service_status":"completed","order_type":"one-time-order","next_charge_at":null,"tax_amount":"0.00","trial_end_at":null,"billing_payment_method_id":null,"funnel_name":null,"tag_ids":[],"discount_ids":[],"activated_at":null,"workspace_sharing_id":null,"canceled_at":null,"canceled_by":null,"cancel_reason":null,"cancel_description":null,"churned_at":null,"paid_until":null,"resource_install_intent":null,"created_at":"2026-01-10T20:15:01.524Z","updated_at":"2026-01-10T20:15:01.524Z","external_id":"cjnoxnqv1b","payment_processor":"external","phone_number":null,"page_name":null,"origination_channel_name":"Default API Client","origination_channel_public_id":"vNWWMb","order_page":null,"contact":{"id":24359,"public_id":"vQxYMj","workspace_id":4,"anonymous":0,"email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199","time_zone":"Madrid","uuid":"80b7f903-76cd-4edf-94bf-fc34c13ee654","unsubscribed_at":null,"last_notification_email_sent_at":null,"email_suppression_reason":null,"is_active":true,"fb_url":null,"twitter_url":null,"instagram_url":null,"linkedin_url":null,"website_url":null,"created_at":"2026-01-09T15:27:56.647Z","updated_at":"2026-01-09T15:28:08.075Z","tags":[],"custom_attributes":{},"visits":{"first_visit":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"},"last_visit":null,"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}}},"contact_groups":[{"id":3,"public_id":"KekAjm","name":"Default Group"}],"workspace":{"id":4,"public_id":"WjrGvk","team_id":4,"name":"My Team","subdomain":"myteam","created_at":"2025-05-26T09:56:16.307Z","updated_at":"2026-01-08T17:40:21.676Z"},"segments":[],"line_items":[{"id":674,"public_id":"GjPVnN","order_id":22642,"quantity":2,"prorated":null,"created_at":"2026-01-10T20:15:01.536Z","updated_at":"2026-01-10T20:15:01.536Z","original_product":{"id":6512,"public_id":"YRnzRY","name":"Seinfeld In Your Pocket - Comedy Joke Machine (Black Premium)"},"products_price":{"id":22229,"public_id":"YqEWxY","amount":"198.00","currency":"usd","duration":null,"interval":null,"interval_count":null,"key":null},"products_variant":{"id":22228,"public_id":"JdknyN","name":"Seinfeld In Your Pocket - Comedy Joke Machine (Black Premium)","description":null,"sku":"SIYP-BLACK-PREMIUM-001"}}],"previous_line_item":null,"visits":{"last_visit":{"uuid":"7a3f9c11-2d45-4e23-88d2-1bef9acd44fa","utm_source":null,"utm_medium":null,"utm_campaign":null,"utm_term":null,"utm_content":null,"ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.clickfunnels.com/products","referring_domain":"clickfunnels.com","landing_page":"https://example.com/checkout","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-10T20:10:15.234Z","created_at":"2026-01-10T20:10:15.234Z","updated_at":"2026-01-10T20:10:15.234Z"},"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}},"affiliate":null,"referral_code":null},"required":["activated_at","affiliate","billing_address_city","billing_address_country","billing_address_postal_code","billing_address_region","billing_address_street_one","billing_address_street_two","billing_payment_method_id","billing_status","cancel_description","cancel_reason","canceled_at","canceled_by","churned_at","contact","contact_groups","contact_id","created_at","currency","discount_ids","external_id","funnel_name","id","in_trial","line_items","live_mode","next_charge_at","notes","order_number","order_page","order_type","origination_channel_id","origination_channel_name","origination_channel_public_id","origination_channel_type","page_id","page_name","paid_until","payment_processor","phone_number","previous_line_item","public_id","recurring_invoices_paid_count","referral_code","resource_install_intent","segments","service_status","shipping_address_city","shipping_address_country","shipping_address_first_name","shipping_address_last_name","shipping_address_organization_name","shipping_address_phone_number","shipping_address_postal_code","shipping_address_region","shipping_address_street_one","shipping_address_street_two","tag_ids","tax_amount","total_amount","trial_end_at","updated_at","visits","workspace","workspace_id","workspace_sharing_id"]},"OrderBaseAttributes":{"type":"object","title":"Order (Base)","description":"Base order attributes used in nested responses (e.g., within invoice responses).\nThis is a subset of the full OrderAttributes schema.\n","properties":{"id":{"type":"integer","description":"ClickFunnels Order ID"},"public_id":{"type":"string","description":"ClickFunnels Order public ID"},"order_number":{"type":["string","null"],"description":"A sequential number for bookkeeping purposes increased by 1 for each new order in a workspace starting from"},"total_amount":{"type":["string","null"],"description":"The total amount of the order, considering taxes and discounts."},"origination_channel_id":{"type":"integer","description":"Origination Channel ID"},"origination_channel_type":{"type":["string","null"],"description":"Origination Channel Type"},"notes":{"type":["string","null"],"description":"Your internal note about the order. This will be visible in ClickFunnels admin orders-related sections."},"live_mode":{"type":"boolean","description":"Indicates if the Order will use a live payment gateway and process real credit cards."},"in_trial":{"type":"boolean","description":"In Trial"},"billing_status":{"type":"string","description":"The billing status reflects the status of the invoice of an order.\nBilling status can be one of the following for Payments AI and Stripe orders:\n`pending`, `draft`, `paid`, `unpaid`, `partially-refunded`, `refunded`, `voided`, `disputed`, `past-due`.\nFor external orders, the billing status can be one of: `pending`, `paid`, `unpaid`, `voided` and `refunded`.\n"},"service_status":{"type":"string","description":"The service status reflects the activity state of the order.\nFor external one-time orders possible service statuses are `pending` or `completed`.\nFor external subscription orders possible statuses are `pending`, `active`, `churned`, `canceled`, `completed`, `paused`.\n"},"order_type":{"type":"string","description":"Order Type"},"next_charge_at":{"type":["string","null"],"description":"Next Charge At"},"trial_end_at":{"type":["string","null"],"description":"Trial End At"},"tag_ids":{"type":"array","items":{"type":"integer"},"description":"Order Tags"},"activated_at":{"type":["string","null"],"description":"Date Activated"},"canceled_at":{"type":["string","null"],"description":"Order Canceled At"},"canceled_by":{"type":["string","null"],"description":"Order Canceled By"},"cancel_reason":{"type":["string","null"],"description":"The reason code for the cancelation. Possible codes for external orders are:\n`customer_service`, `low_quality`, `missing_features`, `other`, `switched_service`, `too_complex`, `too_expensive`, `unused`\n"},"cancel_description":{"type":["string","null"],"description":"A free-text description of the cancellation reason."},"churned_at":{"type":["string","null"],"description":"Churned At"},"shipping_address_first_name":{"type":["string","null"],"description":"The first name of the recipient's shipping address."},"shipping_address_last_name":{"type":["string","null"],"description":"The last name of the recipient's shipping address."},"shipping_address_organization_name":{"type":["string","null"],"description":"The organization name of the recipient's shipping address."},"shipping_address_phone_number":{"type":["string","null"],"description":"The phone number of the recipient's shipping address."},"shipping_address_street_one":{"type":["string","null"],"description":"The main street information of the shipping address, including the street name and number."},"shipping_address_street_two":{"type":["string","null"],"description":"Additional street information for the shipping address, like entrance information and apartment numbers."},"shipping_address_city":{"type":["string","null"],"description":"The city of the shipping address."},"shipping_address_region":{"type":["string","null"],"description":"The region of the shipping address, like state or province."},"shipping_address_country":{"type":["string","null"],"description":"The country of the shipping address."},"shipping_address_postal_code":{"type":["string","null"],"description":"Postal Code"},"billing_address_street_one":{"type":["string","null"],"description":"The main street information of the billing address, including the street name and number."},"billing_address_street_two":{"type":["string","null"],"description":"Additional street information of the billing address, like entrance information and apartment numbers."},"billing_address_city":{"type":["string","null"],"description":"The city of the billing address."},"billing_address_region":{"type":["string","null"],"description":"The region of the billing address, like state or province."},"billing_address_country":{"type":["string","null"],"description":"The billing address country."},"billing_address_postal_code":{"type":["string","null"],"description":"Billing address postal (ZIP) code."},"recurring_invoices_paid_count":{"type":"integer","description":"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":{"type":["string","null"],"description":"Origination Channel Name"},"origination_channel_public_id":{"type":["string","null"],"description":"The obfuscated public ID of the origination channel"},"contact":{"type":"object","allOf":[{"$ref":"#/components/schemas/ContactBaseAttributes"}],"description":"Customer"},"affiliate":{"type":["object","null"],"title":"Affiliate","description":"The affiliate who will receive a commission for the order","properties":{"name":{"type":"string","description":"The name of the affiliate. Can be a combination of first name, last name and the affiliate email."},"email":{"type":["string","null"],"description":"The email address of the affiliate."}}},"referral_code":{"type":["object","null"],"title":"Referral Code","description":"The referral code used to associate an order with an affiliate.","properties":{"code":{"type":"string","description":"The referral code value visible by users. It must be unique and can contain only letters, numbers, hyphens, and underscores."},"default":{"type":["boolean","null"],"description":"Whether this code is the default code for the affiliate."}}},"order_page":{"type":["object","null"],"title":"Page","description":"Page","properties":{"id":{"type":"integer","description":"Page ID"},"public_id":{"type":"string","description":"The public identifier of the page"},"name":{"type":"string","description":"Page name"}}}},"example":{"id":22642,"public_id":"JmRRyN","order_number":"#2146","total_amount":"396.00","origination_channel_id":11,"origination_channel_type":"Platform::Application","notes":"For Fulfillment","live_mode":true,"in_trial":false,"billing_status":"paid","service_status":"completed","order_type":"one-time-order","next_charge_at":null,"trial_end_at":null,"tag_ids":[],"activated_at":null,"canceled_at":null,"canceled_by":null,"cancel_reason":null,"cancel_description":null,"churned_at":null,"shipping_address_first_name":"Caroll","shipping_address_last_name":"Kirlin","shipping_address_organization_name":"Testing, Inc.","shipping_address_phone_number":"+19053871234","shipping_address_street_one":"3443 W Bavaria St","shipping_address_street_two":"","shipping_address_city":"Eagle","shipping_address_region":"ID","shipping_address_country":"US","shipping_address_postal_code":"83616","billing_address_street_one":"3443 W Bavaria St","billing_address_street_two":"","billing_address_city":"Eagle","billing_address_region":"ID","billing_address_country":"US","billing_address_postal_code":"83616","recurring_invoices_paid_count":1,"origination_channel_name":"Default API Client","origination_channel_public_id":"vNWWMb","contact":{"id":24359,"public_id":"vQxYMj","workspace_id":4,"anonymous":0,"email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199","time_zone":"Madrid","uuid":"80b7f903-76cd-4edf-94bf-fc34c13ee654","unsubscribed_at":null,"last_notification_email_sent_at":null,"email_suppression_reason":null,"is_active":true,"fb_url":null,"twitter_url":null,"instagram_url":null,"linkedin_url":null,"website_url":null,"created_at":"2026-01-09T15:27:56.647Z","updated_at":"2026-01-09T15:28:08.075Z","tags":[],"custom_attributes":{},"visits":{"first_visit":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"},"last_visit":null,"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}}},"affiliate":null,"referral_code":null,"order_page":null},"required":["activated_at","affiliate","billing_address_city","billing_address_country","billing_address_postal_code","billing_address_region","billing_address_street_one","billing_address_street_two","billing_status","cancel_description","cancel_reason","canceled_at","canceled_by","churned_at","contact","id","in_trial","live_mode","next_charge_at","notes","order_number","order_page","order_type","origination_channel_id","origination_channel_name","origination_channel_public_id","origination_channel_type","public_id","recurring_invoices_paid_count","referral_code","service_status","shipping_address_city","shipping_address_country","shipping_address_first_name","shipping_address_last_name","shipping_address_organization_name","shipping_address_phone_number","shipping_address_postal_code","shipping_address_region","shipping_address_street_one","shipping_address_street_two","tag_ids","total_amount","trial_end_at"]},"OrderParameters":{"type":"object","title":"Orders","description":"Parameters for creating external orders. External orders are orders managed outside of ClickFunnels payment processors (Payments AI or Stripe).\n\n**Required fields:**\n- `order_type`: Must be `one-time-order` or `subscription-order`\n- `live_mode`: Must be `true` or `false`\n- `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\n- `line_items_attributes`: At least one line item with `variant_id`, `products_price_id`, and `quantity`\n\n**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.\n","required":["order_type","live_mode","line_items_attributes"],"properties":{"order_type":{"type":"string","enum":["one-time-order","subscription-order"],"description":"The type of order. Required for creating orders.\n- `one-time-order`: A single purchase order. Line items must reference one-time products only.\n- `subscription-order`: A recurring subscription order. Line items can include both one-time and subscription products.\n"},"live_mode":{"type":"boolean","description":"Required. Indicates if the Order is for production or testing.\n- `true`: The order is a live/production order.\n- `false`: The order is a test order.\n"},"contact_id":{"type":"integer","description":"The ID of the contact associated with the order.\nEither `contact_id` or `contact_attributes` must be provided, but not both.\nIf both are provided, `contact_id` takes precedence.\n"},"contact_attributes":{"type":"object","description":"Alternative to `contact_id`. Provide contact attributes to look up an existing contact by email.\nThe contact must already exist in the workspace - by default, this does not create new contacts.\nIf `contact_id` is also provided, it takes precedence and `contact_attributes` is ignored.\n","properties":{"email_address":{"type":"string","description":"The email address of an existing contact in the workspace. Required when using contact_attributes."}},"required":["email_address"]},"line_items_attributes":{"type":"array","description":"Line items for the order. At least one line item is required.\nEach line item must include a valid `variant_id`, `products_price_id`, and `quantity`.\n","items":{"type":"object","required":["variant_id","products_price_id","quantity"],"properties":{"variant_id":{"type":"integer","description":"The ID of the product variant. Must be a valid variant in your workspace."},"products_price_id":{"type":"integer","description":"The ID of the price for the product. Must be a valid price for the variant's product."},"quantity":{"type":"integer","description":"The quantity of this line item.","minimum":1}}}},"shipping_address_first_name":{"type":["string","null"],"description":"The first name of the recipient's shipping address.\n"},"shipping_address_last_name":{"type":["string","null"],"description":"The last name of the recipient's shipping address.\n"},"shipping_address_organization_name":{"type":["string","null"],"description":"The organization name of the recipient's shipping address.\n"},"shipping_address_phone_number":{"type":["string","null"],"description":"The phone number of the recipient's shipping address.\n"},"shipping_address_street_one":{"type":["string","null"],"description":"The main street information of the shipping address, including the street name and number."},"shipping_address_street_two":{"type":["string","null"],"description":"Additional street information for the shipping address, like entrance information and apartment numbers."},"shipping_address_city":{"type":["string","null"],"description":"The city of the shipping address."},"shipping_address_region":{"type":["string","null"],"description":"The region of the shipping address, like state or province."},"shipping_address_country":{"type":["string","null"],"description":"The country of the shipping address.\n"},"shipping_address_postal_code":{"type":["string","null"],"description":"Postal Code"},"billing_address_street_one":{"type":["string","null"],"description":"The main street information of the billing address, including the street name and number.\n"},"billing_address_street_two":{"type":["string","null"],"description":"Additional street information of the billing address, like entrance information and apartment numbers.\n"},"billing_address_city":{"type":["string","null"],"description":"The city of the billing address.\n"},"billing_address_region":{"type":["string","null"],"description":"The region of the shipping address, like state or province.\n"},"billing_address_country":{"type":["string","null"],"description":"The billing address country.\n"},"billing_address_postal_code":{"type":["string","null"],"description":"Billing address postal (ZIP) code.\n"},"notes":{"type":["string","null"],"description":"Your internal note about the order. This will be visible in ClickFunnels admin orders-related sections."},"billing_status":{"type":"string","description":"The billing status reflects the status of the invoice of an order.\nBilling status can be one of the following for Payments AI and Stripe orders:\n`pending`, `draft`, `paid`, `unpaid`, `partially-refunded`, `refunded`, `voided`, `disputed`, `past-due`.\n\nFor external orders, the billing status can be one of: `pending`, `paid`, `unpaid`, `voided` and `refunded`.\n"},"service_status":{"type":"string","description":"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.\n\nFor orders with Payments AI as the payment processor, it can be one of the following:\n`pending`, `active`, `completed`, `churned`, `canceled`, `suspended`, `paused`, `abandoned`, `voided`\nStripe orders have the same order statuses, except for `voided`. For voided invoices, its service status becomes `abandoned`.\nYou can read about the state transitions in more detail in our [orders overview guide](https://developers.myclickfunnels.com/docs/orders).\n\nFor external one-time orders possible service statuses are `pending` or `completed`. For external subscription orders possible statuses are `pending`, `active`, `churned`, `canceled`, `completed`, `paused`.\n"},"next_charge_at":{"type":["string","null"],"description":"The date and time of the next scheduled charge for subscription orders. (External subscription orders only)"},"activated_at":{"type":["string","null"],"description":"Date Activated"},"canceled_at":{"type":["string","null"],"description":"Order Canceled At"},"canceled_by":{"type":["string","null"],"description":"Order Canceled By"},"cancel_reason":{"type":["string","null"],"description":"The reason _code_ for the cancelation, it is required when canceling an order.\n\nPossible codes for Payments AI orders are:\n`did-not-use`, `did-not-want`, `missing-features`, `too-expensive`, `bugs-or-problems`, `other`\n\nPossible codes for Stripe orders are:\n`customer_service`, `low_quality`, `missing_features`, `other`, `switched_service`, `too_complex`, `too_expensive`, `unused`\n\nExternal orders accept the same cancelation reasons as Stripe.\n"},"cancel_description":{"type":["string","null"],"description":"A free-text description of the cancellation reason."},"churned_at":{"type":["string","null"],"description":"Churned At"},"external_id":{"type":["string","null"],"description":"An external ID, e.g., a payment provider's ID or an ID managed by the client internally"}},"example":{"order":{"order_type":"one-time-order","live_mode":true,"contact_id":10,"line_items_attributes":[{"variant_id":15,"products_price_id":23,"quantity":1},{"variant_id":18,"products_price_id":29,"quantity":2}],"shipping_address_first_name":"Elmira","shipping_address_last_name":"O'Keefe","shipping_address_organization_name":"Testing, Inc.","shipping_address_phone_number":"+19053871234","shipping_address_street_one":"687 Volkman Trail","shipping_address_street_two":"Suite 665","shipping_address_city":"New Ezequiel","shipping_address_region":"WA","shipping_address_country":"US","shipping_address_postal_code":"93706","billing_address_street_one":"3537 Meridith Overpass","billing_address_street_two":"Apt. 787","billing_address_city":"Tyraside","billing_address_region":"WA","billing_address_country":"US","billing_address_postal_code":"48869-5657","notes":"Leave package at the front desk","billing_status":"pending","service_status":"pending","external_id":"ext-order-12345"}}},"OrderParametersUpdate":{"type":"object","title":"Orders","description":"Update parameters for orders. All fields are optional.\nMost fields are only applicable to external orders (orders with `payment_processor: external`).\n","required":[],"properties":{"notes":{"type":["string","null"],"description":"Your internal note about the order. This will be visible in ClickFunnels admin orders-related sections."},"billing_status":{"type":"string","description":"(External orders only) The billing status reflects the status of the invoice of an order.\nFor external orders, the billing status can be one of: `pending`, `paid`, `unpaid`, `voided` and `refunded`.\n"},"service_status":{"type":"string","description":"(External orders only) The service status reflects the activity state of the order.\nFor external one-time orders possible service statuses are `pending` or `completed`.\nFor external subscription orders possible statuses are `pending`, `active`, `churned`, `canceled`, `completed`, `paused`.\n"},"external_id":{"type":["string","null"],"description":"(External orders only) An external ID, e.g., a payment provider's ID or an ID managed by the client internally."},"shipping_address_first_name":{"type":["string","null"],"description":"(External orders only) The first name of the recipient's shipping address."},"shipping_address_last_name":{"type":["string","null"],"description":"(External orders only) The last name of the recipient's shipping address."},"shipping_address_organization_name":{"type":["string","null"],"description":"(External orders only) The organization name of the recipient's shipping address."},"shipping_address_phone_number":{"type":["string","null"],"description":"(External orders only) The phone number of the recipient's shipping address."},"shipping_address_street_one":{"type":["string","null"],"description":"(External orders only) The main street information of the shipping address, including the street name and number."},"shipping_address_street_two":{"type":["string","null"],"description":"(External orders only) Additional street information for the shipping address, like entrance information and apartment numbers."},"shipping_address_city":{"type":["string","null"],"description":"(External orders only) The city of the shipping address."},"shipping_address_region":{"type":["string","null"],"description":"(External orders only) The region of the shipping address, like state or province."},"shipping_address_country":{"type":["string","null"],"description":"(External orders only) The country of the shipping address."},"shipping_address_postal_code":{"type":["string","null"],"description":"(External orders only) The postal code of the shipping address."},"billing_address_street_one":{"type":["string","null"],"description":"(External orders only) The main street information of the billing address, including the street name and number."},"billing_address_street_two":{"type":["string","null"],"description":"(External orders only) Additional street information of the billing address, like entrance information and apartment numbers."},"billing_address_city":{"type":["string","null"],"description":"(External orders only) The city of the billing address."},"billing_address_region":{"type":["string","null"],"description":"(External orders only) The region of the billing address, like state or province."},"billing_address_country":{"type":["string","null"],"description":"(External orders only) The billing address country."},"billing_address_postal_code":{"type":["string","null"],"description":"(External orders only) Billing address postal (ZIP) code."},"activated_at":{"type":["string","null"],"format":"date-time","description":"(External subscription orders only) Date the subscription was activated."},"canceled_at":{"type":["string","null"],"format":"date-time","description":"(External subscription orders only) Date the order was canceled."},"canceled_by":{"type":["string","null"],"description":"(External subscription orders only) Who canceled the order."},"cancel_reason":{"type":["string","null"],"description":"(External subscription orders only) The reason code for the cancelation.\nExternal orders accept the same cancelation reasons as Stripe:\n`customer_service`, `low_quality`, `missing_features`, `other`, `switched_service`, `too_complex`, `too_expensive`, `unused`\n"},"cancel_description":{"type":["string","null"],"description":"(External subscription orders only) A free-text description of the cancellation reason."},"churned_at":{"type":["string","null"],"format":"date-time","description":"(External subscription orders only) Date the subscription churned."},"next_charge_at":{"type":["string","null"],"format":"date-time","description":"(External subscription orders only) Date of the next scheduled charge."}},"example":{"order":{"notes":"Leave package at the front desk","billing_status":"paid","service_status":"completed","external_id":"ext-order-12345","shipping_address_first_name":"Jane","shipping_address_last_name":"Doe","shipping_address_city":"Eagle","shipping_address_region":"ID","shipping_address_country":"US","shipping_address_postal_code":"83616"}}},"OrderParametersCancel":{"type":"object","title":"Cancel Order","description":"Parameters for `POST /orders/{id}/cancel`. All fields are optional — a bare POST (or\n`{\"order\": {}}`) cancels the subscription order with defaults.\n\nThis routes the cancelation through ClickFunnels' own cancel path (the same path the\nin-app \"Cancel subscription\" flow uses) so it propagates to the payment processor\n(Payments AI/Rebilly or Stripe). A direct `PATCH` of `service_status` to `canceled` is a\nno-op for processor-managed orders, which is why this action exists. Only Payments AI\nand Stripe subscription orders can be canceled this way; calling it on a one-time order\nor an external subscription returns a 422.\n","required":[],"properties":{"cancel_reason":{"type":"string","description":"The reason _code_ for the cancelation. Defaults to `other`. Valid values are\nprocessor-specific; a value that isn't accepted for the order's processor returns a 422.\n\nStripe orders accept:\n`customer_service`, `low_quality`, `missing_features`, `other`, `switched_service`, `too_complex`, `too_expensive`, `unused`\n\nPayments AI (Rebilly) orders accept:\n`did-not-use`, `did-not-want`, `missing-features`, `too-expensive`, `bugs-or-problems`, `other`\n"},"cancel_description":{"type":["string","null"],"description":"A free-text description of the cancellation reason."},"effective_date":{"type":"string","description":"When the cancelation takes effect. Defaults to `next_renewal`.\n- `next_renewal`: cancels at the end of the current paid period. Access is retained until `paid_until`.\n- Any other value: cancels immediately.\n\nSee [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\nhow the period-end and immediate cancels differ and which fields settle later.\n"},"cancelation_proration":{"type":"boolean","description":"Whether to prorate the cancelation. Defaults to `false`."},"canceled_by":{"type":"string","description":"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":{"type":"array","items":{"type":"integer"},"description":"IDs of invoices to void as part of the cancelation."}},"example":{"order":{"cancel_reason":"too_expensive","cancel_description":"Switching to a cheaper plan","effective_date":"next_renewal","cancelation_proration":false,"canceled_by":"API","voidable_invoices":[]}}},"OrdersAppliedTagAttributes":{"type":"object","title":"Orders Applied Tags","description":"Orders Applied Tags","properties":{"id":{"type":"integer","description":"Applied Tag ID"},"public_id":{"type":["string","null"],"description":"Applied Tag public ID"},"order_id":{"type":"integer","description":"Order ID"},"tag_id":{"type":"integer","description":"Tag ID"},"created_at":{"type":["string","null"],"format":"date-time","description":"Date added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Last updated"}},"example":{"id":1,"public_id":"UZzNVm","order_id":3,"tag_id":4,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","id","order_id","public_id","tag_id","updated_at"]},"OrdersAppliedTagParameters":{"type":"object","title":"Orders Applied Tags","description":"Orders Applied Tags","required":["tag_id"],"properties":{"tag_id":{"type":"integer","description":"Tag ID"}},"example":{"orders_applied_tag":{"tag_id":4}}},"OrdersAppliedTagParametersUpdate":{"type":"object","title":"Orders Applied Tags","description":"Orders Applied Tags","required":["tag_id"],"properties":{"tag_id":{"type":"integer","description":"Tag ID"}},"example":{"orders_applied_tag":{"tag_id":4}}},"ProductsPriceMinimal":{"type":"object","title":"Products Price (Minimal)","description":"Minimal price representation used wherever a price appears as a nested\nattribute (line items, upgrade/downgrade discovery).\n","properties":{"id":{"type":"integer"},"public_id":{"type":["string","null"]},"name":{"type":["string","null"]},"key":{"type":["string","null"]},"amount":{"type":["string","null"]},"currency":{"type":["string","null"]},"duration":{"type":["integer","null"]},"interval":{"type":["string","null"]},"interval_count":{"type":["integer","null"]}},"example":{"id":24,"public_id":"aBcDeF","name":"Pro Monthly","key":"pro_monthly_2024","amount":"20.00","currency":"USD","duration":null,"interval":"months","interval_count":1}},"ProductsPricesChangeOptionsVariantGroup":{"type":"object","title":"Variant Group of Upgrade/Downgrade Prices","description":"A target variant and the prices on that variant the source price may switch to.\nMultiple prices can share the same target variant when the underlying\nupgrade/downgrade configuration allows several billing options on the new variant.\n","properties":{"products_variant":{"type":"object","properties":{"id":{"type":"integer"},"public_id":{"type":["string","null"]},"name":{"type":["string","null"]},"product_id":{"type":["integer","null"]},"prices":{"type":"array","items":{"$ref":"#/components/schemas/ProductsPriceMinimal"}}}}},"example":{"products_variant":{"id":124,"public_id":"k7xQzR","name":"Pro","product_id":88,"prices":[{"id":456,"public_id":"aBcDeF","name":"Pro Monthly","key":"pro_monthly_2024","amount":"20.00","currency":"USD","duration":null,"interval":"months","interval_count":1},{"id":457,"public_id":"gHiJkL","name":"Pro Annual","key":"pro_annual_2024","amount":"200.00","currency":"USD","duration":null,"interval":"years","interval_count":1}]}}},"ProductsPricesChangeOptionsResponse":{"type":"object","title":"Price Change Options","description":"Allowed upgrade and downgrade target variants for a source price.\nEach group lists a target variant alongside the prices on that variant\na subscription using this source price may switch to.\n","properties":{"products_prices_change_options":{"type":"object","properties":{"upgrade":{"type":"array","items":{"$ref":"#/components/schemas/ProductsPricesChangeOptionsVariantGroup"}},"downgrade":{"type":"array","items":{"$ref":"#/components/schemas/ProductsPricesChangeOptionsVariantGroup"}}}}},"example":{"products_prices_change_options":{"upgrade":[{"products_variant":{"id":124,"public_id":"k7xQzR","name":"Pro","product_id":88,"prices":[{"id":456,"public_id":"aBcDeF","name":"Pro Monthly","key":"pro_monthly_2024","amount":"20.00","currency":"USD","duration":null,"interval":"months","interval_count":1},{"id":457,"public_id":"gHiJkL","name":"Pro Annual","key":"pro_annual_2024","amount":"200.00","currency":"USD","duration":null,"interval":"years","interval_count":1}]}}],"downgrade":[{"products_variant":{"id":125,"public_id":"m2qYpA","name":"Basic","product_id":88,"prices":[{"id":789,"public_id":"sTuVwX","name":"Basic Monthly","key":"basic_monthly_2024","amount":"5.00","currency":"USD","duration":null,"interval":"months","interval_count":1}]}}]}}},"OrdersLineItemsChangeRequest":{"type":"object","title":"Line Item Change Request","description":"Parameters to preview or commit a subscription line item variant/price change","required":["orders_line_items_change"],"properties":{"orders_line_items_change":{"type":"object","required":["products_price_id"],"properties":{"products_price_id":{"oneOf":[{"type":"integer"},{"type":"string"}],"description":"Target price. Accepts either the integer database id or the obfuscated\n`public_id` string returned by the discovery endpoint. The target variant is\nderived from the price's `variant` association.\n"},"prorate":{"type":["boolean","null"],"description":"Optional override for proration. Accepts `true`, `false`, `\"true\"`, `\"false\"`,\n`\"1\"`, `\"0\"`, `1`, or `0`. When omitted, the in-app default is used:\nupgrades are prorated and applied immediately; downgrades are not prorated and\ntake effect at the end of the current billing cycle. Forced to `false` for\nphysical line items regardless of the value sent. Any other value returns 422.\n"},"effective_time":{"type":["string","null"],"enum":["now","next_renewal",null],"description":"Optional override for when the change takes effect. When omitted (or `null`,\nor an empty string), the in-app default is used: upgrades take effect now,\ndowngrades at the next renewal. Any other value (e.g. `end_of_period` or a\nliteral timestamp) returns 422.\n"}}}},"example":{"orders_line_items_change":{"products_price_id":24,"prorate":true,"effective_time":"now"}}},"OrdersLineItemsChangeResponse":{"type":"object","title":"Line Item Change","description":"Result of a subscription line item variant/price change. The same envelope is returned\nfor both preview and commit endpoints — the `preview` flag indicates which.\n\n`upcoming_invoice` is a snapshot of the upcoming-invoice impact of the change as quoted\nby the upstream payment platform. It is **informational** — the line item is mutated\nregardless of whether the quote succeeds. On commit, the quote is snapshotted just\nbefore the change is applied so consumers don't need a separate preview round-trip\nto know what their customer will be charged. Individual amount fields may be `null`\nif the upstream quote returned no data; `currency` and `next_invoice_date` fall back\nto the order's stored currency and renewal date in that case.\n","properties":{"orders_line_items_change":{"type":"object","properties":{"preview":{"type":"boolean","description":"`true` for the preview endpoint, `false` for the commit endpoint. The remainder\nof the envelope is shaped identically; the flag lets clients render the same UI\nor write the same parsing code for both calls.\n"},"upcoming_invoice":{"type":"object","description":"Snapshot of the upcoming-invoice impact of the change as quoted by the upstream\npayment platform. Populated on both preview and commit (commit snapshots a quote\ninside the change transaction so the response carries the same fields as preview).\nInformational only — the line item change is committed regardless of whether the\nquote succeeds.\n","properties":{"total_amount":{"type":["string","null"],"description":"Upcoming invoice total quoted by the payment platform. `null` if the quote returned no data."},"subtotal_amount":{"type":["string","null"],"description":"Upcoming invoice subtotal quoted by the payment platform. `null` if the quote returned no data."},"tax_amount":{"type":["string","null"],"description":"Upcoming invoice tax quoted by the payment platform. `null` if the quote returned no data."},"shipping_amount":{"type":["string","null"],"description":"Upcoming invoice shipping quoted by the payment platform. `null` if the quote returned no data."},"discount_amount":{"type":["string","null"],"description":"Upcoming invoice discount quoted by the payment platform. `null` if the quote returned no data."},"currency":{"type":["string","null"],"description":"Currency of the upcoming invoice quote. Falls back to the order's stored\ncurrency if the quote returned no data.\n"},"next_invoice_date":{"type":["string","null"],"format":"date-time","description":"Upcoming invoice date as quoted by the payment platform. Falls back to the\norder's stored renewal date if the quote returned no data.\n"}}},"previous_line_item":{"allOf":[{"$ref":"#/components/schemas/OrdersLineItemAttributes"}],"description":"The line item as it was before the change — same `id` as the current line item,\nbut with `products_price` and `products_variant` reflecting the pre-change\ntarget.\n"},"new_line_item":{"allOf":[{"$ref":"#/components/schemas/OrdersLineItemAttributes"}],"description":"The line item as it would be after the change (preview) or as it now is after\nthe change (commit) — same `id` as the current line item, with `products_price`\nand `products_variant` reflecting the target.\n"}}}},"example":{"orders_line_items_change":{"preview":true,"upcoming_invoice":{"total_amount":"35.83","subtotal_amount":"35.83","tax_amount":"0.00","shipping_amount":"0.00","discount_amount":"0.00","currency":"USD","next_invoice_date":"2026-05-14T03:49:45Z"},"previous_line_item":{"id":9,"public_id":"yZaBcD","order_id":7,"quantity":1,"prorated":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","original_product":{"id":15,"public_id":"AbC123","name":"Sample Product"},"products_price":{"id":24,"public_id":"aBcDeF","name":"Pro Monthly","key":"pro_monthly_2024","amount":"20.00","currency":"USD","duration":null,"interval":"months","interval_count":1},"products_variant":null},"new_line_item":{"id":9,"public_id":"yZaBcD","order_id":7,"quantity":1,"prorated":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","original_product":{"id":15,"public_id":"AbC123","name":"Sample Product"},"products_price":{"id":24,"public_id":"aBcDeF","name":"Pro Monthly","key":"pro_monthly_2024","amount":"20.00","currency":"USD","duration":null,"interval":"months","interval_count":1},"products_variant":null}}}},"OrdersInvoiceAttributes":{"type":"object","title":"Invoices","description":"Invoices","properties":{"id":{"type":"integer","description":"Invoice ID"},"public_id":{"type":"string","description":"Invoice public ID"},"order_id":{"type":"integer","description":"Order ID"},"status":{"type":"string","description":"The billing status reflects the status of the invoice's payment.\nBilling status can be one of the following for Payments AI orders: `draft`, `paid`, `unpaid`, `partially-refunded`, `refunded`, `voided`, `disputed`, `past-due`.\n\nExternal invoice statuses of external one-time orders can be one of the following: `unpaid`, `paid`, `voided` and `refunded`, `disputed`, `past-due`.\nA change in status will update the `billing_status` of the parent order. If the status of a one-time order is changed to `paid`, the order's `service_status` will also be flipped to `completed`.\n"},"due_amount":{"type":["string","null"],"description":"Due Amount"},"total_amount":{"type":["string","null"],"description":"Total Amt"},"subtotal_amount":{"type":["string","null"],"description":"Subtotal Amount"},"tax_amount":{"type":["string","null"],"description":"Tax Amount"},"shipping_amount":{"type":["string","null"],"description":"Invoiced shipping amount. Cannot be negative."},"discount_amount":{"type":["string","null"],"description":"Discount Amount"},"currency":{"type":["string","null"],"description":"Currency"},"issued_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice was issued.\n"},"due_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice is due."},"paid_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice was paid."},"invoice_type":{"type":["string","null"],"enum":["initial","renewal","interim","cancellation","one_time","refund","charge","one_time_sale",null],"description":"Invoice Type"},"invoice_number":{"type":"string","description":"The number of the invoice. Usually, this is a sequential number in a certain format to be used for bookkeeping purposes."},"fulfillment_status":{"type":["string","null"],"description":"The fulfillment status of the invoice.\nThis can be one of:\n - `not_applicable` - the invoice is not eligible for fulfillment\n - `unfulfilled` - the entire invoice needs to be fulfilled\n - `partial` - some items have been fulfilled, but some are pending or restocked\n - `complete` - all items are fulfilled\n"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"external_id":{"type":["string","null"],"description":"External ID"},"payment_processor":{"type":["string","null"],"description":"The payment processor of the invoice's order. Currently, it can be one of `payments_ai` and `external`."},"eligible_for_fulfillment":{"type":["boolean","null"],"description":"Invoice has been paid so is eligible for fulfillment (does not indicate if the invoice has any fulfillable items)"},"line_items":{"type":"array","items":{"$ref":"#/components/schemas/OrdersInvoicesLineItemAttributes"},"description":"Invoice Line Items"},"order":{"$ref":"#/components/schemas/OrderBaseAttributes"},"visits":{"allOf":[{"$ref":"#/components/schemas/OrderVisitsAttributes"}],"description":"Visit tracking information from the parent order. Contains last_visit and last_visit_with_utm (but not first_visit, which belongs to the contact)."}},"example":{"id":838,"public_id":"WNrMnJ","order_id":22642,"status":"paid","due_amount":"13.00","total_amount":"13.00","subtotal_amount":"3.00","tax_amount":"0.00","shipping_amount":"10.00","discount_amount":"0.00","currency":"USD","issued_at":"2023-10-01T12:43:55.000Z","due_at":"2023-10-15T00:00:00.000Z","paid_at":"2025-10-10T08:04:02.000Z","invoice_type":"one_time_sale","invoice_number":"3","fulfillment_status":"not_applicable","created_at":"2026-01-10T20:16:16.536Z","updated_at":"2026-01-10T20:16:16.536Z","external_id":"tffv2w34qv","payment_processor":"external","eligible_for_fulfillment":true,"line_items":[{"id":682,"public_id":"RegpVj","invoice_id":838,"external_id":null,"payment_type":null,"description":null,"quantity":1,"fulfillment_status":"unfulfilled","external_product_id":null,"discount_amount":"0.0","state_tax_amount":"0.0","county_tax_amount":"0.0","city_tax_amount":"0.0","district_tax_amount":"0.0","state_tax_rate":"0.0","county_tax_rate":"0.0","city_tax_rate":"0.0","district_tax_rate":"0.0","country_tax_jurisdiction":null,"state_tax_jurisdiction":null,"county_tax_jurisdiction":null,"city_tax_jurisdiction":null,"period_start_at":null,"period_end_at":null,"period_number":null,"created_at":"2026-01-10T20:16:16.538Z","updated_at":"2026-01-10T20:16:16.538Z","amount":"3.00","products_price":{"id":22229,"public_id":"YqEWxY","amount":"198.00","currency":"usd","duration":null,"interval":null,"interval_count":null},"products_variant":{"id":22228,"public_id":"JdknyN","product_id":6512,"name":"Seinfeld In Your Pocket - Comedy Joke Machine (Black Premium)","description":null,"sku":"SIYP-BLACK-PREMIUM-001","fulfillment_required":false}}],"order":{"id":22642,"public_id":"JmRRyN","order_number":"#2146","total_amount":"396.00","origination_channel_id":11,"origination_channel_type":"Platform::Application","notes":"For Fulfillment","live_mode":true,"in_trial":false,"billing_status":"paid","service_status":"completed","order_type":"one-time-order","next_charge_at":null,"trial_end_at":null,"tag_ids":[],"activated_at":null,"canceled_at":null,"canceled_by":null,"cancel_reason":null,"cancel_description":null,"churned_at":null,"shipping_address_first_name":"Caroll","shipping_address_last_name":"Kirlin","shipping_address_organization_name":"Testing, Inc.","shipping_address_phone_number":"+19053871234","shipping_address_street_one":"3443 W Bavaria St","shipping_address_street_two":"","shipping_address_city":"Eagle","shipping_address_region":"ID","shipping_address_country":"US","shipping_address_postal_code":"83616","billing_address_street_one":"3443 W Bavaria St","billing_address_street_two":"","billing_address_city":"Eagle","billing_address_region":"ID","billing_address_country":"US","billing_address_postal_code":"83616","recurring_invoices_paid_count":1,"origination_channel_name":"Default API Client","origination_channel_public_id":"vNWWMb","contact":{"id":24359,"public_id":"vQxYMj","workspace_id":4,"anonymous":0,"email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199","time_zone":"Madrid","uuid":"80b7f903-76cd-4edf-94bf-fc34c13ee654","unsubscribed_at":null,"last_notification_email_sent_at":null,"email_suppression_reason":null,"is_active":true,"fb_url":null,"twitter_url":null,"instagram_url":null,"linkedin_url":null,"website_url":null,"created_at":"2026-01-09T15:27:56.647Z","updated_at":"2026-01-09T15:28:08.075Z","tags":[],"custom_attributes":{},"visits":{"first_visit":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"},"last_visit":null,"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}}},"affiliate":null,"referral_code":null,"order_page":null},"visits":{"last_visit":{"uuid":"7a3f9c11-2d45-4e23-88d2-1bef9acd44fa","utm_source":null,"utm_medium":null,"utm_campaign":null,"utm_term":null,"utm_content":null,"ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.clickfunnels.com/products","referring_domain":"clickfunnels.com","landing_page":"https://example.com/checkout","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-10T20:10:15.234Z","created_at":"2026-01-10T20:10:15.234Z","updated_at":"2026-01-10T20:10:15.234Z"},"last_visit_with_utm":{"uuid":"9f2e8a22-1b65-4414-95f3-5caf0bbd11da","utm_source":"google","utm_medium":"cpc","utm_campaign":"spring_sale","utm_term":"running shoes","utm_content":"ad_variant_a","ip":"192.168.1.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36","referrer":"https://www.google.com/search?q=example","referring_domain":"google.com","landing_page":"https://example.com/products/shoes","browser":"Chrome","os":"Mac OS X","device_type":"desktop","started_at":"2026-01-09T14:23:45.123Z","created_at":"2026-01-09T14:23:45.123Z","updated_at":"2026-01-09T14:23:45.123Z"}}},"required":["created_at","currency","discount_amount","due_amount","due_at","eligible_for_fulfillment","external_id","fulfillment_status","id","invoice_number","invoice_type","issued_at","line_items","order","order_id","paid_at","payment_processor","public_id","shipping_amount","status","subtotal_amount","tax_amount","total_amount","updated_at","visits"]},"OrdersInvoiceParameters":{"type":"object","title":"External Invoice","description":"Parameters for creating an external invoice. Only external orders support invoice creation via the API.\nExternal orders are orders where payments are processed outside of ClickFunnels.\n","required":["external_id","status"],"properties":{"external_id":{"type":"string","description":"Required. A unique identifier for this invoice in your external system.\nThis ID allows you to correlate ClickFunnels invoices with records in your payment processor.\n"},"status":{"type":"string","description":"Required. The billing status of the invoice.\n\nFor external one-time orders, valid statuses are: `unpaid`, `paid`, `voided`, `refunded`, `disputed`, `past-due`.\nFor external subscription orders, the same statuses apply.\n\nWhen creating an invoice with status `paid`, you must also provide `paid_at`.\nA change in status will update the `billing_status` of the parent order.\nIf a one-time order's invoice status is changed to `paid`, the order's `service_status` will also flip to `completed`.\n","enum":["unpaid","paid","voided","refunded","disputed","past-due"]},"invoice_type":{"type":"string","description":"The type of invoice. If not provided, defaults based on the order type:\n- For one-time orders: `one_time_sale`\n- For subscription orders: `initial`\n\nFor subscription orders, valid types are: `initial`, `renewal`, `interim`, `cancellation`, `one_time`, `refund`, `charge`.\nFor one-time orders, only `one_time_sale` is valid.\n","enum":["initial","renewal","interim","cancellation","one_time","refund","charge","one_time_sale"]},"invoice_number":{"type":["string","null"],"description":"Optional. A sequential number for bookkeeping purposes.\nIf not provided, one will be auto-generated.\n"},"shipping_amount":{"type":["string","null"],"description":"Invoiced shipping amount. Cannot be negative. Defaults to \"0.00\"."},"issued_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice was issued."},"due_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice is due."},"paid_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice was paid. Required when `status` is `paid`.\n"},"line_items_attributes":{"type":"array","description":"Line items for the invoice. Each line item represents a product/variant being invoiced.\nRequired fields for each line item: `amount`, `quantity`, `variant_id`, `products_price_id`.\n","items":{"type":"object","required":["amount","quantity","variant_id","products_price_id"],"properties":{"amount":{"type":"string","description":"The price amount for this line item."},"quantity":{"type":"integer","description":"The quantity of items."},"variant_id":{"type":"integer","description":"The product variant ID."},"products_price_id":{"type":"integer","description":"The product price ID."},"description":{"type":["string","null"],"description":"Optional description for the line item."}}}}},"example":{"orders_invoice":{"external_id":"inv-ext-12345","status":"paid","invoice_type":"one_time_sale","invoice_number":"INV-001","shipping_amount":"9.99","issued_at":"2025-01-01T00:00:00.000Z","due_at":"2025-01-15T00:00:00.000Z","paid_at":"2025-01-10T00:00:00.000Z","line_items_attributes":[{"amount":"99.00","quantity":1,"variant_id":123,"products_price_id":456,"description":"Premium Widget"}]}}},"OrdersInvoiceParametersUpdate":{"type":"object","title":"External Invoice Update","description":"Parameters for updating an external invoice. Only external orders support invoice updates via the API.\nNote: The `invoice_type` cannot be changed after creation. New line items cannot be added during update;\nonly existing line items can be modified by providing their `id`.\n","properties":{"status":{"type":"string","description":"The billing status of the invoice.\n\nFor external orders, valid statuses are: `unpaid`, `paid`, `voided`, `refunded`, `disputed`, `past-due`.\n\nWhen changing status to `paid`, you must also provide `paid_at`.\nA change in status will update the `billing_status` of the parent order.\nIf a one-time order's invoice status is changed to `paid`, the order's `service_status` will also flip to `completed`.\n","enum":["unpaid","paid","voided","refunded","disputed","past-due"]},"external_id":{"type":"string","description":"The unique identifier for this invoice in your external system.\nThis ID allows you to correlate ClickFunnels invoices with records in your payment processor.\n"},"invoice_number":{"type":["string","null"],"description":"A sequential number for bookkeeping purposes.\n"},"shipping_amount":{"type":["string","null"],"description":"Invoiced shipping amount. Cannot be negative."},"issued_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice was issued."},"due_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice is due."},"paid_at":{"type":["string","null"],"format":"date-time","description":"The date the invoice was paid. Required when changing `status` to `paid`.\n"},"line_items_attributes":{"type":"array","description":"Update existing line items. Only line items with an `id` will be processed;\nnew line items (without `id`) are ignored during updates.\n","items":{"type":"object","required":["id"],"properties":{"id":{"type":"integer","description":"Required. The ID of the existing line item to update.\nLine items without an ID are ignored during updates.\n"},"amount":{"type":"string","description":"The price amount for this line item."},"quantity":{"type":"integer","description":"The quantity of items."},"description":{"type":["string","null"],"description":"Optional description for the line item."}}}}},"example":{"orders_invoice":{"status":"paid","paid_at":"2025-01-10T00:00:00.000Z","line_items_attributes":[{"id":682,"amount":"99.00","quantity":2}]}}},"OrdersInvoicesLineItemAttributes":{"type":"object","title":"Line items","description":"Line items","properties":{"id":{"type":"integer","description":"Line item ID"},"public_id":{"type":"string","description":"ClickFunnels line item public ID"},"invoice_id":{"type":"integer","description":"Invoice ID"},"external_id":{"type":"string","description":"External"},"payment_type":{"type":["string","null"],"description":"Payment Type"},"description":{"type":["string","null"],"description":"Description"},"quantity":{"type":["integer","null"],"description":"Quantity"},"fulfillment_status":{"type":["string","null"],"enum":["unfulfilled","partially_fulfilled","complete","ignored",null],"description":"Represents the current fulfillment status of the line item.\nThis can be one of the following:\n - `unfulfilled` - the line item has not been fully fulfilled (fulfilled quantity is 0)\n - `partially_fulfilled` - the line item is partially fulfilled (fulfilled quantity is less than line item quantity)\n - `complete` - the line item is completely fulfilled (fulfilled quantity is equal to line item quantity)\n - `ignored` - the line item is marked as ignored for fulfillment\n"},"external_product_id":{"type":["string","null"],"description":"External Product"},"discount_amount":{"type":["number","null"],"description":"Discount Amount"},"state_tax_amount":{"type":["number","null"],"description":"State Tax Amount"},"county_tax_amount":{"type":["number","null"],"description":"County Tax Amount"},"city_tax_amount":{"type":["number","null"],"description":"City Tax Amount"},"district_tax_amount":{"type":["number","null"],"description":"District Tax Amount"},"state_tax_rate":{"type":["number","null"],"description":"State Tax Rate"},"county_tax_rate":{"type":["number","null"],"description":"County Tax Rate"},"city_tax_rate":{"type":["number","null"],"description":"City Tax Rate"},"district_tax_rate":{"type":["number","null"],"description":"District Tax Rate"},"country_tax_jurisdiction":{"type":["string","null"],"description":"Country Tax Jurisdiction"},"state_tax_jurisdiction":{"type":["string","null"],"description":"State Tax Jurisdiction"},"county_tax_jurisdiction":{"type":["string","null"],"description":"County Tax Jurisdiction"},"city_tax_jurisdiction":{"type":["string","null"],"description":"City Tax Jurisdiction"},"period_start_at":{"type":["string","null"],"description":"Period Start At"},"period_end_at":{"type":["string","null"],"description":"Period End At"},"period_number":{"type":["string","null"],"description":"Period Number"},"created_at":{"type":["string","null"],"description":"Added"},"updated_at":{"type":["string","null"],"description":"Updated"},"amount":{"type":["string","null"],"description":"Amount"},"products_price":{"type":["object","null"],"title":"Product Price","description":"Product Price","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":"string","description":"Price public ID"},"amount":{"type":"string","description":"Amount"},"currency":{"type":"string","description":"Currency"},"duration":{"type":"string","description":"Duration"},"interval":{"type":"string","description":"Interval"},"interval_count":{"type":"string","description":"Interval count"}}},"products_variant":{"type":["object","null"],"title":"Product Variant","description":"Product Variant","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":"string","description":"Variant public ID"},"product_id":{"type":"integer","description":"Product ID"},"name":{"type":"string","description":"Name"},"description":{"type":["string","null"],"description":"The description of the variant. The description of the **default variant** is the user-facing description of the `Product`."},"sku":{"type":["string","null"],"description":"SKU"},"fulfillment_required":{"type":["boolean","null"],"description":"Fulfillment required"}}}},"example":{"id":682,"public_id":"RegpVj","invoice_id":838,"external_id":null,"payment_type":null,"description":null,"quantity":1,"fulfillment_status":"unfulfilled","external_product_id":null,"discount_amount":"0.0","state_tax_amount":"0.0","county_tax_amount":"0.0","city_tax_amount":"0.0","district_tax_amount":"0.0","state_tax_rate":"0.0","county_tax_rate":"0.0","city_tax_rate":"0.0","district_tax_rate":"0.0","country_tax_jurisdiction":null,"state_tax_jurisdiction":null,"county_tax_jurisdiction":null,"city_tax_jurisdiction":null,"period_start_at":null,"period_end_at":null,"period_number":null,"created_at":"2026-01-10T20:16:16.538Z","updated_at":"2026-01-10T20:16:16.538Z","amount":"3.00","products_price":{"id":22229,"public_id":"YqEWxY","amount":"198.00","currency":"usd","duration":null,"interval":null,"interval_count":null},"products_variant":{"id":22228,"public_id":"JdknyN","product_id":6512,"name":"Seinfeld In Your Pocket - Comedy Joke Machine (Black Premium)","description":null,"sku":"SIYP-BLACK-PREMIUM-001","fulfillment_required":false}},"required":["amount","city_tax_amount","city_tax_jurisdiction","city_tax_rate","country_tax_jurisdiction","county_tax_amount","county_tax_jurisdiction","county_tax_rate","created_at","description","discount_amount","district_tax_amount","district_tax_rate","external_id","external_product_id","fulfillment_status","id","invoice_id","payment_type","period_end_at","period_number","period_start_at","products_price","products_variant","public_id","quantity","state_tax_amount","state_tax_jurisdiction","state_tax_rate","updated_at"]},"OrdersTransactionAttributes":{"type":"object","title":"Payments","description":"Payments","properties":{"id":{"type":"integer","description":"Transaction ID"},"public_id":{"type":["string","null"],"description":"Transaction public ID"},"order_id":{"type":"integer","description":"Order ID"},"status":{"type":"string","description":"Status"},"external_type":{"type":["string","null"],"description":"Type"},"external_id":{"type":"string","description":"External ID"},"amount":{"type":["string","null"],"description":"Amount"},"currency":{"type":["string","null"],"description":"Currency"},"reason":{"type":["string","null"],"description":"Reason"},"adjusted_transaction_id":{"type":["string","null"],"description":"Adjusted transaction"},"result":{"type":"string","description":"Result"},"billing_payment_instruction_id":{"type":["string","null"],"description":"Billing Payment Instruction ID"},"billing_payment_instruction_type":{"type":["string","null"],"description":"Billing Payment Instruction Type"},"arn":{"type":["string","null"],"description":"ARN"},"is_rebill":{"type":["boolean","null"],"description":"Is Rebill"},"rebill_number":{"type":["string","null"],"description":"Rebill Number"},"created_at":{"type":["string","null"],"description":"Created"},"updated_at":{"type":["string","null"],"description":"Updated"}},"example":{"id":1,"public_id":"NpboZw","order_id":6,"status":"completed","external_type":"sale","external_id":"4a74b081c7ff7d8d7332e54d7d2a89df","amount":"100.00","currency":"USD","reason":null,"adjusted_transaction_id":null,"result":"approved","billing_payment_instruction_id":null,"billing_payment_instruction_type":null,"arn":null,"is_rebill":false,"rebill_number":null,"created_at":null,"updated_at":null},"required":["adjusted_transaction_id","amount","arn","billing_payment_instruction_id","billing_payment_instruction_type","created_at","currency","external_id","external_type","id","is_rebill","order_id","public_id","reason","rebill_number","result","status","updated_at"]},"OrdersTransactionParametersRefund":{"type":"object","title":"Refund Transaction","description":"Parameters for `POST /orders/transactions/{id}/refund`. Every field is optional - a bare POST\n(or `{\"orders_transaction\": {}}`) refunds the addressed charge with defaults.\n\nThe refund is always for the charge's full outstanding amount, so there is no amount to send.\nPartial refunds are deliberately not offered here: they are a human-gated exception, handled in\nthe ClickFunnels admin.","required":[],"properties":{"reason":{"type":"string","description":"Defaults to `requested_by_customer`.\n\nStripe orders accept only `duplicate`, `fraudulent`, or `requested_by_customer`; any other\nvalue returns 422 listing the accepted set. Payments AI (Rebilly) orders treat this as a\nfree-text description that is recorded on the refund and the order timeline."},"partial":{"type":"boolean","description":"Must be `false` or omitted. Sending `true` returns 422 rather than silently refunding the\nfull charge. An `amount` field is rejected the same way - honoring it would be a partial\nrefund, and ignoring it would refund more than you asked for."}},"example":{"reason":"requested_by_customer"}},"OrdersTagAttributes":{"type":"object","title":"Order Tags","description":"Order Tags","properties":{"id":{"type":"integer","description":"Tag ID"},"public_id":{"type":["string","null"],"description":"Tag public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Name"},"color":{"type":"string","description":"Color"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":8,"public_id":"VsGNrO","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["color","created_at","id","name","public_id","updated_at","workspace_id"]},"OrdersTagParameters":{"type":"object","title":"Order Tags","description":"Order Tags","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"color":{"type":"string","description":"Tag Color"}},"example":{"orders_tag":{"name":"Example Tag","color":"#FF5733"}}},"OrdersTagParametersUpdate":{"type":"object","title":"Order Tags","description":"Order Tags","required":[],"properties":{"name":{"type":"string","description":"Tag Name"},"color":{"type":"string","description":"Tag Color"}},"example":{"orders_tag":{"name":"renamed-tag","color":"#FF5733"}}},"OrdersLineItemAttributes":{"type":"object","title":"Line items","description":"Line items","properties":{"id":{"type":"integer","description":"Line item ID"},"public_id":{"type":["string","null"],"description":"Line item public ID"},"order_id":{"type":"integer","description":"Order ID"},"quantity":{"type":["integer","null"],"description":"Quantity"},"prorated":{"type":["string","null"],"description":"Prorate invoice"},"created_at":{"type":["string","null"],"description":"Added"},"updated_at":{"type":["string","null"],"description":"Updated"},"original_product":{"type":"object","title":"Product","description":"Product","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Product public ID"},"name":{"type":"string","description":"Product name"}}},"products_price":{"$ref":"#/components/schemas/ProductsPriceMinimal"},"products_variant":{"type":["object","null"],"title":"Product Variant","description":"Product Variant","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Variant public ID"},"name":{"type":"string","description":"Name"},"description":{"type":["string","null"],"description":"The description of the variant. The description of the **default variant** is the user-facing description of the `Product`."},"sku":{"type":["string","null"],"description":"SKU"}}}},"example":{"id":674,"public_id":"GjPVnN","order_id":22642,"quantity":2,"prorated":null,"created_at":"2026-01-10T20:15:01.536Z","updated_at":"2026-01-10T20:15:01.536Z","original_product":{"id":6512,"public_id":"YRnzRY","name":"Seinfeld In Your Pocket - Comedy Joke Machine (Black Premium)"},"products_price":{"id":22229,"public_id":"YqEWxY","name":"Seinfeld In Your Pocket - Comedy Joke Machine (Black Premium)","key":null,"amount":"198.00","currency":"usd","duration":null,"interval":null,"interval_count":null},"products_variant":{"id":22228,"public_id":"JdknyN","name":"Seinfeld In Your Pocket - Comedy Joke Machine (Black Premium)","description":null,"sku":"SIYP-BLACK-PREMIUM-001"}},"required":["created_at","id","order_id","original_product","products_price","products_variant","prorated","public_id","quantity","updated_at"]},"PageAttributes":{"type":"object","title":"Pages","description":"Pages","properties":{"id":{"type":"integer","description":"Page ID"},"public_id":{"type":"string","description":"The public identifier of the page"},"workspace_id":{"type":"integer","description":"Workspace ID that the page belongs to."},"name":{"type":"string","description":"Page name of the editable page element. Want to filter by it? See our help guide on that topic."},"description":{"type":["string","null"],"description":"A short description of the page (max 1000 characters)."},"theme_id":{"type":["integer","null"],"description":"Theme"},"created_at":{"type":"string","format":"date-time","description":"Created at"},"seo_title":{"type":["string","null"],"description":"Custom title for search engine results. Falls back to the site's SEO title if not set."},"seo_description":{"type":["string","null"],"description":"Custom meta description for search engine results. Falls back to the site's SEO description if not set."},"seo_index":{"type":"boolean","description":"Whether search engines should index this page. Defaults to false."},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"type":{"type":["string","null"],"enum":["landing_page","site_page","funnel_page","theme_page",null],"description":"The type of page. Can be one of `landing_page`, `site_page`, `funnel_page` or `theme_page`. May be `null` for a page that matches none of these categories."},"current_path":{"type":["string","null"],"description":"The current URL path for the page resource. This is the canonical URL for landing and site pages. `null` for externally-hosted (SDK) pages. **For funnel pages this is NOT the customer-facing URL** — that's `url` (or `show_page_step.current_path` for the path component). The page-level current_path on a funnel page does not route the visitor through the workflow step, so a `` element on it will not see the step's attached products. See [Setting a page's path (`current_path`)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#setting-a-pages-path-current_path) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md)."},"url":{"type":["string","null"],"description":"The customer-facing URL for the page on the live site. For funnel pages this routes through the workflow step (which feeds `` its IncludedProducts). Always prefer this over `current_path` when constructing links."},"show_page_step":{"type":["object","null"],"description":"The show page step (the workflow step's _function_) associated with this page. The `products` array is the live list of products attached to this step's checkout — main products and order bumps alike, each flagged by its own `bump` field; it is mutated via `show_page_step.product_ids` / `show_page_step.bumps` on page create/update (additive) and `DELETE /api/v2/pages/:id/products` (removal).","properties":{"id":{"type":"integer","description":"The ID of the show page step (function). Pass this as `show_page_step_id` when positioning split-test or conditional-split steps via `/api/v2/funnels/:id/split_test_steps` and `/api/v2/funnels/:id/conditional_split_steps`."},"public_id":{"type":"string","description":"The public identifier of the show page step (function). May be passed as `show_page_step_id` alongside other `public_id` references in your code."},"name":{"type":"string","description":"The name of the step in the funnel. This is the page name that is visible in the funnel builder for a show page step."},"current_path":{"type":["string","null"],"description":"The current URL path for the step in the funnel. This is the path component of the live, customer-facing URL for funnel pages. `null` for externally-hosted (SDK) pages."},"sort_order":{"type":"integer","description":"The zero-based position of this step within the funnel. The first step is 0, the second is 1, and so on. Returned in every page response; pass `sort_order` on create/update to control positioning."},"products":{"type":"array","description":"Products currently attached to this step's checkout, main products and order bumps together in display order. Mutated via `show_page_step.product_ids` (main) and `show_page_step.bumps` (bumps) on page create/update (additive) and `DELETE /api/v2/pages/:id/products` (removal, either kind).","items":{"type":"object","properties":{"id":{"type":"integer","description":"Product ID"},"public_id":{"type":"string","description":"Product public ID"},"name":{"type":"string","description":"Product name"},"bump":{"type":"boolean","description":"Whether this product is attached as an **order bump** (an optional add-on offered next to the main products) rather than a main product. `true` for products served to `` and to the SDK as `bumpProducts`. Set via `show_page_step.bumps` on page create/update."},"bump_preheadline":{"type":["string","null"],"description":"The short line of copy shown above this order bump's offer, when one was set via that bump's `preheadline` in `show_page_step.bumps`. Always `null` for products that are not bumps."}}}}}},"funnel":{"type":["object","null"],"description":"The funnel associated with this page (if the page is part of a funnel)","properties":{"id":{"type":"integer","description":"The unique identifier of the funnel"},"public_id":{"type":"string","description":"The public identifier of the funnel"},"name":{"type":"string","description":"The name of the funnel"}}},"sdk":{"type":["object","null"],"description":"Present for externally-hosted (SDK) pages; `null` for internal pages. Contains the SDK integration token and the external URL where the page is hosted.","properties":{"token":{"type":"string","description":"The SDK page token (prefixed `cfp_`). Embed this in the external page via a `\">` tag and include the SDK script tag to register the page with ClickFunnels. See [The entire public surface](https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md#the-entire-public-surface) in the [Create an External Page Skill](https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md) for the exact tags to paste."},"external_url":{"type":"string","description":"The fully-qualified URL of the externally-hosted page."}}},"head_code":{"type":["string","null"],"description":"**Expandable** Custom HTML/JavaScript code injected into the page head section. Only returned when expand[]=head_code is provided. Note: expanding may add latency, especially on list endpoints. Use sparingly."},"footer_code":{"type":["string","null"],"description":"**Expandable** Custom HTML/JavaScript code injected before the closing body tag. Only returned when expand[]=footer_code is provided. Note: expanding may add latency, especially on list endpoints. Use sparingly."},"custom_css":{"type":["string","null"],"description":"**Expandable** Raw CSS applied at the page level (no