{"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\n### For AI agents\n\nThis document is the catalogue: every operation ClickFunnels exposes over REST is described here, with a unique operationId, typed schemas, and the scopes it needs. It is served from `/openapi.json`, `/openapi.yaml`, `/api/openapi.{json,yaml}`, and `/api/v2/openapi.{json,yaml}` on the accounts host.\n\nThree things it does not describe, each one request away:\n\n- [MCP server](https://agents.myclickfunnels.com/mcp): the app-native Model Context Protocol server (Streamable HTTP, OAuth 2.1 with PKCE). Prefer it over raw REST when your client supports MCP - it describes itself at runtime.\n- [Skill guides](https://accounts.myclickfunnels.com/skill.md), also as an [Agent Skills index](https://accounts.myclickfunnels.com/.well-known/agent-skills/index.json): one task guide per job (pages, blogs, products, orders, workflows, emails, courses, stats, external SDK pages). Read the guide that matches your job before your first write. [llms.txt](https://accounts.myclickfunnels.com/llms.txt) covers when to use ClickFunnels at all, how to get credentials, and how to behave around rate limits.\n- [Protected resource metadata](https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource) (RFC 9728) and [authorization server metadata](https://accounts.myclickfunnels.com/.well-known/oauth-authorization-server) (RFC 8414): the scope vocabulary and the OAuth endpoints. Dynamic client registration is for MCP clients only.\n\nThe OpenAPI specification responses and API authentication failures (401, or 403 for insufficient scope) carry those links in an RFC 8288 `Link` header, so clients can discover the documentation and authentication metadata from those responses.\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":"\u003e Sites represent a workspace's website configuration containing global code settings.\n"},{"name":"Addresses::Country","description":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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 \u0026 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e 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":"\u003e  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":"\u003e  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":"\u003e  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":"\u003e Stores\n"},{"name":"Style","description":"\u003e Styles determine some CSS specifics for a theme.\n"},{"name":"Theme","description":"\u003e 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::Incoming::ExternalPurchaseEndpoint","description":"Endpoints that receive purchases from external commerce providers and turn them into ClickFunnels orders."},{"name":"Webhooks::Incoming::ExternalPurchaseEvent","description":"Raw deliveries received by incoming external purchase endpoints and their processing outcomes."},{"name":"Webhooks::Incoming::ExternalPurchaseProductMapping","description":"Mappings from provider plan or SKU identifiers to ClickFunnels product variants and prices."},{"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","description":"A workspace API key or an OAuth access token, sent as `Authorization: Bearer \u003ctoken\u003e`.\n\nBoth carry the same scope vocabulary as the `OAuth2` scheme below. Category-only\nscopes restrict access to the categories they name. Coarse wildcards remain additive:\n`read contacts:read` reads every category, while `write contacts:read` can write every\ncategory. Omit coarse scopes when restricting access to specific categories.\nLegacy tokens with only coarse scopes retain their existing unrestricted access;\na bare `read` scope alone does not enforce read-only access.\n"},"OAuth2":{"type":"oauth2","description":"OAuth 2.0 authorization code flow for REST integrations. Create a Platform Application\nand follow `https://developers.myclickfunnels.com/docs/oauth-20` to connect users.\nAuthorization server metadata is published at\n`https://accounts.myclickfunnels.com/.well-known/oauth-authorization-server`.\nDynamic client registration at `/oauth/register` is for MCP clients only; MCP-scoped\ntokens must use `https://agents.myclickfunnels.com/mcp`, not the REST API.\n\nScopes are least-privilege by category. Ask for the two coarse wildcards (`read`,\n`write`) only when an integration genuinely needs the whole workspace; otherwise ask\nfor the `\u003ccategory\u003e:read` / `\u003ccategory\u003e:write` pairs you use. `write` implies `read`\nfor the same category. Protected resource metadata (RFC 9728) for this API lives at\n`https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource`.\n","flows":{"authorizationCode":{"authorizationUrl":"https://accounts.myclickfunnels.com/oauth/authorize","tokenUrl":"https://accounts.myclickfunnels.com/oauth/token","refreshUrl":"https://accounts.myclickfunnels.com/oauth/token","scopes":{"read":"Read any resource in the granted workspaces","write":"Read and write any resource in the granted workspaces","contacts:read":"Read Contacts","contacts:write":"Read and write Contacts","workflows:read":"Read Workflows (Automations)","workflows:write":"Read and write Workflows (Automations)","funnels:read":"Read Funnels","funnels:write":"Read and write Funnels","sites:read":"Read Sites \u0026 Design","sites:write":"Read and write Sites \u0026 Design","courses:read":"Read Courses","courses:write":"Read and write Courses","emails:read":"Read Emails","emails:write":"Read and write Emails","blog:read":"Read Blog","blog:write":"Read and write Blog","community:read":"Read Community","community:write":"Read and write Community","appointments:read":"Read Appointments","appointments:write":"Read and write Appointments","opportunities:read":"Read Opportunities","opportunities:write":"Read and write Opportunities","store:read":"Read Store","store:write":"Read and write Store","forms:read":"Read Forms","forms:write":"Read and write Forms","media:read":"Read Media","media:write":"Read and write Media","webhooks:read":"Read Webhooks","webhooks:write":"Read and write Webhooks","account:read":"Read Account","account:write":"Read and write Account","reference:read":"Read Reference Data","reference:write":"Read and write Reference Data"}}}}},"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 \u0026 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 \u0026 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 \u0026 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 \u0026 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 \u0026 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 \u0026 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 `\u003c!-- markup unavailable: page tree could not be serialized --\u003e` 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":"\u003csection\u003e\u003crow cols=\"1\"\u003e\u003ccolumn\u003e\u003cheadline\u003eHello world\u003c/headline\u003e\u003c/column\u003e\u003c/row\u003e\u003c/section\u003e","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"]},"FilterResults":{"type":"object","description":"The records the filter matches, returned inline so selecting a set and reading it is one\ncall instead of a filter plus a paginated crawl.\n\n**Column-oriented.** `fields` states the column order once and `rows` carries bare value\narrays. Repeating every key on every record roughly doubles the payload for a projection\nof a few scalars, which defeats the purpose of asking for a projection. Zip `fields` with\neach row to reconstruct objects.\n\n`truncated` tells you whether `rows` is the whole set. A total `count` is present only\nwhen the request opts in with `results.count: true`, because counting a truncated set\nrequires a second evaluation of the filter. Use the workspace stats endpoint when you\nneed only a number.\n\nSaved contact and order filters support `results`. Other filter classes return 422 until\nthe API defines an explicit projection allow-list for them.\n\n**You set the budget; the response tells you what it cost.** How much a client can absorb\nis not something this API can know, so `results.max_bytes` and `results.limit` are yours to\nset and their defaults (3 KB of rows, 500 rows) are only a conservative starting point. Every\nresponse reports estimated `bytes`, `bytes_per_record` and the `max_bytes` actually applied,\nso one call is enough to size every call after it. These estimates are measured before final\nresponse encoding, which can be slightly larger for values such as timestamps; leave headroom.\nWhen a response is `truncated`,\n`suggested_max_bytes` is the value to retry with to get the whole set in one call\n(extrapolated from the widest row RETURNED SO FAR, so it can still undershoot if later\nrecords are wider - check `truncated` again on the retry), and `guidance` spells\nout the alternatives. The only ceiling you cannot raise is the server's own\n(4 MB of rows per response), which protects the server rather than your context; past it,\npage with `next_after` or narrow the filter.\n\n**`max_bytes` bounds the ROWS, not the whole response.** Over MCP the payload is carried twice\n(structured plus text mirror) alongside the filter definition, which measured at 2.0x-2.9x the\nrows on the wire. So when sizing against a client tool-result cap, divide by ~3. The default is\nalready sized that way. `suggested_max_bytes` comes back in the same rows units, so it can be\npassed straight back.\n","required":["fields","rows","truncated"],"properties":{"fields":{"type":"array","description":"The projected field names, in the order the values appear in each row.","items":{"type":"string"}},"rows":{"type":"array","description":"One array of values per matching record, ordered by id. Each value renders the way the resource's own serializer renders that column, so a money field such as `total_amount` arrives as a string at the currency's minor units (`\"100.00\"`) and can be compared with the same field read from the record endpoint. A `null` means the column has no value for that record.","items":{"type":"array","items":{}}},"count":{"type":"integer","description":"Present only when `results.count` was true. Total records the filter matches, independent of the current page. Bounded like the workspace stats count, so a very large audience reports the cap rather than paying for a full scan. Counting a truncated result requires a second evaluation of the filter."},"count_capped_at":{"type":"integer","description":"Present only when `count` saturated at the scan cap the server applies: the real total is HIGHER than `count`, so treat `count` as a floor rather than a total. Narrow the filter to get an exact number. Absent means `count` is exact. Same marker the workspace stats endpoint returns for the same case."},"count_unavailable_reason":{"type":"string","description":"Present only when `results.count` was true but its additional filter evaluation could not complete within the filtered-query time budget. The rows, truncation signal, and continuation cursor are still valid; narrow the filter or use the workspace stats endpoint for the count."},"truncated":{"type":"boolean","description":"True when `rows` is a page rather than the whole set, because the rows reached `limit` or `max_bytes`, or the request reached its filtered-query wall-clock budget."},"stop_reason":{"type":"string","enum":["time_budget","row_limit","byte_budget","record_exceeds_budget"],"description":"Present only when `truncated`: which ceiling stopped us, so you do not have to parse `guidance` to find out. `row_limit` means raise your own `limit`; `byte_budget` means raise `max_bytes` or project fewer fields; `record_exceeds_budget` means a single record is larger than the whole budget, so project fewer fields. `time_budget` is the only one you cannot lift: the request reached its filtered-query wall-clock budget, so page with `next_after` or narrow the filter -- raising `max_bytes` or `limit` will not help, because neither is what stopped it."},"bytes":{"type":"integer","description":"Estimated serialized size of `rows`, measured before final response encoding. Values such as timestamps can make the wire representation slightly larger, so leave headroom."},"bytes_per_record":{"type":"integer","description":"Average estimated bytes per returned record, so you can size a later call for a different record count."},"max_bytes":{"type":"integer","description":"The pre-response row-cost budget applied — your `results.max_bytes` after clamping to the server ceiling, or the default when you didn't set one. It is not an exact wire-size ceiling; leave headroom."},"suggested_max_bytes":{"type":"integer","description":"Present only when `results.count` was true, the response is `truncated`, and the whole set could fit in one response: the `results.max_bytes` to retry with to get all `count` records in a single call. Extrapolated from the widest row returned SO FAR, not the average — so it is an estimate, and a later record wider than anything on this page can still make the retry truncate. Check `truncated` on the retry rather than assuming it is whole. Absent when the set is too large for any single response, when no exact total was requested or known, or when the wall-clock budget stopped the request — then page or narrow instead."},"next_after":{"type":"string","description":"Cursor to continue from, present only when `truncated` is true. Pass it back as `results[after]`. It is the id of the last row actually RETURNED, so paging never skips a record the budget dropped."},"guidance":{"type":"string","description":"Present only when `truncated` is true: what to do about it, cheapest-first — retry with\n`suggested_max_bytes` to get everything in one call, raise your own `limit`, narrow the\nfilter, project fewer `fields`, page with `next_after` (including how many calls that\nwill take at this size when `count` is available), export the full set as a CSV, or use\nthe workspace stats endpoint if a number is all that was wanted. The export option is only offered when the filtered\nresource actually has a bulk export and the calling token could create one, so neither an\norder filter nor a read-only connection is pointed at something that would fail.\n"}}},"FilterResultsParameter":{"description":"Return projected matches inline. Pass `true` for ids only; omit for the filter definition alone.","oneOf":[{"type":"boolean"},{"type":"object","properties":{"fields":{"type":"array","description":"Fields to project. Defaults to `[\"id\"]`.","items":{"type":"string"}},"limit":{"type":"integer","description":"Caller-set row limit. Defaults to 500."},"max_bytes":{"type":"integer","description":"Caller-set row byte budget. Defaults to 3072 and is capped at 4194304."},"after":{"type":"string","description":"Positive-integer cursor from `results.next_after`."},"count":{"type":"boolean","default":false,"description":"Include the bounded total count. May require another filter evaluation."}}}]},"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":"\u003cp\u003eHi everyone, excited to be here.\u003c/p\u003e"}}},"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":"\u003cp\u003eGreat post, thanks for sharing!\u003c/p\u003e"}}},"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":"\u003cp\u003eUpdated comment text.\u003c/p\u003e"}}},"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. Because it collapses several states into one flag, do not use it to detect deletion - check deleted_at instead."},"deleted_at":{"type":["string","null"],"format":"date-time","description":"When the contact was deleted. Deleting a contact is a soft delete: the record is excluded from list endpoints but remains readable by id, so a non-null value here is the only reliable way to tell that a contact returned by this endpoint has been deleted. Null when the contact has not been deleted."},"fb_url":{"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,"deleted_at":null,"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","deleted_at","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,"deleted_at":null,"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","deleted_at","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 \u0026 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 \u0026 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 \u003cb\u003eroot\u003c/b\u003e 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"},"smart_sending":{"type":"boolean","description":"Whether Smart Sending is on. When on, the broadcast is delivered gradually across a window instead of all at once, which protects deliverability. Defaults to `true`, so a broadcast batches unless you explicitly send `smart_sending: false`. Above 5,000 recipients Smart Sending is mandatory: the API may coerce `false` to `true`, and the send batches at that size regardless of the stored value."},"smart_sending_time":{"type":["number","null"],"description":"How many `smart_sending_unit`s the delivery window spans. `null` means no override is stored and the window is sized from the audience instead."},"smart_sending_unit":{"type":["string","null"],"enum":["hour","day",null],"description":"The unit of the Smart Sending delivery window. `null` means no override is stored and the window is sized from the audience instead."},"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"},"split_test":{"type":"boolean","description":"Whether this broadcast is a subject-line split test. When true, a `split_test_percentage` share of the audience is split evenly across the `variants`; after `split_test_wait_time` hours the variant with the most opens wins and the rest of the audience receives it."},"split_test_percentage":{"type":["number","null"],"description":"Share of the audience (0-100) used for the test sends. `null` when this is not a split test."},"split_test_wait_time":{"type":["integer","null"],"description":"Hours to wait after the test sends before the winner is picked. `null` when this is not a split test."},"variants":{"type":"array","description":"The subject-line variants, oldest first. A broadcast that is not a split test has one, its main variant, which mirrors the broadcast's own subject and preheadline. A broadcast created before subject-line split tests existed and already sent has none, so the array can be empty; its subject line is then only on the broadcast's own `subject` and `preheadline`.","items":{"type":"object","properties":{"subject":{"type":["string","null"],"description":"Subject line sent to this variant's share of the audience"},"preheadline":{"type":["string","null"],"description":"Preview text sent to this variant's share of the audience"},"send_percentage":{"type":["number","null"],"description":"Share of the audience (0-100) this variant is sent to during the test. Only meaningful when `split_test` is true."},"main":{"type":"boolean","description":"Whether this is the main variant, the one that mirrors the broadcast's subject and preheadline. It wins ties."},"open_count":{"type":"integer","description":"Opens counted for this variant while the test was running. Frozen when the winner is picked, so it is not the broadcast's overall open count."},"winner":{"type":["boolean","null"],"description":"`null` while the test is still running, and for a broadcast that is not a split test. Once the test closes, `true` for the variant with the most opens (the main variant on a tie) and `false` for the others."}},"required":["main","open_count","preheadline","send_percentage","subject","winner"]}},"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 \u0026 Canada)","send_immediately":false,"smart_sending":true,"smart_sending_time":0.5,"smart_sending_unit":"hour","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],"split_test":false,"split_test_percentage":null,"split_test_wait_time":null,"variants":[{"subject":"This Week's Updates","preheadline":"Check out what's new","send_percentage":100.0,"main":true,"open_count":0,"winner":null}],"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","smart_sending","smart_sending_time","smart_sending_unit","split_test","split_test_percentage","split_test_wait_time","status","subject","template","time_zone","topic_ids","updated_at","variants","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."},"smart_sending":{"type":"boolean","description":"Smart Sending. When true the broadcast is delivered gradually across a window rather than all at once, which protects deliverability. **Defaults to `true`**: send `false` explicitly to deliver the whole audience in one go. Above 5,000 recipients Smart Sending is mandatory: sending `false` is accepted and may be stored as `true`. The send batches at that size regardless of the stored value."},"smart_sending_time":{"type":["number","null"],"description":"How many `smart_sending_unit`s the delivery window spans, for example `2` with `hour`. Must be between 0.5 and 100, and must be sent together with `smart_sending_unit`. Omit both to size the window from the audience, which is the recommended default."},"smart_sending_unit":{"type":["string","null"],"enum":["hour","day",null],"description":"The unit of the Smart Sending delivery window. Must be sent together with `smart_sending_time`. Omit both to size the window from the audience, which is the recommended default."},"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":"\u003ch1\u003eHello World\u003c/h1\u003e","text_body":"Hello World","send_immediately":false,"smart_sending":false,"send_at":"2025-06-01","send_at_local_time":"18:00:00","time_zone":"Pacific Time (US \u0026 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"},"smart_sending":{"type":"boolean","description":"Smart Sending. When true the broadcast is delivered gradually across a window rather than all at once, which protects deliverability. A broadcast is created with this on, so send `false` to deliver the whole audience in one go. Above 5,000 recipients Smart Sending is mandatory: sending `false` is accepted and may be stored as `true`. The send batches at that size regardless of the stored value."},"smart_sending_time":{"type":["number","null"],"description":"How many `smart_sending_unit`s the delivery window spans, for example `2` with `hour`. Must be between 0.5 and 100, and must be sent together with `smart_sending_unit`. Send both as `null` to go back to sizing the window from the audience."},"smart_sending_unit":{"type":["string","null"],"enum":["hour","day",null],"description":"The unit of the Smart Sending delivery window. Must be sent together with `smart_sending_time`. Send both as `null` to go back to sizing the window from the audience."},"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"}}},"EmailsBroadcastStatsAttributes":{"type":"object","title":"Email Broadcast Stats","description":"Delivery progress, engagement and revenue for one email broadcast over its send window. Counts are unique contacts unless noted; rates are whole percentages (0-100); money is a decimal string in `currency`.","properties":{"broadcast":{"type":"object","description":"The broadcast these stats belong to","properties":{"id":{"type":"integer","description":"Broadcast ID"},"public_id":{"type":["string","null"],"description":"Broadcast public ID"},"name":{"type":["string","null"],"description":"Internal name for the broadcast"}},"required":["id","name","public_id"]},"currency":{"type":["string","null"],"description":"ISO 4217 currency code for all monetary values (e.g. USD, EUR). `null` when the workspace has no currency set; `revenue` then sums every currency the broadcast's orders were paid in."},"timerange":{"type":"object","description":"The send window the stats cover","properties":{"from":{"type":["string","null"],"format":"date-time","description":"When sending began. For a broadcast that has not started sending, 90 days before `to`; every number is then zero."},"to":{"type":"string","format":"date-time","description":"End of the window, two weeks after sending completed, or now while the broadcast has not completed, capped at 90 days after sending began."}},"required":["from","to"]},"progress":{"type":"object","description":"How far delivery has got","properties":{"total":{"type":["integer","null"],"description":"Audience size recorded when the broadcast sent, summed over every send of the broadcast (a send in the contacts' time zones has one per zone). `null` until the first send has run."},"queued":{"type":"integer","description":"Contacts in batches that have not started sending yet (scheduled, waiting for the split-test winner, paused, or halted by a deliverability health check)"},"processing":{"type":"integer","description":"Contacts in batches being sent right now"},"sent":{"type":"integer","description":"Contacts the email was sent to"},"failed":{"type":"integer","description":"Contacts whose delivery failed"}},"required":["failed","processing","queued","sent","total"]},"performance":{"type":"object","description":"Engagement over the send window. Rates are rounded to whole percentages, so a share under 0.5% reads 0 next to a non-zero count; the counts are authoritative.","properties":{"delivered":{"type":"integer","description":"Contacts the email was sent to (the same number as `progress.sent`)"},"bounced":{"type":"integer","description":"Contacts whose address bounced"},"opened":{"type":"integer","description":"Total opens, counting repeat opens by the same contact"},"unique_opens":{"type":"integer","description":"Contacts who opened at least once"},"clicked":{"type":"integer","description":"Total clicks, counting repeat clicks by the same contact"},"unique_clicks":{"type":"integer","description":"Contacts who clicked at least once"},"unsubscribed":{"type":"integer","description":"Contacts who unsubscribed from this email"},"spam_complaints":{"type":"integer","description":"Contacts who reported this email as spam"},"open_rate":{"type":"integer","description":"Unique opens as a whole percentage (0-100) of the audience"},"click_rate":{"type":"integer","description":"Unique clicks as a whole percentage (0-100) of the audience"},"click_to_open_rate":{"type":"integer","description":"Unique clicks as a whole percentage (0-100) of unique opens"},"bounce_rate":{"type":"integer","description":"Bounces as a whole percentage (0-100) of the audience"},"unsubscribe_rate":{"type":"integer","description":"Unsubscribes as a whole percentage (0-100) of the audience"}},"required":["bounce_rate","bounced","click_rate","click_to_open_rate","clicked","delivered","open_rate","opened","spam_complaints","unique_clicks","unique_opens","unsubscribe_rate","unsubscribed"]},"revenue":{"type":"object","description":"Orders attributed to the broadcast, meaning the buyer reached the order through one of its links, summed across every send of the broadcast. Only live-mode transactions in the workspace currency are counted; a workspace with no currency set (`currency` is `null`) has every currency summed.","properties":{"total":{"type":"string","description":"Revenue attributed to the broadcast (paid minus refunded), as a decimal string in `currency`"},"orders_count":{"type":"integer","description":"Orders with at least one paid transaction attributed to the broadcast"},"per_recipient":{"type":"string","description":"Revenue divided by the audience, as a decimal string in `currency`"},"per_unique_open":{"type":"string","description":"Revenue divided by unique opens, as a decimal string in `currency`"},"per_unique_click":{"type":"string","description":"Revenue divided by unique clicks, as a decimal string in `currency`"}},"required":["orders_count","per_recipient","per_unique_click","per_unique_open","total"]}},"example":{"broadcast":{"id":1,"public_id":"GhIjKl","name":"Weekly Newsletter"},"currency":"USD","timerange":{"from":"2026-08-01T10:00:00Z","to":"2026-08-15T12:00:00Z"},"progress":{"total":1000,"queued":0,"processing":0,"sent":985,"failed":3},"performance":{"delivered":985,"bounced":12,"opened":610,"unique_opens":402,"clicked":95,"unique_clicks":81,"unsubscribed":4,"spam_complaints":1,"open_rate":40,"click_rate":8,"click_to_open_rate":20,"bounce_rate":1,"unsubscribe_rate":0},"revenue":{"total":"1234.50","orders_count":17,"per_recipient":"1.23","per_unique_open":"3.07","per_unique_click":"15.24"}},"required":["broadcast","currency","performance","progress","revenue","timerange"]},"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","enum":["left","center","right"],"description":"Alignment of the email footer. Any other value is rejected with a 422."},"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"},"name":{"type":["string","null"],"description":"Business/sender name shown on email broadcasts"},"hide_branding":{"type":"boolean","description":"Whether ClickFunnels branding is hidden in the email footer"},"unsubscribe_footer":{"type":["string","null"],"description":"Custom unsubscribe footer text"},"footer_alignment":{"type":"string","enum":["left","center","right"],"description":"Alignment of the email footer"},"address_single_line":{"type":"boolean","description":"Whether the marketing address renders on a single line"},"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,"name":"Acme Inc.","hide_branding":false,"unsubscribe_footer":null,"footer_alignment":"center","address_single_line":false,"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","address_single_line","footer_alignment","hide_branding","marketing_emails_from_address","marketing_emails_reply_to_address","name","system_emails_from_address","system_emails_reply_to_address","unsubscribe_footer","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":"\u003ch1\u003eHello\u003c/h1\u003e","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":"\u003ch1\u003eHello\u003c/h1\u003e","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":"\u003ch1\u003eUpdated\u003c/h1\u003e"}}},"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.0,"sales_count":0,"sales_rate":0.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"},"optins":{"type":"integer","description":"Opt-in events across the funnel, matching the sum of the per-step `optins` numbers."},"optins_unique":{"type":"integer","description":"Distinct contacts associated with an opt-in event anywhere in the funnel."}}},"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,"optins":38,"optins_unique":27},"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 \u003chead\u003e section. Content should be wrapped in appropriate HTML tags such as \u003cscript\u003e, \u003clink\u003e, \u003cmeta\u003e, or \u003cstyle\u003e."},"head_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle head_code. 'append' adds to existing code (default), 'replace' overwrites."},"footer_code":{"type":["string","null"],"description":"Custom code to inject before the closing \u003c/body\u003e tag. JavaScript should be wrapped in \u003cscript\u003e tags."},"footer_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle footer_code. 'append' adds to existing code (default), 'replace' overwrites."}},"example":{"funnel":{"name":"Example Funnel","current_path":"/example-funnel","live_mode":true,"tag_ids":[1,2]}}},"FunnelParametersUpdate":{"type":"object","title":"Funnels","description":"Funnels","required":[],"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"},"domain_id":{"type":["integer","null"],"description":"The ID of the domain to associate with this funnel. Set to null to remove the domain association. Use the Domains API to look up available domain IDs."},"head_code":{"type":["string","null"],"description":"Custom code to inject into the funnel's \u003chead\u003e section. Content should be wrapped in appropriate HTML tags such as \u003cscript\u003e, \u003clink\u003e, \u003cmeta\u003e, or \u003cstyle\u003e. Set to null to clear existing code."},"head_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle head_code. 'append' adds to existing code (default), 'replace' overwrites."},"footer_code":{"type":["string","null"],"description":"Custom code to inject before the closing \u003c/body\u003e tag. JavaScript should be wrapped in \u003cscript\u003e tags. Set to null to clear existing code."},"footer_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle footer_code. 'append' adds to existing code (default), 'replace' overwrites."}},"example":{"funnel":{"name":"Example Funnel","live_mode":true,"head_code":"\u003cscript\u003econsole.log('funnel');\u003c/script\u003e","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 \u003ci\u003e\u003cu\u003e\u003ca href=\"https://developers.myclickfunnels.com/docs/filtering-by-page\" target=\"_blank\"\u003ehelp guide on that topic\u003c/a\u003e\u003cu\u003e\u003ci\u003e."},"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,"renewal_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,"deleted_at":null,"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","renewal_at","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":"When the next invoice on this subscription falls due. Read-only for processor-managed orders; on an external order it is a plain field you can write."},"renewal_at":{"type":["string","null"],"description":"When the subscription's service period rolls over and the next billing cycle begins.\nDistinct from `next_charge_at`, which is when the resulting invoice is due.\n\nWritable on a Payments AI subscription that is `pending`, `active`, or `paused` -\nsee the `renewal_at` note on `PATCH /orders/{id}`. Read-only on Stripe and external orders.\n\nA write is applied at the payment processor rather than stored. For an actual schedule change,\nthe order a successful `PATCH` hands back will carry the pre-request stored value. Follow the\n`200` / `202` polling conditions on `PATCH /orders/{id}`; a caller timeout means unknown, not\nfailed.\n"},"trial_end_at":{"type":["string","null"],"description":"When this subscription's trial ends and it converts to a paid charge. Null when the\norder never had a trial.\n\nWritable while the order is in a trial. Payments AI also accepts it as the equal companion to\na legal `renewal_at` move while the stored trial end is still in the future - see the\n`trial_end_at` note on `PATCH /orders/{id}`.\n\nA write is applied at the payment processor rather than stored. For an actual schedule change,\nthe order a successful `PATCH` hands back will carry the pre-request stored value. Follow the\n`200` / `202` polling conditions on `PATCH /orders/{id}`; a caller timeout means unknown, not\nfailed.\n"},"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,"renewal_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,"deleted_at":null,"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","renewal_at","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\n`trial_end_at` and `renewal_at` adjust processor-managed subscription dates. They require the\nsame permission as the corresponding ClickFunnels screens; unauthorized changes return `404`.\nA `null` or unchanged value does not request a schedule change.\n","required":[],"properties":{"trial_end_at":{"type":["string","null"],"format":"date-time","description":"Set the trial end for a Payments AI or Stripe subscription as an absolute RFC 3339 timestamp.\nA later value extends the trial and an earlier future value shortens it. The order normally\nhas `in_trial: true`; Payments AI also accepts `trial_end_at` as the equal companion to a\nlegal `renewal_at` move while the stored trial end is still in the future.\n\nThe timestamp must include a date, time, and UTC offset and be within the next two years.\nMoving the trial end also moves the first charge. Send a timestamp a few seconds ahead to\nend the trial now.\n"},"renewal_at":{"type":["string","null"],"format":"date-time","description":"Set the next billing-cycle start for a Payments AI subscription in `pending`, `active`, or\n`paused` state using an absolute RFC 3339 timestamp within the next two years.\nThis moves the next billing attempt without changing the amount or prorating it.\n\nA renewal cannot precede a future trial end. Send both fields with the same timestamp to end\nthe trial and bill then. To renew later, update `trial_end_at` first, re-read the order until\nit shows the effective new trial end, then update `renewal_at`.\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":"(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,"renewal_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,"deleted_at":null,"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 \u003ci\u003e\u003cu\u003e\u003ca href=\"https://developers.myclickfunnels.com/docs/filtering-by-page\" target=\"_blank\"\u003ehelp guide on that topic\u003c/a\u003e\u003cu\u003e\u003ci\u003e."},"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."},"block_ai_crawler":{"type":"boolean","description":"Whether AI training crawlers (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, CCBot and others) are blocked from using this page's content to train models. Defaults to false. Enforced by a `Disallow` rule in the domain's robots.txt — see [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits. Independent of `seo_index` and of the other two AI flags."},"block_ai_search":{"type":"boolean","description":"Whether AI answer engines (OAI-SearchBot, Claude-SearchBot, PerplexityBot and others) are blocked from indexing this page and citing it when people ask questions. Defaults to false. Enforced via robots.txt. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"block_ai_assistant":{"type":"boolean","description":"Whether AI assistants (ChatGPT-User, Claude-User, Perplexity-User and others) are blocked from opening this page when a person asks them to — for example pasting the page's link into a chat. Defaults to false. Enforced via robots.txt. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"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."},"custom_html_page":{"type":"boolean","description":"Whether this is a ClickFunnels-hosted custom HTML page — a page whose entire body is author-supplied HTML served verbatim (no page editor, no PML). Read the HTML via `GET /pages/{id}/custom_html` and replace it by sending the write-only `custom_html` string on `PATCH /pages/{id}`. Create these via `POST /workspaces/{workspace_id}/pages/custom_html`. (Deliberately named differently from the `custom_html` request field so echoing a GET payload back into PATCH never collides.)"},"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 `\u003ccheckout/\u003e` 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 `\u003ccheckout/\u003e` 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 `\u003ccheckout/\u003e` 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 SDK-enabled pages — externally-hosted (SDK) pages and ClickFunnels-hosted custom HTML pages; `null` for other pages. Contains the SDK integration token, plus the external URL for externally-hosted pages.","properties":{"token":{"type":"string","description":"The SDK page token (prefixed `cfp_`). Embed this in the page via a `\u003cmeta name=\"cf-page-token\" content=\"\u003ctoken\u003e\"\u003e` 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. Only present for externally-hosted pages (absent for custom HTML pages, which live on the funnel's own domain)."}}},"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 \u003cstyle\u003e wrapper). Maps to the CSS tab in the page editor's Code Editor panel. Internal pages only. Only returned when expand[]=custom_css is provided. Note: expanding may add latency, especially on list endpoints. Use sparingly."},"markup":{"type":"string","description":"**Expandable** The PML (Page Markup Language) representation of the page's visual tree. Only returned when expand[]=markup is provided. Note: expanding may add latency, especially on list endpoints. 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 page (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 page is empty: a page built entirely from elements PML cannot express also reads back empty. The value `\u003c!-- markup unavailable: page tree could not be serialized --\u003e` means the read failed; treat the page 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."}},"example":{"id":9,"public_id":"kJzvQi","workspace_id":42000,"name":"Great Page","description":"A high-converting sales page","theme_id":null,"seo_title":"Great Page - My Brand","seo_description":"Learn more about our amazing offer","seo_index":true,"block_ai_crawler":false,"block_ai_search":false,"block_ai_assistant":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"funnel_page","custom_html_page":false,"current_path":"/my-page-canonical","url":"https://myteam.myclickfunnels.com/my-funnel-page","show_page_step":{"id":42,"public_id":"aBcDeF","name":"Best Page Step","current_path":"/my-funnel-page","sort_order":0,"products":[]},"funnel":{"id":123,"public_id":"xYzAbC","name":"My Sales Funnel"},"sdk":null,"markup":"\u003csection\u003e\n  \u003crow cols=\"1\"\u003e\n    \u003ccolumn\u003e\n      \u003cheadline\u003eGreat Page\u003c/headline\u003e\n      \u003csubheadline\u003eStart your journey here\u003c/subheadline\u003e\n    \u003c/column\u003e\n  \u003c/row\u003e\n\u003c/section\u003e\n"},"required":["block_ai_assistant","block_ai_crawler","block_ai_search","created_at","current_path","custom_html_page","description","funnel","id","name","public_id","sdk","seo_description","seo_index","seo_title","show_page_step","theme_id","type","updated_at","url","workspace_id"]},"PageParameters":{"type":"object","title":"Pages","description":"Pages","required":["name"],"properties":{"name":{"type":"string","description":"Page name of the editable page element."},"current_path":{"type":"string","description":"The URL path for the page. If left blank, a randomized path will be generated. When attaching to a funnel, this value becomes the ShowPageStep path (the user-facing URL), and the page's own current_path will be set to a randomized value with a suffix, since the ShowPageStep path is the source of truth for funnel pages. 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) for the path rules."},"theme_id":{"type":"integer","description":"The ID of the theme to use for this page."},"description":{"type":["string","null"],"description":"A short description of the page (max 1000 characters)."},"seo_title":{"type":["string","null"],"description":"Custom title for search engine results."},"seo_description":{"type":["string","null"],"description":"Custom meta description for search engine results."},"seo_index":{"type":"boolean","description":"Whether search engines should index this page. Defaults to false."},"block_ai_crawler":{"type":"boolean","description":"Block AI training crawlers (GPTBot, ClaudeBot, Google-Extended and others) from using this page's content to train models. Defaults to false. Enforced via robots.txt — see [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"block_ai_search":{"type":"boolean","description":"Block AI answer engines (OAI-SearchBot, PerplexityBot and others) from indexing this page and citing it in answers. Defaults to false. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"block_ai_assistant":{"type":"boolean","description":"Block AI assistants (ChatGPT-User, Claude-User and others) from opening this page when a person asks them to. Defaults to false. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"sort_order":{"type":"integer","description":"Optional zero-based position within the funnel when creating with `funnel.funnel_id`. `0` inserts before the first step; omit to append at the end. Ignored when `funnel.show_page_step_id` is provided. Out-of-bounds values return 422."},"funnel":{"type":"object","description":"Optional funnel association. Use either funnel_id (to create a new step) or show_page_step_id (to attach to existing step). If both are provided, show_page_step_id takes precedence and funnel_id is ignored.","properties":{"funnel_id":{"type":"string","description":"The public ID of the funnel to attach this page to. A new show page step will be created as the last step of the funnel, unless `after_show_page_step_id` is provided."},"after_show_page_step_id":{"type":["integer","string","null"],"description":"Controls where the new step is inserted within the funnel (only relevant when `funnel_id` is provided). Accepts either:\n- A ShowPageStep `id` (the function id, as exposed under `show_page_step.id` in page responses) — inserts the new step immediately after the referenced show page step.\n- The workflow root step's id (integer) — inserts the new step at the beginning of the funnel.\nIf omitted or null, the page is appended after the currently last step of the funnel. Returns 400 if the id does not resolve to a valid step in the funnel.\n"},"show_page_step_id":{"type":"string","description":"The ID of an existing show page step to attach this page to. Takes precedence over funnel_id if both are provided."}}},"show_page_step":{"type":"object","description":"Optional. Mutates the show_page_step that the page is attached to via the `funnel` block above. Only valid when the page is also being linked to a funnel via the `funnel` block — passing `show_page_step.product_ids` or `show_page_step.bumps` without a funnel link returns 400.\n","properties":{"product_ids":{"type":"array","items":{"type":"string"},"description":"List of product public IDs to append to the step's checkout as regular (main) products. This is **additive** — products are appended to any products already on the step (relevant when `funnel.show_page_step_id` is used to attach to an existing step); products already attached are skipped. All-or-nothing — if any ID does not resolve to a workspace product, the page is not created and a 400 is returned. To remove products, use `DELETE /api/v2/pages/:id/products`. See [Manage products on a checkout page](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#manage-products-on-a-checkout-page) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md).\n"},"bumps":{"type":"array","description":"Products to attach to the step as **order bumps** — the optional add-ons offered next to the main products, served to `\u003ccheckout/\u003e` and to the SDK as `bumpProducts`. One object per bump, each carrying its own copy. Same additive, all-or-nothing semantics as `product_ids`. A product already attached to the step as a main product is promoted to a bump in place (it keeps its position and its configured variants/prices). A product named in both `product_ids` and `bumps` in the same request is a 400 — a product is either a main product or a bump on a given step, never both. To turn a bump back into a main product, detach it with `DELETE /api/v2/pages/:id/products` and re-attach it via `product_ids`.\n","items":{"type":"object","required":["product_id"],"properties":{"product_id":{"type":"string","description":"Public ID of the product to attach as an order bump. Required on every entry; an entry without one is a 400."},"preheadline":{"type":"string","description":"Optional short line of copy shown above this bump's offer (for example \"One-time offer\"). Omit to leave any copy already set on the bump alone. Read it back under `show_page_step.products[].bump_preheadline`.\n"}}}}}},"head_code":{"type":["string","null"],"description":"Custom code to inject into the page's \u003chead\u003e section. Content should be wrapped in appropriate HTML tags such as \u003cscript\u003e, \u003clink\u003e, \u003cmeta\u003e, or \u003cstyle\u003e. Set to null to clear existing code."},"head_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle head_code. 'append' adds to existing code (default), 'replace' overwrites."},"footer_code":{"type":["string","null"],"description":"Custom code to inject before the closing \u003c/body\u003e tag. JavaScript should be wrapped in \u003cscript\u003e tags. Set to null to clear existing code."},"footer_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle footer_code. 'append' adds to existing code (default), 'replace' overwrites."},"custom_css":{"type":["string","null"],"description":"Raw CSS to apply at the page level (no \u003cstyle\u003e wrapper). Maps to the CSS tab in the page editor's Code Editor panel. Internal pages only. Set to null to clear existing CSS."},"custom_css_mode":{"type":"string","enum":["append","replace"],"description":"How to handle custom_css. 'append' adds to existing CSS (default), 'replace' overwrites."},"markup":{"type":"string","description":"A valid PML (Page Markup Language) string that replaces the page's visual tree. Page metadata (name, path, SEO settings) is preserved. Markup that stops mid-construct (a tag, attribute value, comment or `\u003ccustomhtml\u003e` body that never closes, or elements still open at the end of the document) is rejected with a 400 and the page is not created — 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 full DSL reference. The parser errors are listed under [Common Validation Errors](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md#common-validation-errors)."}},"example":{"page":{"name":"My New Page","current_path":"/my-new-page","theme_id":12345,"description":"A landing page for our new product launch","seo_title":"New Product Launch - My Brand","seo_description":"Discover our latest product offering","seo_index":true,"block_ai_crawler":true,"block_ai_search":false,"block_ai_assistant":false,"funnel":{"funnel_id":"xyz789"},"show_page_step":{"product_ids":["PrdAbc"],"bumps":[{"product_id":"PrdBmp","preheadline":"One-time offer"}]},"head_code":"\u003cscript\u003econsole.log('hello');\u003c/script\u003e","head_code_mode":"append","markup":"\u003csection\u003e\n  \u003crow cols=\"1\"\u003e\n    \u003ccolumn\u003e\n      \u003cheadline\u003eWelcome to our page\u003c/headline\u003e\n      \u003csubheadline\u003eStart your journey here\u003c/subheadline\u003e\n    \u003c/column\u003e\n  \u003c/row\u003e\n\u003c/section\u003e\n"}}},"PageParametersUpdate":{"type":"object","title":"Pages","description":"Update parameters for a page. Field availability depends on the page type:\n\n**Shared (all page types):** `name`, `description`, `sort_order`, `funnel.show_page_step_id`, `show_page_step.product_ids`, `show_page_step.bumps`.\n\n**Internal (editor) pages only** (returns 422 on external and custom HTML pages): `markup`, `theme_id`, `seo_title`, `seo_description`, `seo_index`, `block_ai_crawler`, `block_ai_search`, `block_ai_assistant`, `head_code`, `footer_code`, `custom_css`, `live_data_changes`.\n\n**External-only** (returns 422 on other page types): `external_url`.\n\n**Custom HTML pages only** (returns 422 on other page types): `custom_html`. Custom HTML pages also accept `current_path` (like internal pages) — it moves the funnel step's path when the page is a funnel step, or the page's own path when standalone.\n\nThe three `block_ai_*` flags are accepted on any internal page, but robots.txt can only express the block at paths ClickFunnels can currently resolve — today, the funnel step paths of a page that is a step in a funnel. A page that is not a funnel step (standalone landing page, site page, theme/template page, blog or course page) contributes no rules at all, and even for a funnel page the page's own direct URL is not yet listed. In every one of those cases the preference is stored and read back but not yet enforced; it begins taking effect as path resolution is extended, with no further action from the client. A `200` is therefore not proof that a page is blocked — fetch the domain's `/robots.txt` to confirm. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md).\n","required":[],"properties":{"name":{"type":"string","description":"Page name of the editable page element."},"description":{"type":["string","null"],"description":"A short description of the page (max 1000 characters)."},"sort_order":{"type":"integer","description":"Reposition the page within its funnel. Zero-based. `0` moves it to the first position. The page must belong to exactly one funnel step; pages with zero or multiple funnel steps return 422. Out-of-bounds values return 422. Ignored when `funnel.show_page_step_id` is also provided — the swap target's position takes precedence."},"funnel":{"type":"object","description":"Optional funnel mutation block. On update, only `show_page_step_id` is supported — swap the page onto an existing show page step.","properties":{"show_page_step_id":{"type":["integer","string"],"description":"The ID of an existing show page step to attach this page to. The page previously linked to that step becomes an orphan (kept in the workspace, no longer linked to any step). Shared by both internal and external pages."}}},"current_path":{"type":"string","description":"Move the page's URL path (e.g. `/my-page`). Internal and custom HTML pages — returns 422 on external pages. For a custom HTML page that is a funnel step, this moves the STEP's path (the customer-facing URL); when standalone, the page's own path. Returns 422 when the page backs more than one funnel step — the target would be ambiguous."},"custom_html":{"type":"string","minLength":1,"description":"Replace the entire HTML body of a custom HTML page (max 2MB). An empty or whitespace-only string is rejected with a 422 (omit the field to leave the body unchanged). The stored HTML is served verbatim at the page's URL; the edge cache is purged on write. Custom HTML pages only — returns 422 on other page types. Read the current HTML via `GET /pages/{id}/custom_html`."},"seo_title":{"type":["string","null"],"description":"Custom title for search engine results. Internal pages only — returns 422 on external pages."},"seo_description":{"type":["string","null"],"description":"Custom meta description for search engine results. Internal pages only — returns 422 on external pages."},"seo_index":{"type":"boolean","description":"Whether search engines should index this page. Internal pages only — returns 422 on external pages."},"block_ai_crawler":{"type":"boolean","description":"Block AI training crawlers (GPTBot, ClaudeBot, Google-Extended and others) from using this page's content to train models. Internal pages only — returns 422 on external pages. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"block_ai_search":{"type":"boolean","description":"Block AI answer engines (OAI-SearchBot, PerplexityBot and others) from indexing this page and citing it in answers. Internal pages only — returns 422 on external pages. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"block_ai_assistant":{"type":"boolean","description":"Block AI assistants (ChatGPT-User, Claude-User and others) from opening this page when a person asks them to. Internal pages only — returns 422 on external pages. See [Crawler access (AI opt-out)](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#crawler-access-ai-opt-out) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for coverage limits."},"head_code":{"type":["string","null"],"description":"Custom code to inject into the page's \u003chead\u003e section. Internal pages only — returns 422 on external pages. Set to null to clear existing code."},"head_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle head_code. 'append' adds to existing code (default), 'replace' overwrites. Internal pages only."},"footer_code":{"type":["string","null"],"description":"Custom code to inject before the closing \u003c/body\u003e tag. Internal pages only — returns 422 on external pages. Set to null to clear existing code."},"footer_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle footer_code. 'append' adds to existing code (default), 'replace' overwrites. Internal pages only."},"custom_css":{"type":["string","null"],"description":"Raw CSS to apply at the page level (no \u003cstyle\u003e wrapper). Maps to the CSS tab in the page editor's Code Editor panel. Internal pages only — returns 422 on external pages. Set to null to clear existing CSS."},"custom_css_mode":{"type":"string","enum":["append","replace"],"description":"How to handle custom_css. 'append' adds to existing CSS (default), 'replace' overwrites. Internal pages only."},"markup":{"type":"string","description":"A valid PML (Page Markup Language) string that replaces the page's visual tree, published version and editor draft alike. PML covers only a subset of what the ClickFunnels page editor can build, so this write silently drops editor-built content it cannot express. **If the page could have been created or edited in the ClickFunnels editor, stop and get explicit approval from the user before sending this** (a general instruction to update the page 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). Internal pages only — returns 422 on external pages. Markup that stops mid-construct (a tag, attribute value, comment or `\u003ccustomhtml\u003e` body that never closes, or elements still open at the end of the document) is rejected with a 400 and the page is left untouched — re-send the complete document rather than the missing tail. To add a tracking pixel or other custom code, use `head_code`/`footer_code` instead of rewriting the body; see [Add a tracking pixel or custom code](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#add-a-tracking-pixel-or-custom-code). See the [Page Markup Skill](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md) for the full DSL reference. The parser errors are listed under [Common Validation Errors](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md#common-validation-errors)."},"external_url":{"type":"string","description":"Update the external URL for an SDK page. External pages only — returns 422 on internal pages. The SDK token is preserved across URL updates. To move external pages to a new origin, see the [Migrate an External Page Domain Skill](https://accounts.myclickfunnels.com/.well-known/sdk/migrate-external-page-domain/skill.md#4-patch-one-page-at-a-time)."},"show_page_step":{"type":"object","description":"Optional. Mutates the show_page_step that this page is attached to. Only valid when the page is part of a funnel — passing `show_page_step.product_ids` or `show_page_step.bumps` for a page that isn't linked to a funnel returns 400. Shared by both internal and external pages.\n","properties":{"product_ids":{"type":"array","items":{"type":"string"},"description":"List of product public IDs to append to the step's checkout as regular (main) products. This is **additive** — products listed are appended; products already attached are skipped; no products are ever removed via this field, and an existing order bump is never demoted back to a main product by it. All-or-nothing — if any ID does not resolve to a workspace product, no changes are saved and a 400 is returned. To remove products, use `DELETE /api/v2/pages/:id/products`. See [Manage products on a checkout page](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#manage-products-on-a-checkout-page) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md).\n"},"bumps":{"type":"array","description":"Products to attach to the step as **order bumps** — the optional add-ons offered next to the main products, served to `\u003ccheckout/\u003e` and to the SDK as `bumpProducts`. One object per bump, each carrying its own copy. Same additive, all-or-nothing semantics as `product_ids`. A product already attached to the step as a main product is promoted to a bump in place (it keeps its position and its configured variants/prices), which is how you turn an existing attachment into a bump. A product named in both `product_ids` and `bumps` in the same request is a 400 — a product is either a main product or a bump on a given step, never both. To turn a bump back into a main product, detach it with `DELETE /api/v2/pages/:id/products` and re-attach it via `product_ids`.\n","items":{"type":"object","required":["product_id"],"properties":{"product_id":{"type":"string","description":"Public ID of the product to attach as an order bump. Required on every entry; an entry without one is a 400."},"preheadline":{"type":"string","description":"Optional short line of copy shown above this bump's offer (for example \"One-time offer\"). Sending it for a product that is already a bump replaces that bump's copy, so this is also how you edit it; omit it to leave the current copy alone. Read it back under `show_page_step.products[].bump_preheadline`.\n"}}}}}}},"example":{"page":{"name":"Example Page","description":"Updated page description","seo_title":"Updated SEO Title","seo_description":"Updated meta description","seo_index":true,"block_ai_crawler":true,"block_ai_search":true,"block_ai_assistant":false,"head_code":"\u003cscript\u003econsole.log('updated');\u003c/script\u003e","head_code_mode":"append","markup":"\u003csection\u003e\n  \u003crow cols=\"1\"\u003e\n    \u003ccolumn\u003e\n      \u003cheadline\u003eWelcome to our page\u003c/headline\u003e\n      \u003csubheadline\u003eStart your journey here\u003c/subheadline\u003e\n    \u003c/column\u003e\n  \u003c/row\u003e\n\u003c/section\u003e\n","show_page_step":{"product_ids":["PrdXyz"],"bumps":[{"product_id":"PrdBmp","preheadline":"One-time offer"}]}}}},"ProductAttributes":{"type":"object","title":"Products","description":"Products","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Product Public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Product name"},"current_path":{"type":["string","null"],"description":"Current Path"},"archived":{"type":["boolean","null"],"description":"Archived"},"visible_in_store":{"type":["boolean","null"],"description":"Visible in Store"},"visible_in_customer_center":{"type":["boolean","null"],"description":"Visible in Customer Center"},"image_id":{"type":["string","null"],"description":"Image"},"seo_title":{"type":["string","null"],"description":"A clear title without branding or mentioning the domain itself. Longer is better, but max is 60 characters."},"seo_description":{"type":["string","null"],"description":"A clear SEO description, at least two sentences long. Longer is better, but max is 160 characters. You will find the actual user-facing description on the **default variant of the product** (see the `Products::Variant` resource)."},"seo_image_id":{"type":["string","null"],"description":"SEO image"},"commissionable":{"type":["boolean","null"],"description":"Commissionable"},"image_ids":{"type":["array","null"],"description":"Images"},"default_variant_id":{"type":"integer","description":"The ID of the default variant of the product"},"variant_ids":{"type":["array","null"],"minContains":0,"contains":{"type":"integer"},"description":"Variant IDs"},"price_ids":{"type":["array","null"],"description":"Price IDs"},"tag_ids":{"type":["array","null"],"description":"Any valid array, empty or with valid tags will overwrite existing values. To avoid losing existing tags first use the Fetch Product endpoint, then be sure to include the existing tags in your payload along with any new addition(s)"},"redirect_funnel_id":{"type":["string","null"],"description":"Redirect funnel"},"cancellation_funnel_url":{"type":["string","null"],"description":"Cancellation Funnel Url"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"variant_properties":{"type":["array","null"],"items":{"type":"object","title":"Product Properties","description":"Properties","properties":{"id":{"type":"integer","description":"ID"},"name":{"type":"string","description":"Name"}}},"description":"Properties that are specific to the default variant of a product"}},"example":{"id":22,"public_id":"RTWMAd","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":22,"variant_ids":[22],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":22,"name":"Color"}]},"required":["archived","cancellation_funnel_url","commissionable","created_at","current_path","default_variant_id","id","image_id","image_ids","name","price_ids","public_id","redirect_funnel_id","seo_description","seo_image_id","seo_title","tag_ids","updated_at","variant_ids","variant_properties","visible_in_customer_center","visible_in_store","workspace_id"]},"ProductParameters":{"type":"object","title":"Products","description":"Products","required":["name"],"properties":{"name":{"type":"string","description":"Product name"},"current_path":{"type":["string","null"],"description":"Current Path"},"visible_in_store":{"type":["boolean","null"],"description":"Visible in Store"},"visible_in_customer_center":{"type":["boolean","null"],"description":"Visible in Customer Center"},"seo_title":{"type":["string","null"],"description":"A clear title without branding or mentioning the domain itself. Longer is better, but max is 60 characters."},"seo_description":{"type":["string","null"],"description":"A clear SEO description, at least two sentences long. Longer is better, but max is 160 characters. You will find the actual user-facing description on the **default variant of the product** (see the `Products::Variant` resource)."},"seo_image_id":{"type":["string","null"],"description":"SEO image"},"commissionable":{"type":["boolean","null"],"description":"Commissionable"},"image_ids":{"type":["array","null"],"description":"Images"},"redirect_funnel_id":{"type":["string","null"],"description":"Redirect funnel"},"cancellation_funnel_url":{"type":["string","null"],"description":"Cancellation Funnel Url"},"tag_ids":{"type":"array","items":{"type":"integer"},"description":"Any valid array, empty or with valid tag ids will overwrite existing values. To avoid losing existing tags first use the Fetch Product endpoint, then be sure to include the existing tags in your payload along with any new addition(s)"},"variant_properties":{"type":"array","description":"The properties of the product's variants. e.g. 'Size', 'Color' etc.","items":{"type":"object","properties":{"id":{"type":"integer","description":"The ID of the property, if updating the property"},"name":{"type":"string","description":"The name of the property"}}}}},"example":{"product":{"name":"Sample Product","current_path":null,"visible_in_store":true,"visible_in_customer_center":true,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"tag_ids":[1,2,3],"variant_properties":[{"id":1,"name":"Size"},{"id":2,"name":"Color"}]}}},"ProductParametersUpdate":{"type":"object","title":"Products","description":"Products","required":[],"properties":{"name":{"type":"string","description":"Product name"},"current_path":{"type":["string","null"],"description":"Current Path"},"visible_in_store":{"type":["boolean","null"],"description":"Visible in Store"},"visible_in_customer_center":{"type":["boolean","null"],"description":"Visible in Customer Center"},"seo_title":{"type":["string","null"],"description":"A clear title without branding or mentioning the domain itself. Longer is better, but max is 60 characters."},"seo_description":{"type":["string","null"],"description":"A clear SEO description, at least two sentences long. Longer is better, but max is 160 characters. You will find the actual user-facing description on the **default variant of the product** (see the `Products::Variant` resource)."},"seo_image_id":{"type":["string","null"],"description":"SEO image"},"commissionable":{"type":["boolean","null"],"description":"Commissionable"},"image_ids":{"type":["array","null"],"description":"Images"},"variant_ids":{"type":["array","null"],"minContains":0,"contains":{"type":"integer"},"description":"Variant IDs"},"price_ids":{"type":["array","null"],"description":"Price IDs"},"redirect_funnel_id":{"type":["string","null"],"description":"Redirect funnel"},"cancellation_funnel_url":{"type":["string","null"],"description":"Cancellation Funnel Url"},"tag_ids":{"type":"array","items":{"type":"integer"},"description":"Any valid array, empty or with valid tag ids will overwrite existing values. To avoid losing existing tags first use the Fetch Product endpoint, then be sure to include the existing tags in your payload along with any new addition(s)"},"variant_properties":{"type":"array","description":"The properties of the product's variants. e.g. 'Size', 'Color' etc.","items":{"type":"object","properties":{"id":{"type":"integer","description":"The ID of the property, if updating the property"},"name":{"type":"string","description":"The name of the property"}}}}},"example":{"product":{"name":"Heavy Duty Steel","current_path":null,"visible_in_store":true,"visible_in_customer_center":true,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"variant_ids":[22],"price_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"tag_ids":[1,2,3],"variant_properties":[{"id":1,"name":"Size"},{"id":2,"name":"Color"}]}}},"ProductsCollectionAttributes":{"type":"object","title":"Collections","description":"Collections","properties":{"id":{"type":"integer","description":"Numeric ID of the collection"},"public_id":{"type":["string","null"],"description":"Public ID is a string version of the numeric ID"},"workspace_id":{"type":"integer","description":"ID reference to the workspace to which the collection belongs"},"name":{"type":"string","description":"Name of the products collection"},"description":{"type":["string","null"],"description":"Description of the collection"},"collection_type":{"type":["string","null"],"description":"Type of the collection (manual or automatic)"},"product_ids":{"type":["array","null"],"description":"Array of product IDs in the collection. Updating with invalid or non-workspace product IDs will result in an error. If IDs from existing products in the collection are left out, they will be removed from the collection. You can also remove all the products from a collection by providing an empty array."},"sort_method":{"type":["string","null"],"enum":["manually","name_asc","name_desc","price_desc","price_asc","added_at_desc","added_at_asc","created_at_desc","created_at_asc",null],"description":"Method used to sort the products in the collection"},"archived":{"type":["boolean","null"],"description":"Whether the collection is archived"},"image_id":{"type":["string","null"],"description":"Collection image"},"visible_in_store":{"type":["boolean","null"],"description":"Whether the collection is visible in the online store"},"current_path":{"type":["string","null"],"description":"Current path of the collection"},"seo_title":{"type":["string","null"],"description":"Title of the collection for SEO purposes"},"seo_description":{"type":["string","null"],"description":"Description of the collection for SEO purposes"},"seo_indexable":{"type":["string","null"],"description":"Whether the collection is indexable by search engines"},"social_image_id":{"type":["string","null"],"description":"Image for social sharing"},"created_at":{"type":["string","null"],"description":"Date and time the collection was created"},"updated_at":{"type":["string","null"],"description":"Date and time the collection was last updated"}},"example":{"id":1,"public_id":"bkDhwu","workspace_id":42000,"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","archived":false,"image_id":null,"visible_in_store":true,"current_path":null,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","seo_indexable":null,"social_image_id":null,"created_at":null,"updated_at":null},"required":["archived","collection_type","created_at","current_path","description","id","image_id","name","product_ids","public_id","seo_description","seo_indexable","seo_title","social_image_id","sort_method","updated_at","visible_in_store","workspace_id"]},"ProductsCollectionParameters":{"type":"object","title":"Collections","description":"Collections","required":["name"],"properties":{"name":{"type":"string","description":"Name of the products collection"},"description":{"type":["string","null"],"description":"Description of the collection"},"collection_type":{"type":["string","null"],"description":"Type of the collection (manual or automatic)"},"product_ids":{"type":["array","null"],"description":"Array of product IDs in the collection. Updating with invalid or non-workspace product IDs will result in an error. If IDs from existing products in the collection are left out, they will be removed from the collection. You can also remove all the products from a collection by providing an empty array."},"sort_method":{"type":["string","null"],"enum":["manually","name_asc","name_desc","price_desc","price_asc","added_at_desc","added_at_asc","created_at_desc","created_at_asc",null],"description":"Method used to sort the products in the collection"},"image_id":{"type":["string","null"],"description":"Collection image"},"visible_in_store":{"type":["boolean","null"],"description":"Whether the collection is visible in the online store"},"seo_title":{"type":["string","null"],"description":"Title of the collection for SEO purposes"},"seo_description":{"type":["string","null"],"description":"Description of the collection for SEO purposes"},"social_image_id":{"type":["string","null"],"description":"Image for social sharing"}},"example":{"products_collection":{"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","image_id":null,"visible_in_store":true,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","social_image_id":null}}},"ProductsCollectionParametersUpdate":{"type":"object","title":"Collections","description":"Collections","required":[],"properties":{"name":{"type":"string","description":"Name of the products collection"},"description":{"type":["string","null"],"description":"Description of the collection"},"collection_type":{"type":["string","null"],"description":"Type of the collection (manual or automatic)"},"product_ids":{"type":["array","null"],"description":"Array of product IDs in the collection. Updating with invalid or non-workspace product IDs will result in an error. If IDs from existing products in the collection are left out, they will be removed from the collection. You can also remove all the products from a collection by providing an empty array."},"sort_method":{"type":["string","null"],"enum":["manually","name_asc","name_desc","price_desc","price_asc","added_at_desc","added_at_asc","created_at_desc","created_at_asc",null],"description":"Method used to sort the products in the collection"},"image_id":{"type":["string","null"],"description":"Collection image"},"visible_in_store":{"type":["boolean","null"],"description":"Whether the collection is visible in the online store"},"seo_title":{"type":["string","null"],"description":"Title of the collection for SEO purposes"},"seo_description":{"type":["string","null"],"description":"Description of the collection for SEO purposes"},"social_image_id":{"type":["string","null"],"description":"Image for social sharing"}},"example":{"products_collection":{"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","image_id":null,"visible_in_store":true,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","social_image_id":null}}},"ProductsPriceAttributes":{"type":"object","title":"Prices","description":"Prices","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"description":"Price public ID"},"variant_id":{"type":["integer","null"],"description":"Variant"},"name":{"type":["string","null"],"description":"Name"},"amount":{"type":"string","description":"Amount"},"cost":{"type":["string","null"],"description":"Cost"},"currency":{"type":"string","description":"Currency"},"duration":{"type":["integer","null"],"description":"Amount of payments"},"interval":{"type":["string","null"],"description":"Interval"},"trial_interval":{"type":["string","null"],"description":"Trial interval"},"trial_duration":{"type":["integer","null"],"description":"Trial duration"},"trial_amount":{"type":"string","description":"Trial Amount"},"setup_amount":{"type":["string","null"],"description":"Setup amount"},"self_cancel":{"type":["boolean","null"],"description":"Customer can cancel"},"self_upgrade":{"type":["boolean","null"],"description":"Customer can upgrade"},"self_downgrade":{"type":["boolean","null"],"description":"Customer can downgrade"},"self_reactivate":{"type":["boolean","null"],"description":"Customer can reactivate"},"interval_count":{"type":["integer","null"],"description":"Interval count"},"payment_type":{"type":["string","null"],"enum":["one_time","subscription","payment_plan",null],"description":"Defaults to 'one_time' if left blank"},"visible":{"type":["boolean","null"],"description":"Visible"},"compare_at_amount":{"type":["string","null"],"description":"Compare at amount"},"key":{"type":["string","null"],"description":"Key"},"archived":{"type":["boolean","null"],"description":"Archived"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":14,"public_id":"WpEGzF","variant_id":14,"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":null,"interval":null,"trial_interval":null,"trial_duration":null,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":null,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["amount","archived","compare_at_amount","cost","created_at","currency","duration","id","interval","interval_count","key","name","payment_type","public_id","self_cancel","self_downgrade","self_reactivate","self_upgrade","setup_amount","trial_amount","trial_duration","trial_interval","updated_at","variant_id","visible"]},"ProductsPriceParameters":{"type":"object","title":"Prices","description":"Prices","required":["amount"],"properties":{"name":{"type":["string","null"],"description":"Name"},"amount":{"type":"string","description":"Amount, as a decimal string. Omitting it does not fail — it silently creates a free price ('0.00') — so always send it."},"cost":{"type":["string","null"],"description":"Cost"},"currency":{"type":"string","description":"Currency. Ignored on write — a price always takes its workspace's currency, so sending a different one has no effect."},"duration":{"type":["integer","null"],"description":"Amount of payments. Required when payment_type is payment_plan; ignored for one_time and subscription."},"interval":{"type":["string","null"],"enum":["days","weeks","months","quarters","years",null],"description":"Billing period unit — note the values are plural ('months', not 'month'). Required when payment_type is subscription or payment_plan; ignored for one_time."},"trial_interval":{"type":["string","null"],"enum":["days","weeks","months","quarters","years",null],"description":"Trial period unit — same plural values as interval. An active recurring trial needs BOTH trial_interval and a positive trial_duration. Send both together: trial_duration alone is stored but inactive until trial_interval is added later, while trial_interval alone is cleared. Trial fields are cleared on a one_time price."},"trial_duration":{"type":["integer","null"],"description":"Length of the trial, in trial_interval units. Send a positive value together with trial_interval to create an active trial. Sent alone, it is stored but remains inactive until trial_interval is added later."},"trial_amount":{"type":["string","null"],"description":"Amount charged for the trial. Leave at '0.00' for a free trial, or set it above 0 for a paid one. Only applies when trial_interval and trial_duration are both set."},"setup_amount":{"type":["string","null"],"description":"Setup amount"},"self_cancel":{"type":["boolean","null"],"description":"Customer can cancel"},"self_upgrade":{"type":["boolean","null"],"description":"Customer can upgrade"},"self_downgrade":{"type":["boolean","null"],"description":"Customer can downgrade"},"self_reactivate":{"type":["boolean","null"],"description":"Customer can reactivate"},"interval_count":{"type":["integer","null"],"description":"How many intervals between charges — interval 'months' with interval_count 3 bills every 3 months. Required when payment_type is subscription or payment_plan."},"payment_type":{"type":["string","null"],"enum":["one_time","subscription","payment_plan",null],"description":"Defaults to 'one_time' if left blank"},"visible":{"type":["boolean","null"],"description":"Visible"},"compare_at_amount":{"type":["string","null"],"description":"Compare at amount"},"key":{"type":["string","null"],"description":"Key"},"archived":{"type":["boolean","null"],"description":"Archived"}},"example":{"products_price":{"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":null,"interval":null,"trial_interval":null,"trial_duration":null,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":null,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false}}},"ProductsPriceParametersUpdate":{"type":"object","title":"Prices","description":"Prices","required":[],"properties":{"name":{"type":["string","null"],"description":"Name"},"amount":{"type":"string","description":"Amount"},"cost":{"type":["string","null"],"description":"Cost"},"currency":{"type":"string","description":"Currency. Ignored on write — a price always takes its workspace's currency, so sending a different one has no effect."},"duration":{"type":["integer","null"],"description":"Amount of payments. Only used by a payment_plan price."},"interval":{"type":["string","null"],"enum":["days","weeks","months","quarters","years",null],"description":"Billing period unit — note the values are plural ('months', not 'month'). Only used by a subscription or payment_plan price."},"trial_interval":{"type":["string","null"],"enum":["days","weeks","months","quarters","years",null],"description":"Trial period unit — same plural values as interval. An active recurring trial needs this field and a positive trial_duration. Adding it to a price with a stored trial_duration activates the trial. Clearing only this field leaves the duration stored but inactive. Trial fields are cleared on a one_time price."},"trial_duration":{"type":["integer","null"],"description":"Length of the trial, in trial_interval units. A positive value sent alone is stored but inactive until trial_interval is added. Clearing this field removes the trial configuration."},"trial_amount":{"type":["string","null"],"description":"Amount charged for the trial. Leave at '0.00' for a free trial, or set it above 0 for a paid one. Only applies when trial_interval and trial_duration are both set."},"setup_amount":{"type":["string","null"],"description":"Setup amount"},"self_cancel":{"type":["boolean","null"],"description":"Customer can cancel"},"self_upgrade":{"type":["boolean","null"],"description":"Customer can upgrade"},"self_downgrade":{"type":["boolean","null"],"description":"Customer can downgrade"},"self_reactivate":{"type":["boolean","null"],"description":"Customer can reactivate"},"interval_count":{"type":["integer","null"],"description":"How many intervals between charges — interval 'months' with interval_count 3 bills every 3 months. Only used by a subscription or payment_plan price."},"payment_type":{"type":["string","null"],"enum":["one_time","subscription","payment_plan",null],"description":"Defaults to 'one_time' if left blank"},"visible":{"type":["boolean","null"],"description":"Visible"},"compare_at_amount":{"type":["string","null"],"description":"Compare at amount"},"key":{"type":["string","null"],"description":"Key"},"archived":{"type":["boolean","null"],"description":"Archived"}},"example":{"products_price":{"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":1,"interval":"months","trial_interval":"days","trial_duration":14,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":1,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false}}},"ProductsVariantAttributes":{"type":"object","title":"Variants","description":"Variants","properties":{"id":{"type":"integer","description":"ID"},"public_id":{"type":["string","null"],"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"},"product_type":{"type":"string","description":"`physical` or `digital`. Drives checkout behavior: a physical variant makes checkout collect a shipping address (and shipping options); a digital variant skips both. Unset behaves like digital at checkout, so set it to match the real-world goods.\n","enum":["physical","digital"]},"properties_value_ids":{"type":["array","null"],"minContains":0,"contains":{"type":"string"},"description":"Properties values"},"out_of_stock_sales":{"type":["string","null"],"description":"Out of stock sales"},"weight":{"type":["number","null"],"description":"Weight"},"weight_unit":{"type":"string","description":"Weight unit"},"height":{"type":["number","null"],"description":"Height"},"width":{"type":["number","null"],"description":"Width"},"length":{"type":["number","null"],"description":"Length"},"dimensions_unit":{"type":["string","null"],"description":"Dimensions unit"},"quantity":{"type":["integer","null"],"description":"Quantity"},"tag_ids":{"type":["array","null"],"minContains":0,"contains":{"type":"integer"},"description":"Tags"},"tax_category_id":{"type":["string","null"],"description":"Tax category ID"},"asset_ids":{"type":["array","null"],"description":"Digital-asset access. The IDs of the workspace Assets a purchase of this variant grants access to. See also `has_access_to_all_valid_assets`.","items":{"type":"integer"}},"has_access_to_all_valid_assets":{"type":["boolean","null"],"description":"When true, a purchase grants access to every valid Asset (rather than only the specific `asset_ids`)."},"included_courses":{"type":["array","null"],"description":"Course grants configured directly on this variant. This array excludes effective grants inherited from the product's default variant. Each entry links a Course; `full_access` is true for the whole course, otherwise `included_section_ids` lists the specific sections (partial access).","items":{"type":"object","properties":{"id":{"type":"integer","description":"The included-course grant ID (pass with _destroy to revoke)."},"course_id":{"type":"integer","description":"The ID of the granted Course."},"full_access":{"type":"boolean","description":"Whether the whole course is granted (vs. specific sections)."},"included_section_ids":{"type":"array","description":"The granted course section IDs. Always present; for full access it lists every non-root section, for partial access only the granted ones.","items":{"type":"integer"}}}}},"included_space_groups":{"type":["array","null"],"description":"Community Space Group grants configured directly on this variant. This array excludes effective grants inherited from the product's default variant. `spaces_mode` is \"all\" (the whole group) or \"specified\"; when specified, `included_space_ids` lists the spaces.","items":{"type":"object","properties":{"id":{"type":"integer","description":"The included-space-group grant ID (pass with _destroy to revoke)."},"communities_space_group_id":{"type":"integer","description":"The ID of the granted Community Space Group."},"spaces_mode":{"type":"string","description":"\"all\" (whole group) or \"specified\" (specific spaces)."},"included_space_ids":{"type":"array","description":"The granted community space IDs when spaces_mode is \"specified\".","items":{"type":"integer"}}}}},"taxable":{"type":["string","null"],"description":"Taxable"},"track_quantity":{"type":["boolean","null"],"description":"Track Quantity"},"archived":{"type":["boolean","null"],"description":"Archived"},"visible":{"type":["boolean","null"],"description":"Is visible"},"price_ids":{"type":["array","null"],"description":"Price IDs"},"fulfillment_required":{"type":["boolean","null"],"description":"Fulfillment required"},"country_of_manufacture_id":{"type":["string","null"],"description":"Country of manufacture"},"image_ids":{"type":["array","null"],"description":"The images for the variant."},"fulfillments_location_ids":{"type":["array","null"],"description":"The fulfillment locations for the variant."},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"default":{"type":["boolean","null"],"description":"Identifies if the variant is the default variant for the product."},"properties_values":{"type":["array","null"],"items":{"type":"object","title":"Properties Values","description":"Properties Values","properties":{"property_id":{"type":["integer","null"],"description":"The ID of the property"},"value":{"type":["string","null"],"description":"The value"}}},"description":"The property values of the Variant. e.g. 'Large', 'Red' etc."},"created_by_platform_application":{"type":"object","description":"The platform application that created the variant","properties":{"public_id":{"type":"string","description":"The public ID of the platform application"},"trusted_skus":{"type":"array","description":"Array of third party sources for which the SKUs can be relied on","items":{"type":"string"}}}}},"example":{"id":15,"public_id":"NRBUIp","product_id":24,"name":"Small Aluminum Gloves variant 393f","description":"Dolore provident unde quas.","sku":"LxbnGP0kqyqzQDTK","product_type":"physical","properties_value_ids":[null],"out_of_stock_sales":null,"weight":"24.0","weight_unit":"lb","height":"96.0","width":"418.0","length":"66.0","dimensions_unit":"inches","quantity":0,"tag_ids":[39],"tax_category_id":null,"asset_ids":[904],"has_access_to_all_valid_assets":false,"included_courses":[{"id":31,"course_id":42,"full_access":true,"included_section_ids":[301,302]}],"included_space_groups":[{"id":19,"communities_space_group_id":8,"spaces_mode":"all","included_space_ids":[]}],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"price_ids":[],"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[],"created_at":"2025-08-11T19:14:39.799Z","updated_at":"2025-08-11T19:14:39.799Z","default":false,"properties_values":[{"property_id":15,"value":"Red"}],"created_by_platform_application":null},"required":["archived","asset_ids","country_of_manufacture_id","created_at","created_by_platform_application","default","description","dimensions_unit","fulfillment_required","fulfillments_location_ids","has_access_to_all_valid_assets","height","id","image_ids","included_courses","included_space_groups","length","name","out_of_stock_sales","price_ids","product_id","product_type","properties_value_ids","properties_values","public_id","quantity","sku","tag_ids","tax_category_id","taxable","track_quantity","updated_at","visible","weight","weight_unit","width"]},"ProductsVariantParameters":{"type":"object","title":"Variants","description":"Variants","required":["name","product_type","weight_unit","properties_values"],"properties":{"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"},"product_type":{"type":"string","description":"`physical` or `digital`. Drives checkout behavior: a physical variant makes checkout collect a shipping address (and shipping options); a digital variant skips both. Unset behaves like digital at checkout, so set it to match the real-world goods.\n","enum":["physical","digital"]},"out_of_stock_sales":{"type":["boolean","null"],"description":"Out of stock sales"},"weight":{"type":["number","null"],"description":"Weight"},"weight_unit":{"type":"string","description":"Weight unit"},"height":{"type":["number","null"],"description":"Height"},"width":{"type":["number","null"],"description":"Width"},"length":{"type":["number","null"],"description":"Length"},"dimensions_unit":{"type":["string","null"],"description":"Dimensions unit"},"tax_category_id":{"type":["string","null"],"description":"Tax category ID"},"taxable":{"type":["string","null"],"description":"Taxable"},"track_quantity":{"type":["boolean","null"],"description":"Track Quantity"},"archived":{"type":["boolean","null"],"description":"Archived"},"visible":{"type":["boolean","null"],"description":"Is visible"},"fulfillment_required":{"type":["boolean","null"],"description":"Fulfillment required"},"country_of_manufacture_id":{"type":["string","null"],"description":"Country of manufacture"},"image_ids":{"type":["array","null"],"description":"The images for the variant."},"fulfillments_location_ids":{"type":["array","null"],"description":"The fulfillment locations for the variant."},"properties_values":{"type":"array","description":"The property values of the Variant. e.g. 'Large', 'Red' etc.","items":{"type":"object","properties":{"property_id":{"type":"integer","description":"The ID of the property"},"value":{"type":"string","description":"The value"}}}},"has_access_to_all_valid_assets":{"type":["boolean","null"],"description":"All-or-nothing digital-asset access. When true, a purchase grants access to every valid Asset. Set false and pass `asset_ids` to grant only specific ones."},"asset_ids":{"type":["array","null"],"description":"Digital-asset access. The IDs of workspace Assets a purchase of this variant should grant access to. Pair with `has_access_to_all_valid_assets` (set it false to grant only these). On update this replaces the current set.","items":{"type":"integer"}},"included_courses_attributes":{"type":"array","description":"Course access to grant. Each entry links a Course by `course_id`; a purchase grants access to it. When creating a grant, omit `included_sections_attributes` for FULL-course access, or list specific sections for PARTIAL access. On an existing grant, omitting sections does NOT convert partial access to full; manage sections explicitly (add via `courses_section_id`, remove via `id` + `_destroy`). To revoke the whole grant, pass its `id` with `_destroy` set to true.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Existing grant ID (for update/removal)."},"_destroy":{"type":"boolean","description":"Pass true (with id) to revoke the grant."},"course_id":{"type":"integer","description":"The ID of the Course to grant access to."},"included_sections_attributes":{"type":"array","description":"Specific sections for partial-course access.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Existing included-section ID (for update/removal)."},"_destroy":{"type":"boolean","description":"Pass true (with id) to remove the section grant."},"courses_section_id":{"type":"integer","description":"The ID of the course section to grant."}}}}}}},"included_space_groups_attributes":{"type":"array","description":"Community access to grant. Each entry links a Community Space Group by `communities_space_group_id`; a purchase grants access to the whole group. To revoke, pass the grant's `id` with `_destroy` set to true.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Existing grant ID (for update/removal)."},"_destroy":{"type":"boolean","description":"Pass true (with id) to revoke the grant."},"communities_space_group_id":{"type":"integer","description":"The ID of the Community Space Group to grant access to."}}}}},"example":{"products_variant":{"name":"Small Aluminum Gloves variant 393f","description":"Dolore provident unde quas.","sku":"LxbnGP0kqyqzQDTK","product_type":"physical","out_of_stock_sales":true,"weight":"24.0","weight_unit":"lb","height":"96.0","width":"418.0","length":"66.0","dimensions_unit":"inches","tax_category_id":null,"has_access_to_all_valid_assets":false,"asset_ids":[904],"included_courses_attributes":[{"course_id":42}],"included_space_groups_attributes":[{"communities_space_group_id":8}],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[]}}},"ProductsVariantParametersUpdate":{"type":"object","title":"Variants","description":"Variants","required":[],"properties":{"name":{"type":"string","description":"Variant 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"},"product_type":{"type":"string","description":"Product type"},"out_of_stock_sales":{"type":["boolean","null"],"description":"Out of stock sales"},"weight":{"type":["number","null"],"description":"Weight"},"weight_unit":{"type":"string","description":"Weight unit"},"height":{"type":["number","null"],"description":"Height"},"width":{"type":["number","null"],"description":"Width"},"length":{"type":["number","null"],"description":"Length"},"dimensions_unit":{"type":["string","null"],"description":"Dimensions unit"},"tax_category_id":{"type":["string","null"],"description":"Tax category ID"},"taxable":{"type":["string","null"],"description":"Taxable"},"track_quantity":{"type":["boolean","null"],"description":"Track Quantity"},"archived":{"type":["boolean","null"],"description":"Archived"},"visible":{"type":["boolean","null"],"description":"Is visible"},"fulfillment_required":{"type":["boolean","null"],"description":"Fulfillment required"},"country_of_manufacture_id":{"type":["string","null"],"description":"Country of manufacture"},"image_ids":{"type":["array","null"],"description":"The images for the variant."},"fulfillments_location_ids":{"type":["array","null"],"description":"The fulfillment locations for the variant."},"properties_values":{"type":"array","description":"The property values of the Variant. e.g. 'Large', 'Red' etc.","items":{"type":"object","properties":{"property_id":{"type":"integer","description":"The ID of the property"},"value":{"type":"string","description":"The value"}}}},"has_access_to_all_valid_assets":{"type":["boolean","null"],"description":"All-or-nothing digital-asset access. When true, a purchase grants access to every valid Asset. Set false and pass `asset_ids` to grant only specific ones."},"asset_ids":{"type":["array","null"],"description":"Digital-asset access. The IDs of workspace Assets a purchase of this variant should grant access to. Pair with `has_access_to_all_valid_assets` (set it false to grant only these). This replaces the current set.","items":{"type":"integer"}},"included_courses_attributes":{"type":"array","description":"Course access to grant. Each entry links a Course by `course_id`; a purchase grants access to it. When creating a grant, omit `included_sections_attributes` for FULL-course access, or list specific sections for PARTIAL access. On an existing grant, omitting sections does NOT convert partial access to full; manage sections explicitly (add via `courses_section_id`, remove via `id` + `_destroy`). To revoke the whole grant, pass its `id` with `_destroy` set to true.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Existing grant ID (for update/removal)."},"_destroy":{"type":"boolean","description":"Pass true (with id) to revoke the grant."},"course_id":{"type":"integer","description":"The ID of the Course to grant access to."},"included_sections_attributes":{"type":"array","description":"Specific sections for partial-course access.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Existing included-section ID (for update/removal)."},"_destroy":{"type":"boolean","description":"Pass true (with id) to remove the section grant."},"courses_section_id":{"type":"integer","description":"The ID of the course section to grant."}}}}}}},"included_space_groups_attributes":{"type":"array","description":"Community access to grant. Each entry links a Community Space Group by `communities_space_group_id`; a purchase grants access to the whole group. To revoke, pass the grant's `id` with `_destroy` set to true.","items":{"type":"object","properties":{"id":{"type":"integer","description":"Existing grant ID (for update/removal)."},"_destroy":{"type":"boolean","description":"Pass true (with id) to revoke the grant."},"communities_space_group_id":{"type":"integer","description":"The ID of the Community Space Group to grant access to."}}}}},"example":{"products_variant":{"name":"Heavy Duty Steel variant","description":"Dolore provident unde quas.","sku":"LxbnGP0kqyqzQDTK","product_type":"physical","out_of_stock_sales":true,"weight":"24.0","weight_unit":"lb","height":"96.0","width":"418.0","length":"66.0","dimensions_unit":"inches","tax_category_id":null,"has_access_to_all_valid_assets":false,"asset_ids":[904],"included_courses_attributes":[{"id":31,"course_id":42,"included_sections_attributes":[{"courses_section_id":301}]}],"included_space_groups_attributes":[{"id":19,"_destroy":true}],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[]}}},"ProductsTagAttributes":{"type":"object","title":"Product Tags","description":"Product 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":40,"public_id":"rROAYE","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"]},"ProductsTagParameters":{"type":"object","title":"Product Tags","description":"Product Tags","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"color":{"type":"string","description":"The color of the product tag"}},"example":{"products_tag":{"name":"Example Tag","color":"#FF5733"}}},"ProductsTagParametersUpdate":{"type":"object","title":"Product Tags","description":"Product Tags","required":[],"properties":{"name":{"type":"string","description":"Name of the product tag"},"color":{"type":"string","description":"The color of the product tag"}},"example":{"products_tag":{"name":"Example Product Tag","color":"#FF5733"}}},"RefineFilterCriterion":{"type":"object","title":"Refine Filter Criterion","description":"A single filter criterion consisting of an attribute, a comparison clause, and a value.","properties":{"attribute":{"type":"string","description":"The contact attribute to filter on (e.g. `tags.id`, `created_at`, `email_address`).\nThe public API restricts attributes to a [safe whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist) — see the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md) for the full reference.\n","example":"tags.id"},"clause":{"type":"string","description":"The comparison operator for this criterion (e.g. `in`, `eq`, `gte`, `lte`, `st`, `nst`).\nAllowed clauses depend on the attribute. Text attributes (`email_address`, `first_name`, `last_name`) only accept `eq` and `sw` on the public API; see the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist).\n","example":"in"},"value":{"description":"The comparison value. Type depends on the attribute and clause:\n- **Option conditions** (tags, products, etc.): a single opaque public id string, or an array of public id strings.\n- **Date/datetime conditions**: an ISO 8601 date string (`\"2026-01-01\"`) or datetime string (`\"2026-01-01T00:00:00Z\"`).\n  For `between`/`not_between` clauses supply an array of exactly two date strings.\n  For relative `gt`, `lt`, or `exct` clauses supply an object with `days` and a `modifier` of `ago` or `from_now`.\n- **Text/numeric conditions**: a plain string or number.\n- **Set/not-set clauses**: omit `value` entirely.\n","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"object","required":["days","modifier"],"properties":{"days":{"oneOf":[{"type":"string"},{"type":"integer"}],"description":"Number of days used by a relative date clause."},"modifier":{"type":"string","enum":["ago","from_now"]}}}],"example":["tag-pub-id-1","tag-pub-id-2"]}}},"RefineFilterAttributes":{"type":"object","title":"Refine Filter","description":"A reusable workspace-scoped audience filter composed of one or more criteria joined by a single conjunction.\n\nPublic API requests are validated against a [safe-condition whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist); criteria outside the whitelist return 422 with a pointer to the developer community.\n","externalDocs":{"description":"Refine Filters Skill - attributes, clauses, and worked examples","url":"https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md"},"properties":{"id":{"type":"integer","description":"Refine Filter ID"},"public_id":{"type":"string","description":"Obfuscated Refine Filter ID"},"workspace_id":{"type":"integer","description":"ID of the workspace this filter belongs to"},"name":{"type":["string","null"],"description":"Optional human-readable name for the filter. Must be unique within the workspace when set."},"filter_class":{"type":["string","null"],"description":"The filter class recorded on the saved filter. This API authors `ContactsFilter` and applies `ContactsFilter` and `OrdersFilter`, but the list returns every saved filter in the workspace, and other ClickFunnels surfaces save their own classes here — `ContactsSegmentsFilter`, `ProductsFilter`, `FunnelsFilter` and `ContactUpsellsFilter` all appear in real workspaces. Treat this as an open set: match on the class you want rather than assuming the rest are absent. `null` for a legacy row whose stored state can no longer be decoded (such rows also return empty `criteria`; they can still be deleted).","example":"ContactsFilter"},"conjunction":{"type":"string","enum":["and","or"],"description":"How the criteria are joined — `and` (all must match) or `or` (any must match)."},"results":{"$ref":"#/components/schemas/FilterResults"},"criteria":{"type":"array","description":"Ordered list of filter criteria.","items":{"$ref":"#/components/schemas/RefineFilterCriterion"}},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"}},"example":{"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"]},{"attribute":"created_at","clause":"gte","value":"2026-01-01"}],"created_at":"2026-04-01T12:00:00.000Z","updated_at":"2026-04-01T12:00:00.000Z"},"required":["conjunction","created_at","criteria","filter_class","id","name","public_id","updated_at","workspace_id"]},"RefineFilterParametersCreate":{"type":"object","title":"Create Refine Filter","description":"Parameters for creating a new RefineFilter. The `criteria` array must contain at least one entry.\nEach criterion requires `attribute` and `clause`; `value` may be omitted for set/not-set clauses.\n\n### Supported conditions (public API)\n\nThe public API restricts criteria to the safe whitelist below. Requests\noutside this set return 422 with a pointer to the dev community for\nnew-condition requests.\n\n| Condition                                                                        | Allowed clauses                                                  | Notes                                                              |\n|----------------------------------------------------------------------------------|-------------------------------------------------------------------|--------------------------------------------------------------------|\n| `email_address`, `first_name`, `last_name`                                       | `eq`, `sw`                                                        | Text — equals \u0026 starts_with only.                                  |\n| `anonymous`                                                                      | `eq`, `dne`                                                       | Boolean-style option.                                              |\n| `created_at`, `unsubscribed_at`, `last_activity`                                | All standard date clauses                                         | Indexed datetime columns.                                          |\n| `tags.id`                                                                        | `eq`, `dne`, `in`, `nin`                                          | Tag membership — must reference workspace-owned tag ids.           |\n| `has_affiliate_attribution`, `has_active_affiliate_attribution`, `referred_by_affiliate` | All standard clauses                                  | Affiliate attribution lookups.                                     |\n| `email_suppression`                                                              | `st`, `nst`, `eq`, `in`                                           | Email suppression set/not-set or membership.                       |\n| `received_broadcast`, `opened_broadcast`, `clicked_broadcast`                   | `eq`, `in`                                                        | **Must include a specific broadcast id.**                          |\n| `opted_in_funnel_step`, `opted_in_funnel_at`, `opted_in_on_standalone_page`     | `eq`, `in`                                                        | **Must include a specific funnel/step/page id.**                   |\n\nConjunction is restricted to `and`. See the full reference at the\n[Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist).\n","required":["refine_filter"],"properties":{"refine_filter":{"type":"object","required":["criteria"],"properties":{"name":{"type":"string","description":"Optional human-readable name. Must be unique within the workspace when provided."},"filter_class":{"type":"string","description":"Filter class. Defaults to `ContactsFilter` (the only supported class).","default":"ContactsFilter"},"conjunction":{"type":"string","enum":["and","or"],"description":"Join operator for all criteria. Defaults to `and`.","default":"and"},"criteria":{"type":"array","minItems":1,"description":"Non-empty array of filter criteria.","items":{"type":"object","required":["attribute","clause"],"properties":{"attribute":{"type":"string","description":"Contact attribute to filter on (e.g. `tags.id`, `created_at`, `email`)."},"clause":{"type":"string","description":"Comparison operator (e.g. `in`, `equals`, `gte`, `set`)."},"value":{"description":"Comparison value. Relative date clauses use an object with `days` and `modifier`. Omit for set/not-set clauses.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"object","required":["days","modifier"],"properties":{"days":{"oneOf":[{"type":"string"},{"type":"integer"}]},"modifier":{"type":"string","enum":["ago","from_now"]}}}]}}}}}},"results":{"$ref":"#/components/schemas/FilterResultsParameter"}},"example":{"refine_filter":{"name":"VIP newsletter audience","filter_class":"ContactsFilter","conjunction":"and","criteria":[{"attribute":"tags.id","clause":"in","value":["tag-pub-id-1","tag-pub-id-2"]},{"attribute":"purchased_products.id","clause":"equals","value":"prod-pub-id"},{"attribute":"created_at","clause":"gte","value":"2026-01-01T00:00:00Z"}]}}},"RefineFilterParametersUpdate":{"type":"object","title":"Update Refine Filter","description":"Parameters for updating an existing RefineFilter. All fields are optional — only provided\nfields are updated. When `criteria` is supplied it **replaces** the entire criteria set.\n\nReplacement criteria must satisfy the same safe-condition whitelist enforced on create.\nSee [Safe condition whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist) for the full reference.\n","required":["refine_filter"],"properties":{"refine_filter":{"type":"object","properties":{"name":{"type":"string","description":"New name for the filter. Must be unique within the workspace."},"conjunction":{"type":"string","enum":["and","or"],"description":"Replacement join operator for all criteria."},"criteria":{"type":"array","minItems":1,"description":"Replacement criteria array. Must contain at least one entry.","items":{"type":"object","required":["attribute","clause"],"properties":{"attribute":{"type":"string"},"clause":{"type":"string"},"value":{"description":"Comparison value. Relative date clauses use an object with `days` and `modifier`. Omit for set/not-set clauses.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}},{"type":"object","required":["days","modifier"],"properties":{"days":{"oneOf":[{"type":"string"},{"type":"integer"}]},"modifier":{"type":"string","enum":["ago","from_now"]}}}]}}}}}},"results":{"$ref":"#/components/schemas/FilterResultsParameter"}},"example":{"refine_filter":{"conjunction":"and","criteria":[{"attribute":"tags.id","clause":"in","value":["tag-pub-id-1"]},{"attribute":"created_at","clause":"gte","value":"2026-01-01"}]}}},"SalesPipelineAttributes":{"type":"object","title":"Pipelines","description":"Pipelines","properties":{"id":{"type":"integer","description":"Pipeline ID"},"public_id":{"type":["string","null"],"description":"Pipeline public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Pipeline name"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"},"total_value":{"type":["integer","null"],"description":"Total value of the opportunities"},"stages":{"type":["array","null"],"items":{"type":"object","title":"Pipelines","description":"Pipelines","properties":{"id":{"type":"integer","description":"Pipeline ID"},"public_id":{"type":["string","null"],"description":"Pipeline public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"pipeline_id":{"type":"integer","description":"Pipeline ID"},"name":{"type":"string","description":"Pipeline name"},"sort_order":{"type":["integer","null"],"description":"The position of the stage in the pipeline"},"close_probability":{"type":["number","null"],"description":"Close probability of the opportunities in this stage"},"opportunity_ids":{"type":["array","null"],"minContains":0,"contains":{"type":"integer"},"description":"Opportunities in this stage"},"total_value":{"type":["integer","null"],"description":"Total value of the opportunities"},"weighted_value":{"type":["number","null"],"description":"A calculation of the weighted value of all opportunities in this stage"}}},"description":"Stages in the pipeline"}},"example":{"id":1,"public_id":"LbCUlW","workspace_id":42000,"name":"Example Pipeline","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"stages":[{"id":35,"public_id":"LNKqFC","workspace_id":2,"pipeline_id":1,"name":"Example Stage","sort_order":1,"close_probability":20.0,"opportunity_ids":[1,2],"total_value":0,"weighted_value":0.0},{"id":36,"public_id":"vhICuX","workspace_id":2,"pipeline_id":1,"name":"Example Stage","sort_order":2,"close_probability":20.0,"opportunity_ids":[3,4],"total_value":0,"weighted_value":0.0}]},"required":["created_at","id","name","public_id","stages","total_value","updated_at","workspace_id"]},"SalesPipelineParameters":{"type":"object","title":"Pipelines","description":"Pipelines","required":["name","stages_attributes"],"properties":{"name":{"type":"string","description":"Pipeline name"},"stages_attributes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the stage"},"close_probability":{"type":"integer","description":"The probability of closing a deal in this stage"}}},"description":"The stages of the pipeline. The stages are ordered by the position attribute."}},"example":{"name":"Example Pipeline","stages_attributes":[{"name":"New Leads","close_probability":20},{"name":"Closed Won","close_probability":100}]}},"SalesPipelineParametersUpdate":{"type":"object","title":"Pipelines","description":"Pipelines","required":[],"properties":{"name":{"type":"string","description":"Pipeline name"},"stages_attributes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the stage"},"close_probability":{"type":"integer","description":"The probability of closing a deal in this stage"}}},"description":"The stages of the pipeline. The stages are ordered by the position attribute."}},"example":{"sales_pipeline":{"name":"Example Pipeline"}}},"SalesPipelinesStageAttributes":{"type":"object","title":"Stages","description":"Stages","properties":{"id":{"type":"integer","description":"Stage ID"},"public_id":{"type":["string","null"],"description":"Stage public ID"},"workspace_id":{"type":["integer","null"],"description":"Workspace ID"},"pipeline_id":{"type":"integer","description":"Pipeline ID"},"name":{"type":"string","description":"Stage name"},"sort_order":{"type":["integer","null"],"description":"The position of the stage in the pipeline. The stages are ordered by the sort order attribute, starting at zero.\nIf not provided, the stage will be added at the end of the pipeline.\nIf provided, the stage will be inserted at the specified position, and the sort order of the subsequent stages will be incremented by one.\n"},"close_probability":{"type":"number","description":"Close probability of the opportunities in this stage"},"opportunity_ids":{"type":["array","null"],"minContains":0,"contains":{"type":"integer"},"description":"Opportunity IDs of all opportunities currently belonging to this stage"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"},"total_value":{"type":["integer","null"],"description":"Total value of all opportunities in this stage"},"weighted_value":{"type":["number","null"],"description":"A calculation of the weighted value of all opportunities in this stage"}},"example":{"id":39,"public_id":"bGXvFU","workspace_id":3,"pipeline_id":2,"name":"Example Stage","sort_order":5,"close_probability":20.0,"opportunity_ids":[9,10],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"weighted_value":0.0},"required":["close_probability","created_at","id","name","opportunity_ids","pipeline_id","public_id","sort_order","total_value","updated_at","weighted_value","workspace_id"]},"SalesPipelinesStageParameters":{"type":"object","title":"Stages","description":"Stages","required":["name","close_probability"],"properties":{"name":{"type":"string","description":"Stage name"},"sort_order":{"type":["integer","null"],"description":"The position of the stage in the pipeline. The stages are ordered by the sort order attribute, starting at zero.\nIf not provided, the stage will be added at the end of the pipeline.\nIf provided, the stage will be inserted at the specified position, and the sort order of the subsequent stages will be incremented by one.\n"},"close_probability":{"type":"number","description":"Close probability of the opportunities in this stage"}},"example":{"sales_pipelines_stage":{"name":"Example Stage","sort_order":5,"close_probability":20.0}}},"SalesPipelinesStageParametersUpdate":{"type":"object","title":"Stages","description":"Stages","required":[],"properties":{"name":{"type":"string","description":"Stage name"},"sort_order":{"type":["integer","null"],"description":"The position of the stage in the pipeline. The stages are ordered by the sort order attribute, starting at zero.\nIf not provided, the stage will be added at the end of the pipeline.\nIf provided, the stage will be inserted at the specified position, and the sort order of the subsequent stages will be incremented by one.\n"},"close_probability":{"type":["number","null"],"description":"Close probability of the opportunities in this stage"}},"example":{"sales_pipelines_stage":{"name":"Example Stage","sort_order":5,"close_probability":20}}},"SalesOpportunityAttributes":{"type":"object","title":"Opportunities","description":"Opportunities","properties":{"id":{"type":"integer","description":"Opportunity ID"},"public_id":{"type":["string","null"],"description":"Opportunity public ID"},"name":{"type":"string","description":"Name"},"workspace_id":{"type":"integer","description":"Workspace ID"},"pipeline_id":{"type":["string","null"],"description":"Pipeline ID"},"pipelines_stage_id":{"type":"integer","description":"Pipeline Stage"},"primary_contact_id":{"type":"integer","description":"Primary Contact"},"value":{"type":["number","null"],"description":"The potential value of this opportunity in the default currency of the workspace"},"sort_order":{"type":["integer","null"],"description":"The position of the opportunity in its pipeline stage"},"closed_at":{"type":["string","null"],"format":"date-time","description":"Close date"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"},"pipeline":{"type":"object","description":"Pipeline Details","properties":{"id":{"type":"integer","description":"Pipeline public ID"},"public_id":{"type":"string","description":"Pipeline Stage Public ID"},"name":{"type":"string","description":"The name of the pipeline"}}},"pipelines_stage":{"type":"object","description":"Pipeline Stage Details","properties":{"id":{"type":"integer","description":"Pipeline Stage ID"},"public_id":{"type":"string","description":"Pipeline Stage public ID"},"name":{"type":"string","description":"Name"}}},"primary_contact":{"type":"object","title":"Contacts","description":"Contact","properties":{"id":{"type":"integer","description":"Contact ID"},"public_id":{"type":["string","null"],"description":"Contact public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"anonymous":{"type":["integer","null"],"description":"Anonymous"},"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"},"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"},"deleted_at":{"type":["string","null"],"format":"date-time","description":"When the contact was deleted. Null when the contact has not been deleted."},"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","null"],"description":"Date added"},"updated_at":{"type":["string","null"],"description":"Last updated"},"tags":{"type":["array","null"],"minContains":0,"contains":{"type":"object","properties":{"id":{"type":"integer","description":"Tag ID"},"public_id":{"type":"string","description":"Tag public ID"},"name":{"type":"string","description":"Tag name"},"color":{"type":"string","description":"Tag color"},"applied_at":{"type":"string","description":"The datetime the tag was applied by creating a Contacts::AppliedTag that maps the tag to the contact."}}},"description":"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","null"],"properties":{"CustomKey":{"type":"string","description":"Custom Attribute Key"}},"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"}}},"assignee_id":{"type":["string","null"],"description":"The ID of the Team-`Membership` to whom the opportunity is assigned."},"notes":{"type":["array","null"],"items":{"type":"object","title":"Sales Note","description":"Sales Note","properties":{"id":{"type":"integer","description":"Note ID"},"public_id":{"type":["string","null"],"description":"Note public ID"},"content":{"type":"string","description":"Content"},"created_by_id":{"type":["integer","null"],"description":"The ID of the Team-`Membership` that created the note.\nFor notes created via the API, this defaults to the ClickFunnels API default User."},"created_at":{"type":["string","null"],"format":"date-time","description":"Note creation date"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Note last updated date"}}},"description":"Notes"}},"example":{"id":17,"public_id":"eMKZhP","name":"Example Opportunity","workspace_id":42000,"pipeline_id":null,"pipelines_stage_id":42,"primary_contact_id":26,"value":"100.0","sort_order":0,"closed_at":"2025-01-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","pipeline":{"id":3,"public_id":"KIaXjp","name":"Example Pipeline"},"pipelines_stage":{"id":42,"public_id":"rebCDY","name":"Example Stage"},"primary_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,"deleted_at":null,"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"}}},"assignee_id":null,"notes":[{"id":33,"public_id":"TNibqR","content":"Example note","created_by_id":37,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":34,"public_id":"jrHtbW","content":"Example note","created_by_id":38,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]},"required":["assignee_id","closed_at","created_at","id","name","notes","pipeline","pipeline_id","pipelines_stage","pipelines_stage_id","primary_contact","primary_contact_id","public_id","sort_order","updated_at","value","workspace_id"]},"SalesOpportunityParameters":{"type":"object","title":"Opportunities","description":"Opportunities","required":["name","pipelines_stage_id","primary_contact_id"],"properties":{"name":{"type":"string","description":"Name"},"pipelines_stage_id":{"type":"integer","description":"Pipeline Stage"},"primary_contact_id":{"type":"integer","description":"Primary Contact"},"value":{"type":["number","null"],"description":"The potential value of this opportunity in the default currency of the workspace"},"closed_at":{"type":["string","null"],"format":"date-time","description":"Close date"},"assignee_id":{"type":"integer","description":"The ID of the Team `Membership` to assign the Opportunity to.\nAn Opportunity can be assigned to any Team member since they have access to all your workspaces.\nYou can get a list of available Memberships and their `id` via the `Team` resource's `memberships` property.\n\nIf the opportunity is already assigned to a team member, the assignee will be updated.\nYou can unset the assignee by passing a `null` value for `assignee_id`.\n"}},"example":{"sales_opportunity":{"name":"Example Opportunity","pipelines_stage_id":42,"primary_contact_id":26,"value":"100.0","closed_at":"2025-01-01T00:00:00.000Z","assignee_id":42}}},"SalesOpportunityParametersUpdate":{"type":"object","title":"Opportunities","description":"Opportunities","required":[],"properties":{"name":{"type":"string","description":"Name"},"pipelines_stage_id":{"type":"integer","description":"Pipeline Stage ID"},"primary_contact_id":{"type":"integer","description":"Primary Contact ID"},"value":{"type":["number","null"],"description":"The potential value of this opportunity in the default currency of the workspace"},"closed_at":{"type":["string","null"],"format":"date-time","description":"Close date"},"assignee_id":{"type":"integer","description":"The ID of the Team `Membership` to assign the Opportunity to.\nAn Opportunity can be assigned to any Team member since they have access to all your workspaces.\nYou can get a list of available Memberships and their `id` via the `Team` resource's `memberships` property.\n\nIf the opportunity is already assigned to a team member, the assignee will be updated.\nYou can unset the assignee by passing a `null` value for `assignee_id`.\n"}},"example":{"sales_opportunity":{"name":"Example Opportunity","pipelines_stage_id":123,"primary_contact_id":123,"value":"100.0","closed_at":"2025-01-01T00:00:00.000Z","assignee_id":42}}},"SalesOpportunitiesNoteAttributes":{"type":"object","title":"Notes","description":"Notes","properties":{"id":{"type":"integer","description":"Note ID"},"public_id":{"type":["string","null"],"description":"Note public ID"},"opportunity_id":{"type":"integer","description":"Opportunity"},"content":{"type":"string","description":"Content"},"created_by_id":{"type":["integer","null"],"description":"The ID of the Team-`Membership` that created the note.\nFor notes created via the API, this defaults to the ClickFunnels API default User."},"created_at":{"type":["string","null"],"format":"date-time","description":"Note creation date"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Note last updated date"}},"example":{"id":49,"public_id":"zAUjDv","opportunity_id":24,"content":"Example note","created_by_id":53,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["content","created_at","created_by_id","id","opportunity_id","public_id","updated_at"]},"SalesOpportunitiesNoteParameters":{"type":"object","title":"Notes","description":"Notes","required":["content"],"properties":{"content":{"type":"string","description":"Content"},"created_by_id":{"type":"integer","description":"The ID of the Team-Membership that created the note. When creating notes via the API, this defaults to the ClickFunnels API default User's Membership ID. You can retrieve a list of available Memberships and their id via the Team resource's memberships property.\n"}},"example":{"sales_opportunities_note":{"content":"Example note","created_by_id":42}}},"SalesOpportunitiesNoteParametersUpdate":{"type":"object","title":"Notes","description":"Notes","required":[],"properties":{"content":{"type":"string","description":"Content"},"created_by_id":{"type":"integer","description":"The ID of the Team-Membership that created the note. When creating notes via the API, this defaults to the ClickFunnels API default User's Membership ID. You can retrieve a list of available Memberships and their id via the Team resource's memberships property.\n"}},"example":{"sales_opportunities_note":{"content":"Example Note","created_by_id":42}}},"ShippingLocationGroupAttributes":{"type":"object","title":"Location groups","description":"Location groups","properties":{"id":{"type":"integer","description":"Location group ID"},"public_id":{"type":["string","null"],"description":"Location group public ID"},"profile_id":{"type":"integer","description":"Profile ID"},"name":{"type":"string","description":"Name"},"fulfillments_location_ids":{"type":["array","null"],"description":"Fulfillments Locations"},"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":"UsrOxZ","profile_id":1,"name":"Example Location Group","fulfillments_location_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","fulfillments_location_ids","id","name","profile_id","public_id","updated_at"]},"ShippingLocationGroupParameters":{"type":"object","title":"Location groups","description":"Location groups","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"fulfillments_location_ids":{"type":["array","null"],"description":"Fulfillments Locations"}},"example":{"shipping_location_group":{"name":"Example Location Group","fulfillments_location_ids":[]}}},"ShippingLocationGroupParametersUpdate":{"type":"object","title":"Location groups","description":"Location groups","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"fulfillments_location_ids":{"type":["array","null"],"description":"Fulfillments Locations"}},"example":{"shipping_location_group":{"name":"Example Location Group","fulfillments_location_ids":[]}}},"ShippingPackageAttributes":{"type":"object","title":"Packages","description":"Packages","properties":{"id":{"type":"integer","description":"Package ID"},"public_id":{"type":["string","null"],"description":"Package public ID"},"package_type":{"type":"string","enum":["box","envelope","soft_package"],"description":"Package Type"},"height":{"type":"number","description":"Height"},"width":{"type":"number","description":"Width"},"length":{"type":"number","description":"Length"},"distance_unit":{"type":"string","enum":["in","cm","ft","m","mm"],"description":"Distance Unit"},"empty_weight":{"type":["string","null"],"description":"Empty Weight"},"weight":{"type":["number","null"],"description":"Weight"},"weight_unit":{"type":["string","null"],"enum":["lb","kg","g","oz",null],"description":"Weight Unit"},"default_package":{"type":["boolean","null"],"description":"Default Package"},"name":{"type":"string","description":"Name"},"token":{"type":["string","null"],"description":"Token"},"carrier":{"type":["string","null"],"enum":["fedex","ups","usps",null],"description":"Carrier"},"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":"EpuezP","package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","token":null,"carrier":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["carrier","created_at","default_package","distance_unit","empty_weight","height","id","length","name","package_type","public_id","token","updated_at","weight","weight_unit","width"]},"ShippingPackageParameters":{"type":"object","title":"Packages","description":"Packages","required":["package_type","height","width","length","distance_unit","name"],"properties":{"package_type":{"type":"string","enum":["box","envelope","soft_package"],"description":"Package Type"},"height":{"type":"number","description":"Height"},"width":{"type":"number","description":"Width"},"length":{"type":"number","description":"Length"},"distance_unit":{"type":"string","enum":["in","cm","ft","m","mm"],"description":"Distance Unit"},"empty_weight":{"type":["string","null"],"description":"Empty Weight"},"weight":{"type":["number","null"],"description":"Weight"},"weight_unit":{"type":["string","null"],"enum":["lb","kg","g","oz",null],"description":"Weight Unit"},"default_package":{"type":["boolean","null"],"description":"Default Package"},"name":{"type":"string","description":"Name"},"carrier":{"type":["string","null"],"enum":["fedex","ups","usps",null],"description":"Carrier"}},"example":{"shipping_package":{"package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","carrier":null}}},"ShippingPackageParametersUpdate":{"type":"object","title":"Packages","description":"Packages","required":[],"properties":{"package_type":{"type":"string","description":"Package Type","enum":["box","envelope","soft_package"]},"height":{"type":"number","description":"Height"},"width":{"type":"number","description":"Width"},"length":{"type":"number","description":"Length"},"distance_unit":{"type":"string","description":"Distance Unit"},"empty_weight":{"type":["string","null"],"description":"Empty Weight"},"weight":{"type":["number","null"],"description":"Weight"},"weight_unit":{"type":["string","null"],"enum":["lb","kg","g","oz",null],"description":"Weight Unit"},"default_package":{"type":["boolean","null"],"description":"Default Package"},"name":{"type":"string","description":"Name"},"carrier":{"type":["string","null"],"enum":["fedex","ups","usps",null],"description":"Carrier"}},"example":{"shipping_package":{"package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","carrier":null}}},"ShippingProfileAttributes":{"type":"object","title":"Profiles","description":"Profiles","properties":{"id":{"type":"integer","description":"Profile ID"},"public_id":{"type":["string","null"],"description":"Profile public ID"},"name":{"type":"string","description":"Name"},"variant_ids":{"type":["array","null"],"description":"Variant IDs"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":2,"public_id":"XGHEUg","name":"Example Shipping Profile","variant_ids":[],"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","variant_ids"]},"ShippingProfileParameters":{"type":"object","title":"Profiles","description":"Profiles","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"variant_ids":{"type":["array","null"],"description":"Variant IDs"}},"example":{"shipping_profile":{"name":"Example Shipping Profile","variant_ids":[]}}},"ShippingProfileParametersUpdate":{"type":"object","title":"Profiles","description":"Profiles","required":[],"properties":{"name":{"type":"string","description":"Name"},"variant_ids":{"type":["array","null"],"description":"Variant IDs"}},"example":{"shipping_profile":{"name":"Example Shipping","variant_ids":[]}}},"ShippingRateAttributes":{"type":"object","title":"Rates","description":"Rates","properties":{"id":{"type":"integer","description":"Rate ID"},"public_id":{"type":["string","null"],"description":"Rate public ID"},"zone_id":{"type":"integer","description":"Zone ID"},"description":{"type":["string","null"],"description":"Rate name"},"provider_name":{"type":["string","null"],"description":"Provider Name"},"price":{"type":"string","description":"Price"},"price_currency":{"type":["string","null"],"description":"Price Currency"},"rates_name_id":{"type":"integer","description":"Rate name ID"},"live_rates_provider":{"type":["string","null"],"enum":["Shippo",null],"description":"Live Rates Provider"},"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":"InONPz","zone_id":1,"description":"Example Shipping Rates Name","provider_name":"Tammera Kihn DO","price":"10.00","price_currency":"USD","rates_name_id":1,"live_rates_provider":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},"required":["created_at","description","id","live_rates_provider","price","price_currency","provider_name","public_id","rates_name_id","updated_at","zone_id"]},"ShippingRateParameters":{"type":"object","title":"Rates","description":"Rates","required":["price","rates_name_id"],"properties":{"provider_name":{"type":["string","null"],"description":"Provider Name"},"price":{"type":"string","description":"Price"},"price_currency":{"type":["string","null"],"description":"Price Currency"},"rates_name_id":{"type":"integer","description":"Rate name ID"},"live_rates_provider":{"type":["string","null"],"enum":["Shippo",null],"description":"Live Rates Provider"}},"example":{"shipping_rate":{"provider_name":"Tammera Kihn DO","price":"10.00","price_currency":"USD","rates_name_id":1,"live_rates_provider":null}}},"ShippingRateParametersUpdate":{"type":"object","title":"Rates","description":"Rates","required":[],"properties":{"provider_name":{"type":["string","null"],"description":"Provider Name"},"price":{"type":"string","description":"Price"},"price_currency":{"type":"string","description":"Price Currency"},"rates_name_id":{"type":"integer","description":"Rate name ID"},"live_rates_provider":{"type":["string","null"],"enum":["Shippo",null],"description":"Live Rates Provider"}},"example":{"shipping_rate":{"provider_name":"Tammera Kihn DO","price":"10.00","price_currency":"USD","rates_name_id":1,"live_rates_provider":null}}},"ShippingRatesNameAttributes":{"type":"object","title":"Rate Names","description":"Rate Names","properties":{"id":{"type":"integer","description":"Rate Name ID"},"public_id":{"type":["string","null"],"description":"Rate Name public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"Rate Name"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated"}},"example":{"id":2,"public_id":"DRAhis","workspace_id":42000,"name":"Example Shipping Rates Name","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"]},"ShippingRatesNameParameters":{"type":"object","title":"Rate Names","description":"Rate Names","required":["name"],"properties":{"name":{"type":"string","description":"Rate Name"}},"example":{"shipping_rates_name":{"name":"Example Shipping Rates Name"}}},"ShippingRatesNameParametersUpdate":{"type":"object","title":"Rate Names","description":"Rate Names","required":[],"properties":{"name":{"type":"string","description":"Rate Name"}},"example":{"shipping_rates_name":{"name":"Example Shipping"}}},"ShippingZoneAttributes":{"type":"object","title":"Zones","description":"Zones","properties":{"id":{"type":"integer","description":"Zone ID"},"public_id":{"type":["string","null"],"description":"Zone public ID"},"location_group_id":{"type":"integer","description":"Location group ID"},"name":{"type":"string","description":"Name"},"address_filter_id":{"type":["string","null"],"description":"Zone"},"region_ids":{"type":["array","null"],"description":"Region IDs"},"country_ids":{"type":["array","null"],"description":"Country IDs"},"includes_rest_of_world":{"type":["boolean","null"],"description":"Includes Rest of the World"},"created_at":{"type":["string","null"],"format":"date-time","description":"Added"},"updated_at":{"type":["string","null"],"description":"Updated"}},"example":{"id":2,"public_id":"iYwKFa","location_group_id":3,"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[],"country_ids":[],"includes_rest_of_world":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":null},"required":["address_filter_id","country_ids","created_at","id","includes_rest_of_world","location_group_id","name","public_id","region_ids","updated_at"]},"ShippingZoneParameters":{"type":"object","title":"Zones","description":"Zones","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"address_filter_id":{"type":["string","null"],"description":"Zone"},"region_ids":{"type":["array","null"],"description":"Region IDs"},"country_ids":{"type":["array","null"],"description":"Country IDs"},"includes_rest_of_world":{"type":["boolean","null"],"description":"Includes Rest of the World"}},"example":{"shipping_zone":{"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[],"country_ids":[],"includes_rest_of_world":false}}},"ShippingZoneParametersUpdate":{"type":"object","title":"Zones","description":"Zones","required":[],"properties":{"name":{"type":"string","description":"Name"},"address_filter_id":{"type":["string","null"],"description":"Zone"},"region_ids":{"type":["array","null"],"description":"Region IDs"},"country_ids":{"type":["array","null"],"description":"Country IDs"},"includes_rest_of_world":{"type":["boolean","null"],"description":"Includes Rest of the World"}},"example":{"shipping_zone":{"name":"Rory Metz","address_filter_id":null,"region_ids":[],"country_ids":[],"includes_rest_of_world":false}}},"SiteAttributes":{"type":"object","title":"Sites","description":"Sites represent a workspace's website configuration containing global code settings.","properties":{"id":{"type":"integer","description":"Site ID"},"public_id":{"type":"string","description":"The public identifier of the site"},"workspace_id":{"type":"integer","description":"Workspace ID that the site belongs to."},"name":{"type":"string","description":"Name of the site."},"created_at":{"type":"string","format":"date-time","description":"Created at"},"updated_at":{"type":"string","format":"date-time","description":"Updated at"},"head_code":{"type":["string","null"],"description":"**Expandable** Custom HTML/JavaScript code injected into the site 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."},"homepage_id":{"type":["string","null"],"description":"The public id of the page served at the site's root path (\"/\"). Null when no homepage is configured."},"theme_id":{"type":["string","null"],"description":"Public id of the site's active theme."},"blog_theme_id":{"type":["string","null"],"description":"Public id of the site's blog theme."},"store_theme_id":{"type":["string","null"],"description":"Public id of the site's store theme."}},"example":{"id":1,"public_id":"aBcDeF","workspace_id":42000,"name":"My Website","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","homepage_id":"RcHPAt","theme_id":"dkGlMT","blog_theme_id":null,"store_theme_id":null},"required":["blog_theme_id","created_at","homepage_id","id","name","public_id","store_theme_id","theme_id","updated_at","workspace_id"]},"SiteParametersUpdate":{"type":"object","title":"Sites","description":"Sites","required":[],"properties":{"name":{"type":"string","description":"Name of the site."},"head_code":{"type":["string","null"],"description":"Custom code to inject into the site's \u003chead\u003e section. Content should be wrapped in appropriate HTML tags such as \u003cscript\u003e, \u003clink\u003e, \u003cmeta\u003e, or \u003cstyle\u003e. Set to null to clear existing code."},"head_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle head_code. 'append' adds to existing code (default), 'replace' overwrites."},"footer_code":{"type":["string","null"],"description":"Custom code to inject before the closing \u003c/body\u003e tag. JavaScript should be wrapped in \u003cscript\u003e tags. Set to null to clear existing code."},"footer_code_mode":{"type":"string","enum":["append","replace"],"description":"How to handle footer_code. 'append' adds to existing code (default), 'replace' overwrites."},"homepage_id":{"type":"string","description":"Set which page is served at the site's root path (\"/\"). Pass the page's public id, or an empty string to clear the homepage. Important: a page cannot become the homepage by setting its own path to \"/\" — this parameter is the only way to designate a page as the homepage. The theme_id, blog_theme_id, and store_theme_id fields are read-only in this endpoint; to change the default theme, use the theme set_default action."}},"example":{"site":{"name":"My Updated Website","head_code":"\u003cscript\u003econsole.log('site');\u003c/script\u003e","head_code_mode":"append","homepage_id":"RcHPAt"}}},"StoreAttributes":{"type":"object","title":"Stores","description":"Stores","properties":{"id":{"type":"integer","description":"Store ID"},"public_id":{"type":["string","null"],"description":"Store Public ID"},"name":{"type":"string","description":"Name"},"current_path":{"type":["string","null"],"description":"Current path"},"seo_title":{"type":["string","null"],"description":"SEO title"},"seo_description":{"type":["string","null"],"description":"SEO description"},"seo_indexable":{"type":["boolean","null"],"description":"SEO Indexable"},"social_image_id":{"type":["string","null"],"description":"Social image"},"status":{"type":["string","null"],"enum":["draft","published",null],"description":"Store Status"},"created_at":{"type":["string","null"],"description":"Added"},"updated_at":{"type":["string","null"],"description":"Updated"},"workspace_id":{"type":["integer","null"],"description":"Workspace ID"}},"example":{"id":1,"public_id":"hlXaqR","name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft","created_at":null,"updated_at":null,"workspace_id":42000},"required":["created_at","current_path","id","name","public_id","seo_description","seo_indexable","seo_title","social_image_id","status","updated_at","workspace_id"]},"StoreParameters":{"type":"object","title":"Stores","description":"Stores","required":["name"],"properties":{"name":{"type":"string","description":"Name"},"current_path":{"type":["string","null"],"description":"Current path"},"seo_title":{"type":["string","null"],"description":"SEO title"},"seo_description":{"type":["string","null"],"description":"SEO description"},"seo_indexable":{"type":["boolean","null"],"description":"SEO Indexable"},"social_image_id":{"type":["string","null"],"description":"Social image"},"status":{"type":["string","null"],"enum":["draft","published",null],"description":"Store Status"}},"example":{"store":{"name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft"}}},"StoreParametersUpdate":{"type":"object","title":"Stores","description":"Stores","required":[],"properties":{"name":{"type":"string","description":"Name"},"current_path":{"type":["string","null"],"description":"Current path"},"seo_title":{"type":["string","null"],"description":"SEO title"},"seo_description":{"type":["string","null"],"description":"SEO description"},"seo_indexable":{"type":["boolean","null"],"description":"SEO Indexable"},"social_image_id":{"type":["string","null"],"description":"Social image"},"status":{"type":["string","null"],"enum":["draft","published",null],"description":"Store Status"}},"example":{"store":{"name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft"}}},"StyleAttributes":{"type":"object","title":"Styles","description":"Styles","properties":{"id":{"type":"integer","description":"Style ID"},"public_id":{"type":["string","null"],"description":"Public Style ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"theme_id":{"type":["integer","null"],"description":"Theme ID"},"name":{"type":"string","description":"Name"},"created_at":{"type":["string","null"],"description":"Created at"},"updated_at":{"type":["string","null"],"description":"Updated at"}},"example":{"id":3,"public_id":"mMTxFs","workspace_id":42000,"theme_id":1,"name":"Example Style","created_at":null,"updated_at":null},"required":["created_at","id","name","public_id","theme_id","updated_at","workspace_id"]},"ThemeAttributes":{"type":"object","title":"Themes","description":"Themes","properties":{"id":{"type":"integer","description":"Theme ID"},"public_id":{"type":["string","null"],"description":"Theme public ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"name":{"type":"string","description":"The original name of the theme"},"custom_name":{"type":["string","null"],"description":"A custom name to override the theme name"},"current_style_id":{"type":["integer","null"],"description":"The style that will be applied to the theme"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"},"styles":{"type":["array","null"],"items":{"type":"object","title":"Styles","description":"Styles are used to switch between different designs for a theme","properties":{"id":{"type":"integer","description":"Style ID"},"name":{"type":"string","description":"Name"}}},"description":"Styles"},"template_pages":{"type":"object","description":"A map whose keys are template-type names and whose values are the public id (string) of the page that renders each template type, or null when none is configured. The object is open-ended — there are approximately 22 template types in total (for example: home_template_page, not_found_template_page, coming_soon_template_page, order_confirmation_template_page, checkout_template_page, blog_template_page, blogs_post_template_page, product_template_page, member_login_template_page, customer_center_template_page, and others).","additionalProperties":{"type":["string","null"]}}},"example":{"id":2,"public_id":"dkGlMT","workspace_id":42000,"name":"Original Name","custom_name":"Custom Name","current_style_id":5,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","styles":[{"id":5,"name":"Example Style"},{"id":4,"name":"Example Style"}],"template_pages":{"home_template_page":"RcHPAt","not_found_template_page":"Bd2kQ9","coming_soon_template_page":null}},"required":["created_at","current_style_id","custom_name","id","name","public_id","styles","template_pages","updated_at","workspace_id"]},"ThemeParameters":{"type":"object","title":"Themes","description":"Themes","required":[],"properties":{"custom_name":{"type":["string","null"],"description":"A custom name to override the theme name"},"current_style_id":{"type":["integer","null"],"description":"The style that will be applied to the theme"}},"example":{"theme":{"custom_name":"Custom Name","current_style_id":5}}},"ThemeParametersUpdate":{"type":"object","title":"Themes","description":"Themes","required":[],"properties":{"custom_name":{"type":["string","null"],"description":"A custom name to override the theme name"},"current_style_id":{"type":["integer","null"],"description":"The style that will be applied to the theme"},"template_pages":{"type":"object","description":"Set which page renders each template type. Pass a partial object — only the entries you include are updated; omitted keys are left unchanged. Keys are template-type names (e.g. home_template_page, not_found_template_page); values are a page's public id, or an empty string to clear that slot. Unknown template-type names are rejected with a 422 error.","additionalProperties":{"type":"string"}}},"example":{"theme":{"custom_name":"Custom Name","current_style_id":5,"template_pages":{"home_template_page":"RcHPAt","not_found_template_page":"Bd2kQ9"}}}},"WebhooksIncomingExternalPurchaseEndpointAttributes":{"type":"object","title":"Incoming External Purchase Endpoint","description":"A workspace endpoint that receives purchase events from an external commerce provider.\nThe `url` is generated by ClickFunnels; configure that URL as the webhook destination in\nthe provider's own dashboard. Signing secrets are never returned in full by read\noperations.\n\nNot every `provider` is available to every workspace: creating an endpoint for one a\nworkspace has not been granted returns 403.\n","properties":{"id":{"type":"integer","description":"Endpoint ID."},"public_id":{"type":"string","description":"Obfuscated endpoint ID."},"workspace_id":{"type":"integer","description":"Workspace that owns the endpoint."},"name":{"type":"string","description":"Human-readable endpoint name."},"provider":{"type":"string","enum":["clickbank","offerlab","copecart","whop"],"description":"External commerce provider. The provider cannot be changed after creation."},"live_mode":{"type":"boolean","description":"Whether the endpoint receives live rather than test purchases. Set only at creation."},"suppress_order_system_emails":{"type":"boolean","description":"Whether ClickFunnels suppresses its order system emails for purchases received by this endpoint."},"url":{"type":"string","format":"uri","description":"Public URL to configure as the provider's incoming webhook destination."},"webhook_secret_last_four":{"type":["string","null"],"description":"Last four characters of the endpoint's signing secret, or null when it has none. Enough\nto tell whether a secret is set and whether it matches the one you hold. The full value\nis returned only in the create response.\n"},"provider_metadata":{"type":"object","description":"Read-only provider-specific state, keyed by provider so the single key both names the\nprovider and types its value. No provider has fields yet, so every endpoint returns an\nempty object under its provider, for example `{\"clickbank\": {}}` or `{\"whop\": {}}`.\n"},"created_at":{"type":"string","format":"date-time","description":"Created at."},"updated_at":{"type":"string","format":"date-time","description":"Updated at."}},"example":{"id":81,"public_id":"WpEndP","workspace_id":42000,"name":"Whop purchases","provider":"whop","live_mode":false,"suppress_order_system_emails":true,"url":"https://example.myclickfunnels.com/webhooks/incoming/external_purchases_webhooks/WpEndP","webhook_secret_last_four":"kLm9","provider_metadata":{"whop":{}},"created_at":"2026-08-26T12:00:00.000Z","updated_at":"2026-08-26T12:05:00.000Z"},"required":["created_at","id","live_mode","name","provider","provider_metadata","public_id","suppress_order_system_emails","updated_at","url","webhook_secret_last_four","workspace_id"]},"WebhooksIncomingExternalPurchaseEndpointCreatedAttributes":{"type":"object","title":"Created Incoming External Purchase Endpoint","description":"The newly created endpoint. Where ClickFunnels generates the signing secret, it is returned\nas `webhook_secret` in this response only, so save it immediately: later reads return just\nits last four characters. Where the provider issues its own signing secret, the endpoint is\ncreated without one and you set it afterwards.\n","allOf":[{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEndpointAttributes"},{"type":"object","properties":{"webhook_secret":{"type":"string","description":"Signing secret, returned only in this create response and only when ClickFunnels generated it."}}}],"required":["created_at","id","live_mode","name","provider","provider_metadata","public_id","suppress_order_system_emails","updated_at","url","webhook_secret_last_four","workspace_id"],"example":{"id":82,"public_id":"CbEndP","workspace_id":42000,"name":"ClickBank purchases","provider":"clickbank","live_mode":true,"suppress_order_system_emails":false,"url":"https://example.myclickfunnels.com/webhooks/incoming/external_purchases_webhooks/CbEndP","webhook_secret_last_four":"f0ac","provider_metadata":{"clickbank":{}},"webhook_secret":"8d5aa2a2d13b4a48be2be8649853f0ac","created_at":"2026-08-26T12:00:00.000Z","updated_at":"2026-08-26T12:00:00.000Z"}},"WebhooksIncomingExternalPurchaseEndpointParameters":{"type":"object","title":"Create Incoming External Purchase Endpoint","description":"Parameters for creating an incoming external purchase endpoint.","properties":{"name":{"type":"string","maxLength":255,"description":"Human-readable endpoint name."},"provider":{"type":"string","enum":["clickbank","offerlab","copecart","whop"],"description":"External commerce provider. This cannot be changed after creation."},"live_mode":{"type":"boolean","default":true,"description":"Whether this endpoint receives live rather than test purchases."},"suppress_order_system_emails":{"type":"boolean","default":false,"description":"Whether ClickFunnels suppresses its order system emails for purchases received by this endpoint."}},"example":{"name":"Whop test purchases","provider":"whop","live_mode":false,"suppress_order_system_emails":true},"required":["name","provider"]},"WebhooksIncomingExternalPurchaseEndpointParametersUpdate":{"type":"object","title":"Update Incoming External Purchase Endpoint","description":"Mutable endpoint settings. The provider and live/test mode are fixed at creation and\nare not accepted as update fields.\n","properties":{"name":{"type":"string","maxLength":255,"description":"Human-readable endpoint name."},"suppress_order_system_emails":{"type":"boolean","description":"Whether ClickFunnels suppresses its order system emails for purchases received by this endpoint."},"secret":{"type":"string","description":"Whop endpoints only: the ws_ signing secret Whop revealed when you created the webhook in your Whop dashboard, pointed at this endpoint's url. Whop does not let a user OAuth token manage webhooks, so registration is manual and this is how the secret is supplied. Ignored when blank or on other providers, and must start with ws_. The secret is never returned by any read."}},"example":{"name":"Whop purchases - accounting","suppress_order_system_emails":false},"required":[]},"WebhooksIncomingExternalPurchaseEventAttributes":{"type":"object","title":"Incoming External Purchase Event","description":"A raw event received from an external purchase provider together with its processing\noutcome. The raw `payload` is returned only when reading a single event.\n","properties":{"id":{"type":"integer","description":"Event ID."},"public_id":{"type":"string","description":"Obfuscated event ID."},"workspace_id":{"type":"integer","description":"Workspace that owns the endpoint which received this event."},"external_purchase_endpoint_id":{"type":"integer","description":"Incoming external purchase endpoint that received this event."},"order_id":{"type":["integer","null"],"description":"ClickFunnels order created or affected by this event, or null when no order is associated."},"event_type":{"type":["string","null"],"description":"Provider event type, when supplied by the provider."},"external_event_id":{"type":["string","null"],"description":"Provider's own ID for this delivery, when supplied. Use it to match an event against the provider's dashboard."},"payload":{"description":"Raw provider payload, exactly as it arrived. Its shape depends on the provider and event\ntype. Returned only when reading a single event, because a list of payloads would be\nalmost entirely payload.\n"},"processed_at":{"type":["string","null"],"format":"date-time","description":"Time processing completed, or null while unprocessed or after a failed attempt."},"processing_status":{"type":["string","null"],"enum":["pending","success","processing_skipped","decryption_failed","processing_failed","order_creation_failed","refund_processing_failed","chargeback_processing_failed","duplicate_webhook_event","creation_failed","no_origin_order_processing_ignored",null],"description":"Current or final processing outcome, or null before processing starts."},"processing_errors":{"type":["string","null"],"description":"Why the event changed nothing, or null when no reason was recorded."},"created_at":{"type":"string","format":"date-time","description":"Created at."},"updated_at":{"type":"string","format":"date-time","description":"Updated at."}},"example":{"id":301,"public_id":"WhEvtA","workspace_id":42000,"external_purchase_endpoint_id":81,"order_id":null,"event_type":"membership.activated","external_event_id":"evt_abc123","payload":{"id":"evt_abc123","type":"membership.activated","data":{"status":"active"}},"processed_at":null,"processing_status":null,"processing_errors":null,"created_at":"2026-08-26T12:30:00.000Z","updated_at":"2026-08-26T12:30:00.000Z"},"required":["created_at","event_type","external_event_id","external_purchase_endpoint_id","id","order_id","processed_at","processing_errors","processing_status","public_id","updated_at","workspace_id"]},"WebhooksIncomingExternalPurchaseProductMappingAttributes":{"type":"object","title":"Incoming External Purchase Product Mapping","description":"Maps an external provider product, plan, or SKU to the ClickFunnels variant and price\nused when an incoming purchase creates an order.\n","properties":{"id":{"type":"integer","description":"Mapping ID."},"public_id":{"type":"string","description":"Obfuscated mapping ID."},"external_purchase_endpoint_id":{"type":"integer","description":"Incoming external purchase endpoint that owns this mapping."},"external_product_sku":{"type":"string","description":"The identifier the provider reports for what was bought. It is the provider's own id for\nthe thing purchased, which is not always its product id: `clickbank` reports the item\nnumber (`itemNo`), `copecart` reports the product id, and `whop` reports the plan id\n(`plan_...`), because one Whop product can hold several plans.\n"},"clickfunnels_product":{"type":"object","description":"ClickFunnels product associated with the mapped price.","properties":{"id":{"type":"integer","description":"Product ID."},"public_id":{"type":"string","description":"Obfuscated product ID."},"name":{"type":"string","description":"Product name."}},"required":["id","name","public_id"]},"clickfunnels_variant":{"type":"object","description":"ClickFunnels product variant selected by this mapping.","properties":{"id":{"type":"integer","description":"Variant ID."},"public_id":{"type":"string","description":"Obfuscated variant ID."},"name":{"type":["string","null"],"description":"Variant name."}},"required":["id","name","public_id"]},"clickfunnels_price":{"type":"object","description":"ClickFunnels price selected by this mapping.","properties":{"id":{"type":"integer","description":"Price ID."},"public_id":{"type":"string","description":"Obfuscated price ID."},"name":{"type":["string","null"],"description":"Price name."},"currency":{"type":"string","description":"ISO 4217 currency code."},"payment_type":{"type":["string","null"],"enum":["one_time","subscription","payment_plan",null],"description":"ClickFunnels price payment type."},"amount":{"type":"string","description":"Price amount as a decimal string."}},"required":["amount","currency","id","name","payment_type","public_id"]},"created_at":{"type":"string","format":"date-time","description":"Created at."},"updated_at":{"type":"string","format":"date-time","description":"Updated at."}},"example":{"id":201,"public_id":"PrMapA","external_purchase_endpoint_id":81,"external_product_sku":"plan_monthly","clickfunnels_product":{"id":401,"public_id":"CfProd","name":"Membership"},"clickfunnels_variant":{"id":501,"public_id":"CfVari","name":"Default"},"clickfunnels_price":{"id":601,"public_id":"CfPric","name":"Monthly","currency":"USD","payment_type":"subscription","amount":"29.00"},"created_at":"2026-08-26T12:10:00.000Z","updated_at":"2026-08-26T12:10:00.000Z"},"required":["clickfunnels_price","clickfunnels_product","clickfunnels_variant","created_at","external_product_sku","external_purchase_endpoint_id","id","public_id","updated_at"]},"WebhooksIncomingExternalPurchaseProductMappingParameters":{"type":"object","title":"Create Incoming External Purchase Product Mapping","description":"Parameters for mapping an external provider identifier to a ClickFunnels variant and price in the endpoint's workspace.","properties":{"external_product_sku":{"type":"string","maxLength":255,"description":"Provider product, plan, or SKU identifier. For Whop, use the plan ID."},"products_variant_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Integer ID or obfuscated public ID of a ClickFunnels variant in the endpoint's workspace."},"products_price_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Integer ID or obfuscated public ID of a ClickFunnels price in the endpoint's workspace."}},"example":{"external_product_sku":"plan_monthly","products_variant_id":"CfVari","products_price_id":"CfPric"},"required":["external_product_sku","products_price_id","products_variant_id"]},"WebhooksIncomingExternalPurchaseProductMappingParametersUpdate":{"type":"object","title":"Update Incoming External Purchase Product Mapping","description":"Mutable fields for an incoming external purchase product mapping.","properties":{"external_product_sku":{"type":"string","maxLength":255,"description":"Provider product, plan, or SKU identifier. For Whop, use the plan ID."},"products_variant_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Integer ID or obfuscated public ID of a ClickFunnels variant in the endpoint's workspace."},"products_price_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Integer ID or obfuscated public ID of a ClickFunnels price in the endpoint's workspace."}},"example":{"external_product_sku":"plan_annual","products_variant_id":"CfVari","products_price_id":"CfPric"},"required":[]},"WebhooksOutgoingEndpointAttributes":{"type":"object","title":"Webhooks","description":"Webhooks","properties":{"id":{"type":"integer","description":"Unique identifier for the webhook endpoint"},"public_id":{"type":["string","null"],"description":"Unique identifier for the webhook endpoint visible in the UI"},"workspace_id":{"type":"integer","description":"Workspace ID"},"url":{"type":"string","description":"The URL that ClickFunnels event webhooks will be sent to."},"name":{"type":"string","description":"The custom name for the webhook endpoint."},"event_type_ids":{"type":["array","null"],"minContains":0,"contains":{"type":"string"},"description":"The event types that the webhook endpoint subscribes to. Each entry is a dotted or slashed string key\n(e.g. `contact.updated`, `order.completed`, `orders/invoice.paid`) — these are NOT numeric IDs.\nRetrieve the full list of valid keys from GET /api/v2/webhooks/outgoing/event_types\n(operationId: `listWebhooksOutgoingEventTypes`). The \u003ca class='link' target='_blank'\nhref='https://developers.myclickfunnels.com/docs/webhook-event-types'\u003eWebhook Event Types guide\u003c/a\u003e\nprovides supplementary context.\n"},"api_version":{"type":["integer","null"],"description":"The version of the API that the webhook endpoint is using. Only V2 endpoints can currently be created via the API, but V1 endpoints can be created via the UI. They will be visible when listing endpoints."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"},"page_ids":{"type":["array","null"],"description":"The IDs of the pages that this endpoint is scoped to. Only events triggered from these pages will be sent to this endpoint.\nCan be null when first created. After an update, it can be null, an empty array or an array of page IDs.\n"},"funnel_ids":{"type":["array","null"],"description":"The IDs of the funnels that this endpoint is scoped to. Only events triggered from these funnels will be sent to this endpoint.\nCan be null when first created. After an update, it can be null, an empty array or an array of page IDs.\n"},"webhook_secret_last_four":{"type":["string","null"],"description":"Last four characters of the endpoint's signing secret. Enough to tell whether the secret\nyou hold is still the current one. The full value is returned only in the create\nresponse, as `webhook_secret`.\n"}},"example":{"id":1,"public_id":"RcHPAt","workspace_id":42000,"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","page_ids":[],"funnel_ids":[],"webhook_secret_last_four":"c3d4"},"required":["api_version","created_at","event_type_ids","funnel_ids","id","name","page_ids","public_id","updated_at","url","webhook_secret_last_four","workspace_id"]},"WebhooksOutgoingEndpointCreatedAttributes":{"type":"object","title":"Created Outgoing Webhook Endpoint","description":"The newly created endpoint. The signing secret is returned as `webhook_secret` in this\nresponse only, so save it immediately: later reads return just its last four characters.\n","allOf":[{"$ref":"#/components/schemas/WebhooksOutgoingEndpointAttributes"},{"type":"object","properties":{"webhook_secret":{"type":"string","description":"Signing secret, returned only in this create response."}}}],"required":["api_version","created_at","event_type_ids","funnel_ids","id","name","page_ids","public_id","updated_at","url","webhook_secret","webhook_secret_last_four","workspace_id"],"example":{"id":5,"public_id":"GrVNvI","workspace_id":42000,"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","page_ids":[],"funnel_ids":[],"webhook_secret_last_four":"c3d4","webhook_secret":"3f9a1c7e5b2d4e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0dc3d4"}},"WebhooksOutgoingEndpointParameters":{"type":"object","title":"Webhooks","description":"Webhooks","required":["url","name"],"properties":{"url":{"type":"string","description":"The URL that ClickFunnels event webhooks will be sent to."},"name":{"type":"string","description":"The custom name for the webhook endpoint."},"event_type_ids":{"type":"array","description":"The event type keys to which the webhook endpoint subscribes. Each value is a dotted or slashed string key\n(e.g. `contact.updated`, `order.completed`, `orders/invoice.paid`) — these are NOT numeric IDs.\nRetrieve the full list of valid keys from GET /api/v2/webhooks/outgoing/event_types\n(operationId: `listWebhooksOutgoingEventTypes`). The \u003ca class=\"link\" href=\"https://developers.myclickfunnels.com/docs/webhook-event-types\" target=\"_blank\"\u003eWebhook Event Types guide\u003c/a\u003e provides supplementary context.\n\nOn create, one or more valid `event_type_ids` are required.\n\nTo remove one `event_type_id` on update, pass an array of all current `event_type_ids` less the one to be removed.\n\nOn update to remove all `event_type_ids` pass an empty array.\n"},"page_ids":{"type":["array","null"],"description":"The pages scope of the webhook, i.e., the endpoint will only subscribe to events triggered by users from the pages with the given IDs.\nIf not configured initially (equalling null) or empty, subscribes to events fired from any page in the workspace.\nUpdating the array will override existing values. To remove all `page_ids` pass an empty array or null.\n"},"funnel_ids":{"type":["array","null"],"description":"The funnel scope of the webhook, i.e., the endpoint will only subscribe to events triggered by users from the funnels with the given IDs.\nIf not configured initially (equalling null) or empty, subscribes to events fired from any funnel in the workspace.\nUpdating the array will override existing values. To remove all `funnel_ids` pass an empty array or null.\n"}},"example":{"webhooks_outgoing_endpoint":{"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"page_ids":[],"funnel_ids":[]}}},"WebhooksOutgoingEndpointParametersUpdate":{"type":"object","title":"Webhooks","description":"Webhooks","required":[],"properties":{"url":{"type":"string","description":"The URL that ClickFunnels event webhooks will be sent to."},"name":{"type":"string","description":"The custom name for the webhook endpoint."},"event_type_ids":{"type":"array","description":"The event type keys to which the webhook endpoint subscribes. Each value is a dotted or slashed string key\n(e.g. `contact.updated`, `order.completed`, `orders/invoice.paid`) — these are NOT numeric IDs.\nRetrieve the full list of valid keys from GET /api/v2/webhooks/outgoing/event_types\n(operationId: `listWebhooksOutgoingEventTypes`). The \u003ca class=\"link\" href=\"https://developers.myclickfunnels.com/docs/webhook-event-types\" target=\"_blank\"\u003eWebhook Event Types guide\u003c/a\u003e provides supplementary context.\n\nOn create, one or more valid `event_type_ids` are required.\n\nTo remove one `event_type_id` on update, pass an array of all current `event_type_ids` less the one to be removed.\n\nOn update to remove all `event_type_ids` pass an empty array.\n"},"page_ids":{"type":["array","null"],"description":"The pages scope of the webhook, i.e., the endpoint will only subscribe to events triggered by users from the pages with the given IDs.\nIf not configured initially (equalling null) or empty, subscribes to events fired from any page in the workspace.\nUpdating the array will override existing values. To remove all `page_ids` pass an empty array or null.\n"},"funnel_ids":{"type":["array","null"],"description":"The funnel scope of the webhook, i.e., the endpoint will only subscribe to events triggered by users from the funnels with the given IDs.\nIf not configured initially (equalling null) or empty, subscribes to events fired from any funnel in the workspace.\nUpdating the array will override existing values. To remove all `funnel_ids` pass an empty array or null.\n"}},"example":{"webhooks_outgoing_endpoint":{"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"page_ids":[],"funnel_ids":[]}}},"WebhooksOutgoingEventAttributes":{"type":"object","title":"Webhooks Events","description":"Webhooks Events","properties":{"id":{"type":"integer","description":"Unique identifier for the webhook event"},"public_id":{"type":["string","null"],"description":"Unique identifier for the webhook event visible in the UI"},"workspace_id":{"type":"integer","description":"Workspace ID"},"uuid":{"type":["string","null"],"description":"Unique UUID identifier for the webhook event"},"event_type_id":{"type":["string","null"],"description":"The ID of the event type. Can be any ID from \u003ca class='link' target='_blank' href='https://developers.myclickfunnels.com/docs/webhook-event-types'\u003ethe list of event types\u003c/a\u003e."},"subject_id":{"type":"integer","description":"The ID of the subject of the event. E.g., for the `one-time-order.completed` event_type_id, the `subject_id` is the ID of an Order."},"subject_type":{"type":["string","null"],"description":"The type of the subject of the event. E.g., for the `contact.identified` event_type_id, the `subject_type` is `Contact`."},"data":{"type":"object","description":"The webhook data payload with the data of the event. This data corresponds to the subject's response schema. E.g., for the `contact.identified` event_type_id, the `subject_type` is `Contact`. So, you can expect the `data` structure to be as described in the response schema of the Contact endpoints. "},"api_version":{"type":["integer","null"],"description":"API version of the webhook event. Only V2 webhook events will be triggered from endpoints created via the API, but in the list of events you will encounter V1 events if UI users set up V1 endpoints via the UI."},"created_at":{"type":["string","null"],"format":"date-time","description":"Created at"},"page":{"type":["object","null"],"title":"Page","description":"Page","properties":{"id":{"type":"integer","description":"Page ID"},"public_id":{"type":["string","null"],"description":"The public identifier of the page"},"name":{"type":"string","description":"Page name of the editable page element. Want to filter by it? See our \u003ci\u003e\u003cu\u003e\u003ca href=\"https://developers.myclickfunnels.com/docs/filtering-by-page\" target=\"_blank\"\u003ehelp guide on that topic\u003c/a\u003e\u003cu\u003e\u003ci\u003e."}}},"funnel":{"type":["object","null"],"title":"Funnel","description":"Funnel","properties":{"id":{"type":"integer","description":"Funnel ID"},"public_id":{"type":["string","null"],"description":"The public identifier of the funnel"},"name":{"type":"string","description":"Name of the Funnel"}}}},"example":{"id":1,"public_id":"oMrXDs","workspace_id":42000,"uuid":"18b1d340cfd584cb0348485cd178a89d","event_type_id":"contact.identified","subject_id":40,"subject_type":"Contact","data":{"id":246579500,"tags":[],"uuid":"3783f37654f74bd2c088c2ffef1ce685","fb_url":null,"anonymous":0,"last_name":null,"public_id":"YYEXRWP","time_zone":null,"created_at":"2024-04-24T09:23:56.649Z","first_name":"Bobby","updated_at":"2024-04-24T09:23:56.871Z","twitter_url":null,"website_url":null,"linkedin_url":null,"phone_number":null,"workspace_id":152039,"email_address":"bobby@fuzzy.com","instagram_url":null,"unsubscribed_at":null,"custom_attributes":{"preference":"always yes"},"last_notification_email_sent_at":null},"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","page":{"id":10,"public_id":"pPGNOY","name":"Great Page"},"funnel":{"id":2,"public_id":"yqkMTa","name":"Example Funnel"}},"required":["api_version","created_at","data","event_type_id","funnel","id","page","public_id","subject_id","subject_type","uuid","workspace_id"]},"WebhooksOutgoingEventTypeAttributes":{"type":"object","title":"Webhooks Outgoing Event Types","description":"An entry in the authoritative catalog of webhook event types that a webhook endpoint can subscribe to.\nThe `id` field is the exact dotted/slashed string key (e.g. `contact.updated`, `order.completed`, `orders/invoice.paid`)\nto supply verbatim in the `event_type_ids` array when creating or updating a webhook endpoint.\nUse GET /api/v2/webhooks/outgoing/event_types to retrieve the full list of valid keys.\n","properties":{"id":{"type":"string","description":"The event type key — a dotted or slashed string such as `contact.updated`, `order.completed`, or `orders/invoice.paid`.\nThis is the exact value to use verbatim in the `event_type_ids` array of a webhook endpoint.\n"},"topic":{"type":"string","description":"The leading segment of the event type `id` (e.g. `contact`, `order`, `orders/invoice`).\nUseful for grouping related event types.\n"}},"example":{"id":"contact.updated","topic":"contact"},"required":["id","topic"]},"IntegerOrPublicId":{"type":["integer","string"],"description":"Integer database id or obfuscated public_id."},"WorkflowAttributes":{"type":"object","title":"Workflow","description":"A standalone automation workflow.","properties":{"id":{"type":"integer","description":"Workflow ID"},"public_id":{"type":["string","null"],"description":"Obfuscated workflow ID"},"workspace_id":{"type":"integer","description":"Integer ID of the workspace that owns this workflow"},"name":{"type":"string","description":"Human-readable workflow name"},"status":{"type":"string","enum":["draft","live","archived"],"description":"Derived status. `live` = enabled with at least one active trigger; `archived` = archived; otherwise `draft`."},"disabled":{"type":"boolean","description":"True when the workflow is disabled (not executing runs)."},"archived":{"type":"boolean","description":"True when the workflow has been archived."},"run_type":{"type":"string","enum":["asynchronous","synchronous","one_time"],"description":"How the workflow handles concurrent runs for the same contact. Server-controlled — always `asynchronous` for API-created workflows."},"active_runs_count":{"type":"integer","description":"Number of currently active (in-progress) runs."},"completed_runs_count":{"type":"integer","description":"Cumulative count of completed runs."},"created_at":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated_at":{"type":"string","format":"date-time","description":"Last update timestamp"}},"example":{"id":101,"public_id":"WfAbCd","workspace_id":5001,"name":"New Lead Nurture","status":"live","disabled":false,"archived":false,"run_type":"asynchronous","active_runs_count":12,"completed_runs_count":340,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-10T00:00:00.000Z"},"required":["active_runs_count","archived","completed_runs_count","created_at","disabled","id","name","public_id","run_type","status","updated_at","workspace_id"]},"WorkflowParametersCreate":{"type":"object","title":"Create Workflow","description":"Parameters for creating a new workflow. `run_type` is server-controlled\n(always `asynchronous` for API-created workflows) and is not accepted as a\nrequest parameter.\n","required":["workflow"],"properties":{"workflow":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Human-readable name for the workflow."}}}},"example":{"workflow":{"name":"New Lead Nurture"}}},"WorkflowParametersUpdate":{"type":"object","title":"Update Workflow","description":"Parameters for updating an existing workflow. All fields are optional.","required":["workflow"],"properties":{"workflow":{"type":"object","properties":{"name":{"type":"string","description":"New name for the workflow."},"archived":{"type":"boolean","description":"Set to `true` to archive the workflow, `false` to unarchive."}}}},"example":{"workflow":{"name":"Updated Nurture Sequence","archived":false}}},"WorkflowStructureAttributes":{"type":"object","title":"Workflow Structure","description":"A complete tree view of a workflow — its header, triggers, and the ordered list\nof visible steps. Internal container nodes (sequence steps, end-step markers) are\nspliced out. Split steps expose their child branches or variants inline.\n\nStep entries share a common shape (`id`, `public_id`, `step_type`, `name`, `sort_order`,\n`state`, `step_type_settings`) and gain type-specific fields:\n\n- **`conditional_split_step`**: `convergence_step_id` + `branches` array (`matched` / `unmatched`), each branch carrying its own `steps`.\n- **`split_test_step`**: `convergence_step_id` + `variants` array (each with `weight` and `steps`).\n- All other step types: no extra branching fields.\n","properties":{"workflow":{"type":"object","description":"Summary header of the workflow.","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string","enum":["draft","live","archived"]},"disabled":{"type":"boolean"},"archived":{"type":"boolean"},"run_type":{"type":"string"}}},"triggers":{"type":"array","description":"Active triggers attached to the workflow (summary shape).","items":{"type":"object","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"event_type_key":{"type":"string"},"active":{"type":"boolean"},"allow_anonymous_contacts":{"type":"boolean"}}}},"steps":{"type":"array","description":"Ordered visible steps. Splits are inlined with their child steps.\nWalk this array top-to-bottom to follow the execution order.\n","items":{"type":"object","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"step_type":{"type":"string","description":"The step class key, e.g. `send_email_step`, `delay_step`, `conditional_split_step`."},"name":{"type":"string"},"sort_order":{"type":"integer","description":"Position within its own container — not globally unique across the tree."},"state":{"type":"string","enum":["active","notSetup","notDefined"]},"step_type_settings":{"type":"object","description":"One-key map whose key is the step type. See Workflows::Step for the per-type shape."},"convergence_step_id":{"type":["integer","null"],"description":"Split steps only. Id of the step where this split's branches reconverge — the first step that runs after the split, which every branch continues to. Example: a conditional_split_step (id 203) whose matched/unmatched branches both lead to the same next step (id 206) → convergence_step_id: 206. null when nothing follows the split (it ends the flow). The referenced step always appears in this tree."},"branches":{"type":"array","description":"conditional_split_step only. Always `[matched, unmatched]`.","items":{"type":"object","properties":{"branch":{"type":"string","enum":["matched","unmatched"]},"steps":{"type":"array","items":{"type":"object"}}}}},"variants":{"type":"array","description":"split_test_step only.","items":{"type":"object","properties":{"weight":{"type":"integer"},"steps":{"type":"array","items":{"type":"object"}}}}}}}}},"example":{"workflow":{"id":101,"public_id":"WfAbCd","name":"New Lead Nurture","status":"live","disabled":false,"archived":false,"run_type":"asynchronous"},"triggers":[{"id":11,"public_id":"TrXxYy","event_type_key":"$contact.tag_applied","active":true,"allow_anonymous_contacts":false}],"steps":[{"id":201,"public_id":"StEm01","step_type":"send_email_step","name":"Send Email","sort_order":0,"state":"active","step_type_settings":{"send_email_step":{"subject":"Welcome!","preheadline":"We're glad you're here.","template_id":3001,"from_address_id":4001,"reply_to_address_id":null}}},{"id":202,"public_id":"StDl02","step_type":"delay_step","name":"Wait 3 Days","sort_order":1,"state":"active","step_type_settings":{"delay_step":{"delay_type":"relative","duration":3,"interval":"days","time_zone":null,"use_contact_time_zone":false,"use_execution_window":false,"day_of_week":null,"date_of_month":null,"start_time":null,"end_time":null,"execution_window_days":[]}}},{"id":203,"public_id":"StCs03","step_type":"conditional_split_step","name":"VIP Check","sort_order":2,"state":"active","convergence_step_id":null,"step_type_settings":{"conditional_split_step":{"condition":{"filter_id":6001,"is_setup":true}}},"branches":[{"branch":"matched","steps":[{"id":205,"public_id":"StTg05","step_type":"contact_tag_step","name":"Tag VIP","sort_order":0,"state":"active","step_type_settings":{"contact_tag_step":{"action":"Add Tags","contacts_tag_ids":[7001]}}}]},{"branch":"unmatched","steps":[]}]}]},"required":["steps","triggers","workflow"]},"WorkflowsTriggerAttributes":{"type":"object","title":"Workflows::Trigger","description":"A trigger attached to a workflow. Each trigger has an `event_type_key` (e.g.\n`$contact.tag_applied`) and optional condition FK ids that narrow when the\ntrigger fires. An invalid `event_type_key` returns 422. NOTE: for site events\n(`$optin`, `$view`) scope by `page_id` — these events are not associated with a\nfunnel, so a `funnel_id` condition silently never matches.\n","properties":{"id":{"type":"integer","description":"Trigger ID"},"public_id":{"type":["string","null"],"description":"Obfuscated trigger ID"},"workflow_id":{"type":"integer","description":"Integer ID of the parent workflow"},"event_type_key":{"type":["string","null"],"description":"The event that fires this trigger (e.g. `$contact.tag_applied`, `$order.successful_purchase`)."},"event_type_name":{"type":["string","null"],"description":"Human-readable name of the event type."},"active":{"type":"boolean","description":"Whether the trigger is active and will enroll contacts."},"allow_anonymous_contacts":{"type":"boolean","description":"Whether the trigger fires for anonymous (non-identified) contacts."},"subscription_cancelation_reason":{"type":["string","null"],"description":"Only set on `$order.cancelled` (subscription cancellation) triggers — the cancellation-reason token the contact selected (e.g. `too_expensive`). `null` for every other event type."},"contacts_tag_id":{"type":["integer","null"],"description":"Raw integer Contacts::Tag id used as a condition filter."},"funnel_id":{"type":["integer","null"],"description":"Raw integer Funnel id used as a condition filter."},"page_id":{"type":["integer","null"],"description":"Raw integer Page id used as a condition filter."},"product_id":{"type":["integer","null"],"description":"Raw integer Product id used as a condition filter."},"cancellation_product_id":{"type":["integer","null"],"description":"Raw integer Product id for cancellation condition filtering."},"product_variant_id":{"type":["integer","null"],"description":"Raw integer Products::Variant id used as a condition filter."},"cancellation_product_variant_id":{"type":["integer","null"],"description":"Raw integer Products::Variant id for cancellation condition filtering."},"subscription_variant_to_id":{"type":["integer","null"],"description":"Raw integer Products::Variant id for subscription upgrade/downgrade triggers."},"sales_pipelines_id":{"type":["integer","null"],"description":"Raw integer Sales::Pipeline id used as a condition filter."},"current_sales_pipelines_stage_id":{"type":["integer","null"],"description":"Raw integer Sales::Pipelines::Stage id used as a condition filter."},"appointments_calendar_id":{"type":["integer","null"],"description":"Raw integer Appointments::Calendar id used as a condition filter."},"appointments_event_type_id":{"type":["integer","null"],"description":"Raw integer Appointments::EventType id used as a condition filter."},"course_id":{"type":["integer","null"],"description":"Raw integer Course id used as a condition filter."},"courses_lesson_id":{"type":["integer","null"],"description":"Raw integer Courses::Lesson id used as a condition filter."},"courses_section_id":{"type":["integer","null"],"description":"Raw integer Courses::Section id used as a condition filter."},"community_id":{"type":["integer","null"],"description":"Raw integer Community id used as a condition filter."},"communities_space_id":{"type":["integer","null"],"description":"Raw integer Communities::Space id used as a condition filter."},"communities_space_group_id":{"type":["integer","null"],"description":"Raw integer Communities::SpaceGroup id used as a condition filter."},"emails_broadcasts_id":{"type":["integer","null"],"description":"Raw integer Emails::Broadcast id used as a condition filter."},"calendar_event_id":{"type":["integer","null"],"description":"Raw integer CalendarEvent id used as a condition filter."},"survey_workflow_id":{"type":["integer","null"],"description":"Raw integer SurveyWorkflow id used as a condition filter."},"workflows_step_id":{"type":["integer","null"],"description":"Raw integer Workflows::Step id used as a condition filter."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"example":{"id":11,"public_id":"TrXxYy","workflow_id":101,"event_type_key":"$contact.tag_applied","event_type_name":"Contact tag applied","active":true,"allow_anonymous_contacts":false,"subscription_cancelation_reason":null,"contacts_tag_id":7001,"funnel_id":null,"page_id":null,"product_id":null,"cancellation_product_id":null,"product_variant_id":null,"cancellation_product_variant_id":null,"subscription_variant_to_id":null,"sales_pipelines_id":null,"current_sales_pipelines_stage_id":null,"appointments_calendar_id":null,"appointments_event_type_id":null,"course_id":null,"courses_lesson_id":null,"courses_section_id":null,"community_id":null,"communities_space_id":null,"communities_space_group_id":null,"emails_broadcasts_id":null,"calendar_event_id":null,"survey_workflow_id":null,"workflows_step_id":null,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"},"required":["active","allow_anonymous_contacts","appointments_calendar_id","appointments_event_type_id","calendar_event_id","cancellation_product_id","cancellation_product_variant_id","communities_space_group_id","communities_space_id","community_id","contacts_tag_id","course_id","courses_lesson_id","courses_section_id","created_at","current_sales_pipelines_stage_id","emails_broadcasts_id","event_type_key","event_type_name","funnel_id","id","page_id","product_id","product_variant_id","public_id","sales_pipelines_id","subscription_cancelation_reason","subscription_variant_to_id","survey_workflow_id","updated_at","workflow_id","workflows_step_id"]},"WorkflowsTriggerParametersCreate":{"type":"object","title":"Create Workflows::Trigger","description":"Parameters for creating a new trigger on a workflow. `event_type_key` is\nrequired; all condition FK fields accept either the integer id or obfuscated\n`public_id` string for a resource in the same workspace/team scope.\n\nAn invalid `event_type_key` returns 422.\n","required":["workflows_trigger"],"properties":{"workflows_trigger":{"type":"object","required":["event_type_key"],"properties":{"event_type_key":{"type":"string","description":"The event key that fires this trigger (e.g. `$contact.tag_applied`). Must be one of the enumerated keys.","enum":["$appointments.appointment_scheduled","$calendar_event.contact_registered","$community.join","$community.group_join","$community.topic_join","$community.post","$community.ban","$community.unban","$community.post_view","$contact.tag_applied","$contact.tag_removed","$course.complete","$course.enroll","$course.unenroll","$course.lesson_complete","$course.lesson_view","$course.section_complete","$email.bounce","$email.click","$email.open","$email.sent","$email.spam_complaint","$send_email_step.bounce","$send_email_step.click","$send_email_step.open","$send_email_step.sent","$send_email_step.spam_complaint","$order.successful_purchase","$order.cancelled","$order.churned","$subscription.upgraded","$subscription.downgraded","$transaction.renewal_failed","$sales.contact_entered_stage","$sales.contact_exited_stage","$optin","$view","$message_hub_event.contact_conversation_started","$message_hub_event.agent_conversation_started","$message_hub_event.contact_responded","$message_hub_event.agent_responded","$survey.complete"]},"active":{"type":"boolean","description":"Whether the trigger is active. Defaults to `true` when omitted."},"allow_anonymous_contacts":{"type":"boolean","description":"Whether to fire for anonymous contacts."},"subscription_cancelation_reason":{"type":"string","description":"Reason filter for `$order.cancelled` subscription cancellation triggers."},"contacts_tag_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Contacts::Tag id or public_id."},"funnel_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Funnel id or public_id."},"page_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Page id or public_id."},"product_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Product id or public_id."},"cancellation_product_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Product id or public_id for cancellation condition."},"product_variant_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Products::Variant id or public_id."},"cancellation_product_variant_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Products::Variant id or public_id for cancellation."},"subscription_variant_to_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Products::Variant id or public_id for subscription upgrade/downgrade."},"sales_pipelines_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Sales::Pipeline id or public_id."},"current_sales_pipelines_stage_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Sales::Pipelines::Stage id or public_id."},"appointments_calendar_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Appointments::Calendar id or public_id."},"appointments_event_type_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Appointments::EventType id or public_id."},"course_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Course id or public_id."},"courses_lesson_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Courses::Lesson id or public_id."},"courses_section_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Courses::Section id or public_id."},"community_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Community id or public_id."},"communities_space_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Communities::Space id or public_id."},"communities_space_group_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Communities::SpaceGroup id or public_id."},"emails_broadcasts_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Emails::Broadcast id or public_id."},"calendar_event_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"CalendarEvent id or public_id."},"survey_workflow_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"SurveyWorkflow id or public_id."},"workflows_step_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Workflows::Step id or public_id."}}}},"example":{"workflows_trigger":{"event_type_key":"$contact.tag_applied","active":true,"contacts_tag_id":7001}}},"WorkflowsTriggerParametersUpdate":{"type":"object","title":"Update Workflows::Trigger","description":"Parameters for updating an existing trigger. All fields optional.\nCondition FK fields accept either the integer id or obfuscated `public_id`\nstring for a resource in the same workspace/team scope.\n","required":["workflows_trigger"],"properties":{"workflows_trigger":{"type":"object","properties":{"event_type_key":{"type":"string","description":"New event key. Must be one of the enumerated keys; an invalid key returns 422.","enum":["$appointments.appointment_scheduled","$calendar_event.contact_registered","$community.join","$community.group_join","$community.topic_join","$community.post","$community.ban","$community.unban","$community.post_view","$contact.tag_applied","$contact.tag_removed","$course.complete","$course.enroll","$course.unenroll","$course.lesson_complete","$course.lesson_view","$course.section_complete","$email.bounce","$email.click","$email.open","$email.sent","$email.spam_complaint","$send_email_step.bounce","$send_email_step.click","$send_email_step.open","$send_email_step.sent","$send_email_step.spam_complaint","$order.successful_purchase","$order.cancelled","$order.churned","$subscription.upgraded","$subscription.downgraded","$transaction.renewal_failed","$sales.contact_entered_stage","$sales.contact_exited_stage","$optin","$view","$message_hub_event.contact_conversation_started","$message_hub_event.agent_conversation_started","$message_hub_event.contact_responded","$message_hub_event.agent_responded","$survey.complete"]},"active":{"type":"boolean"},"allow_anonymous_contacts":{"type":"boolean"},"subscription_cancelation_reason":{"type":"string"},"contacts_tag_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"funnel_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"page_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"product_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"cancellation_product_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"product_variant_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"cancellation_product_variant_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"subscription_variant_to_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"sales_pipelines_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"current_sales_pipelines_stage_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"appointments_calendar_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"appointments_event_type_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"course_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"courses_lesson_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"courses_section_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"community_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"communities_space_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"communities_space_group_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"emails_broadcasts_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"calendar_event_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"survey_workflow_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"workflows_step_id":{"$ref":"#/components/schemas/IntegerOrPublicId"}}}},"example":{"workflows_trigger":{"active":false}}},"WorkflowsStepAttributes":{"type":"object","title":"Workflows::Step","description":"A single action or split step within a workflow.\n\n`step_type` equals the single key inside `step_type_settings` and identifies which\nstep class this is. The full list of step types, the per-type settings each one\ncarries, the write-only `send_email_step` inline-body fields, and how FK ids are\nserialized are all documented on the **`step_type_settings`** field below — that\nfield is the single canonical reference, and the Create Step / Update Step request\nbodies point to it.\n\n`parent_step_id` and `branch` report where a step sits when it lives inside a split\nbranch; see the Create Step / Update Step schemas for setting placement on write.\n","properties":{"id":{"type":"integer","description":"Step ID"},"public_id":{"type":["string","null"],"description":"Obfuscated step ID"},"workflow_id":{"type":"integer","description":"Integer ID of the parent workflow"},"step_type":{"type":"string","description":"The step class key (same as the single key in `step_type_settings`)."},"name":{"type":"string","description":"Human-readable step name."},"sort_order":{"type":"integer","description":"Zero-based position **within this step's own container** (the trunk, or a split's branch/convergence sequence). It is therefore **container-local, not globally unique** — it restarts at 0 for steps after a split. In `/structure`, follow the `steps` array order for execution flow, not `sort_order`.\n"},"state":{"type":"string","enum":["active","notSetup","notDefined"],"description":"Setup state of the step."},"parent_step_id":{"type":["integer","null"],"description":"Raw integer id of the parent split step when this step lives inside a branch. Null for trunk steps."},"branch":{"type":["string","null"],"description":"For conditional splits — `matched` or `unmatched`. For split tests — the 0-based variant index as a string. Null for trunk steps."},"convergence_step_id":{"type":["integer","null"],"description":"Id of the step a split's branches reconverge at — the first step that runs after the split, which every branch continues to. Example: a conditional_split_step (id 203) whose matched/unmatched branches both lead to the same next step (id 206) → convergence_step_id 206. It is null in two cases: a split that ends the flow (nothing follows it), and any non-split step (the field only applies to conditional_split_step / split_test_step). Use step_type to tell them apart — a null on a non-split step just means the field does not apply. When non-null, the referenced step always appears in this response."},"step_type_settings":{"type":"object","description":"A single-key map: the one key is the step type (identical to `step_type`) and its\nvalue carries that type's settings. **This is the canonical reference for step\nsettings — the Create Step and Update Step request bodies point here.**\n\nAvailable types —\n\n**Action steps** (non-branching):\n`send_email_step`, `send_asset_step`, `send_chat_message_step`, `contact_tag_step`,\n`contact_custom_attribute_step`, `delay_step`, `notify_step`, `deliver_webhook_step`,\n`enroll_step`, `unenroll_contact_step`, `grant_community_access_step`,\n`revoke_community_access_step`, `create_opportunity_step`, `move_step`\n\n**Split steps** (branching): `conditional_split_step`, `split_test_step`\n\n### Per-type fields\n\n- `send_email_step`: `subject`, `preheadline`, `template_id`, `from_address_id`, `reply_to_address_id`, plus write-only `html_body`/`text_body` (see \"send_email_step inline body\" below)\n- `send_asset_step`: `asset_id`\n- `send_chat_message_step`: `inbox_key`, `message`, `subject`, `start_new_conversation`\n- `contact_tag_step`: `action` (`\"Add Tags\"` or `\"Remove Tags\"`), `contacts_tag_ids` (array of raw integer tag ids)\n- `contact_custom_attribute_step`: `action`, `value`, `field_id` (a Forms::Field id — discoverable via the Forms API)\n- `delay_step`: `delay_type` (`relative`/`day_of_week`/`day_of_month`), `duration`, `interval`, `time_zone`, `use_contact_time_zone`, `use_execution_window`, `day_of_week`, `date_of_month`, `start_time`, `end_time`, `execution_window_days`. `time_zone` is a human-readable time zone name — the label shown in the builder's dropdown, e.g. `Eastern Time (US \u0026 Canada)`, `London`, `Tokyo`. A TZ database id is also accepted and is stored as the name that keeps the same clock (`America/New_York` and `America/Toronto` → `Eastern Time (US \u0026 Canada)`, `Europe/London` → `London`), so the response echoes the name, not the id you sent. Any other value is rejected 422. The full list of names and how they map to TZ ids is in [our Time Zones guide](https://developers.myclickfunnels.com/docs/timezones). Set `use_contact_time_zone: true` to use each contact's own zone instead.\n- `notify_step`: `message`, `notify_type` (array), `user_ids` (array of user ids — must be team members; discover via `GET /teams/{team_id}/memberships` → `user_id`. A non-member id is rejected 422.)\n- `deliver_webhook_step`: `webhooks_outgoing_endpoint_id`\n- `enroll_step`: `course_ids` (array), `section_ids` (array). **Enrollment happens per `section_ids`** — provide the section ids to enroll in (discover via `GET /api/v2/courses/{course_id}/sections`). `course_ids` alone is accepted and the step reads `active`, but enrolls nothing at run time.\n- `unenroll_contact_step`: `course_ids` (array), `section_ids` (array). Unenroll honors both `course_ids` and `section_ids`.\n- `grant_community_access_step`: `space_ids` (array)\n- `revoke_community_access_step`: `space_ids` (array)\n- `create_opportunity_step`: `name`, `value`, `assignment_strategy`, `move_existing`, `sales_pipelines_stage_id`, `sales_pipeline_id`, `membership_id`, `membership_ids` (array)\n- `move_step`: `workflow_id`\n- `conditional_split_step`: `condition` object with `filter_id` (raw integer RefineFilter id on read; integer id or public_id on write) and `is_setup` boolean\n- `split_test_step`: `variants` array, each with `weight` (0..100, two entries summing to 100)\n\n### `send_email_step` — template \u0026 inline body\n\nA `send_email_step` always owns its email. On **create**, a provided `template_id`\nis **copied** into a fresh step-owned template (it is never a live reference to the\noriginal), and an inline `html_body`/`text_body` instead mints a new step-owned\ntemplate. This deliberately mirrors the builder UI, which always makes its own copy\nso edits to a step's email never touch the source. `template_id` takes precedence\nwhen both a `template_id` and an inline body are supplied. The create response's\n`step_type_settings.send_email_step.template_id` is the step-owned copy's id, not\nthe source template's id.\n\nBecause the step owns its template, `template_id` is **create-only and cannot be\nchanged on update** — a `PATCH` that includes `template_id` returns `422`. To change\nan existing step's email, edit it **in place** by sending `html_body`/`text_body`\n(this patches the step's own template — no new template is created); to use a\ndifferent template, create a new step. `html_body`/`text_body` are write-only and are\nnever returned in `step_type_settings`. For\n`from_address_id`/`reply_to_address_id`, pick an address whose top-level\n`usable_as_sender` is true, not one whose sending domain is merely `verified`.\nSee [Inline body on a workflow send-email step](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#inline-body-on-a-workflow-send-email-step) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).\n\n### FK id serialization\n\nResponse FK values (`*_id`, `*_ids`) are serialized as **raw integers**. On write,\nthose same FK fields accept either integer ids or obfuscated public_ids in the same\nworkspace/team scope.\n"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"example":{"id":201,"public_id":"StEm01","workflow_id":101,"step_type":"send_email_step","name":"Send Email","sort_order":0,"state":"active","parent_step_id":null,"branch":null,"convergence_step_id":null,"step_type_settings":{"send_email_step":{"subject":"Welcome!","preheadline":"We're glad you're here.","template_id":3001,"from_address_id":4001,"reply_to_address_id":null}},"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"},"required":["branch","convergence_step_id","created_at","id","name","parent_step_id","public_id","sort_order","state","step_type","step_type_settings","updated_at","workflow_id"]},"WorkflowsStepParametersCreate":{"type":"object","title":"Create Workflows::Step","description":"Parameters for adding a new step to a workflow. `step_type_settings` must contain\nexactly one key naming the step type.\n\n### Placement\n\n- **Trunk (default)**: omit `parent_step_id` and `branch` to append at the end of the main sequence.\n- **Inside a split branch**: set `parent_step_id` to the id (integer or public_id) of the split step, and `branch` to:\n  - `matched` or `unmatched` for a `conditional_split_step` (the legacy `match`/`fallback` aliases are still accepted)\n  - A 0-based variant index string (`\"0\"`, `\"1\"`) for a `split_test_step`\n- **Specific position**: use `position` (0-based integer) or `after_step_id` (id of the preceding step).\n\nSee [Branching](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#branching) in the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md) for where a step with no placement lands relative to a split.\n\nFor `split_test_step`, the `variants` array must have exactly 2 entries with integer weights summing to 100.\nFor `conditional_split_step`, provide `condition.filter_id` (integer id or obfuscated RefineFilter public_id).\n\nCreating a `send_email_step` requires a complete business mailing address in\nthe workspace's email settings. Configure it with\n`PUT /workspaces/{workspace_id}/emails/settings`; otherwise creation returns `422`.\n","required":["workflows_step"],"properties":{"workflows_step":{"type":"object","required":["step_type_settings"],"properties":{"name":{"type":"string","description":"Optional human-readable name. Defaults to a titleized version of the step type."},"parent_step_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Step id or public_id of a split step. Required when placing a step inside a branch."},"branch":{"type":"string","description":"Branch selector — `matched`/`unmatched` for conditional splits (legacy `match`/`fallback` still accepted); `\"0\"`/`\"1\"` for split tests."},"position":{"type":"integer","description":"0-based position within the container. Mutually exclusive with `after_step_id`."},"after_step_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Step id or public_id of the step to insert after. Mutually exclusive with `position`."},"step_type_settings":{"type":"object","description":"Exactly one key naming the step type, with its settings as the value. On a\n`send_email_step` a `template_id` is copied into a new step-owned template, and\nyou may instead pass the write-only `html_body`/`text_body` to author one inline.\n\n**See the `step_type_settings` field on the Workflows::Step response schema\n(`#/components/schemas/WorkflowsStepAttributes`) for the full per-type field\ncatalog, the `send_email_step` inline-body rules, and FK id handling.**\n"}}}},"example":{"workflows_step":{"name":"Send Welcome Email","step_type_settings":{"send_email_step":{"subject":"Welcome!","template_id":"TmPl01","from_address_id":"FrAd01"}}}}},"WorkflowsStepParametersUpdate":{"type":"object","title":"Update Workflows::Step","description":"Parameters for updating an existing step. Only `step_type_settings`,\n`name`, and placement fields (`parent_step_id`, `branch`, `position`,\n`after_step_id`) are accepted. All are optional.\n\nMoving split steps is not supported and returns 422.\n","required":["workflows_step"],"properties":{"workflows_step":{"type":"object","properties":{"name":{"type":"string"},"parent_step_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Move this step into a split branch (sets new container)."},"branch":{"type":"string"},"position":{"type":"integer"},"after_step_id":{"$ref":"#/components/schemas/IntegerOrPublicId"},"step_type_settings":{"type":"object","description":"One-key settings map; the key must match the step's existing type.\n\nA `send_email_step` update **cannot change `template_id`** (it is create-only —\nincluding it returns `422`); edit the email in place with `html_body`/`text_body`\ninstead, or create a new step to use a different template.\n\n**See the `step_type_settings` field on the Workflows::Step response schema\n(`#/components/schemas/WorkflowsStepAttributes`) for the full per-type field\ncatalog, the `send_email_step` inline-body rules, and FK id handling.**\n"}}}},"example":{"workflows_step":{"step_type_settings":{"delay_step":{"delay_type":"relative","duration":7,"interval":"days"}}}}},"WorkflowsStepStatsAttributes":{"type":"object","title":"Workflow Step Stats","description":"Stats for one workflow step over the requested timerange. Every step type reports `contacts`; only a `send_email_step` reports `email`, which is `null` for every other step type. Counts are unique contacts unless noted; rates are whole percentages; money is a decimal string in `currency`.","properties":{"step":{"type":"object","description":"The workflow step these stats belong to","properties":{"id":{"type":"integer","description":"Step ID"},"public_id":{"type":["string","null"],"description":"Step public ID"},"name":{"type":["string","null"],"description":"Step name"},"step_type":{"type":"string","description":"The step's type, e.g. `send_email_step` or `delay_step`. `email` is `null` unless this is `send_email_step`."}},"required":["id","name","public_id","step_type"]},"workflow":{"type":"object","description":"The workflow the step belongs to","properties":{"id":{"type":"integer","description":"Workflow ID"},"public_id":{"type":["string","null"],"description":"Workflow public ID"},"name":{"type":["string","null"],"description":"Workflow name"}},"required":["id","name","public_id"]},"currency":{"type":["string","null"],"description":"ISO 4217 currency code for all monetary values (e.g. USD, EUR). `email.revenue` counts only orders paid in this currency. `null` when the workspace has no currency set, in which case there is nothing to filter on and revenue sums every currency its orders were paid in."},"timerange":{"type":"object","description":"The window the stats cover, after clamping. Read it back rather than assuming the window you asked for was used. Every number follows it except `contacts.are_here`, which is a live count.","properties":{"from":{"type":"string","format":"date-time","description":"Start of the window"},"to":{"type":"string","format":"date-time","description":"End of the window"}},"required":["from","to"]},"contacts":{"type":"object","description":"Where contacts stand in relation to this step. Every step type reports these; they are the two numbers the workflow builder shows under each step.","properties":{"are_here":{"type":"integer","description":"Contacts at this step right now — runs whose current step is this one. A live count; it does not follow `timerange`."},"were_here":{"type":"integer","description":"Contacts who left this step inside the window, counting a contact once per pass through it."}},"required":["are_here","were_here"]},"email":{"type":["object","null"],"description":"Engagement and attributed revenue for the email this step sends. `null` for every step type except `send_email_step` — a step that sends nothing has nothing to report, which is not the same as performing badly.","properties":{"performance":{"type":"object","description":"Engagement inside the window. Rates are rounded to whole percentages, so a share under 0.5% reads 0 next to a non-zero count; the counts are authoritative. Numerator and denominator are each counted inside the window on their own, so a rate is not a share of one fixed group of contacts — see `open_rate`. These counts include test-mode sends, while `revenue` counts live-mode orders only, so the revenue-per-X figures divide live-only money by counts that may include test traffic.","properties":{"sends":{"type":"integer","description":"Emails this step sent inside the window, counting a contact once per pass through the step. A workflow that loops, or a contact re-entered into it, makes this larger than `recipients`."},"recipients":{"type":"integer","description":"Distinct contacts the step sent to inside the window, including any reached in test mode. Every rate below except `click_to_open_rate` is a share of this, not of `sends`."},"failed":{"type":"integer","description":"Contacts whose send failed, either refused outright or timed out in the queue. A contact that failed both ways counts once."},"bounced":{"type":"integer","description":"Contacts whose address bounced"},"opened":{"type":"integer","description":"Total opens inside the window, counting repeat opens by the same contact"},"unique_opens":{"type":"integer","description":"Contacts who opened at least once inside the window"},"clicked":{"type":"integer","description":"Total clicks inside the window, counting repeat clicks by the same contact"},"unique_clicks":{"type":"integer","description":"Contacts who clicked at least once inside the window"},"unsubscribed":{"type":"integer","description":"Contacts who unsubscribed from this email"},"spam_complaints":{"type":"integer","description":"Contacts who reported this email as spam"},"open_rate":{"type":"integer","description":"Unique opens as a whole percentage of `recipients`. Both are counted inside the window on their own, so an open of an email sent before the window counts while its send does not; the figure can exceed 100 when few new sends meet many opens of older emails, and it is 0 whenever `recipients` is 0. Widen the window to cover the sends you care about."},"click_rate":{"type":"integer","description":"Unique clicks as a whole percentage of `recipients`. Counted the same way as `open_rate`, so it can exceed 100 and is 0 when `recipients` is 0."},"click_to_open_rate":{"type":"integer","description":"Unique clicks as a whole percentage of unique opens; 0 when there are no opens."},"bounce_rate":{"type":"integer","description":"Bounces as a whole percentage of `recipients`; 0 when `recipients` is 0."},"unsubscribe_rate":{"type":"integer","description":"Unsubscribes as a whole percentage of `recipients`; 0 when `recipients` is 0."}},"required":["bounce_rate","bounced","click_rate","click_to_open_rate","clicked","failed","open_rate","opened","recipients","sends","spam_complaints","unique_clicks","unique_opens","unsubscribe_rate","unsubscribed"]},"revenue":{"type":"object","description":"Orders attributed to this step's email: the buyer's last tracked source within 30 days was a click on one of its links, so a later touch from elsewhere supersedes it. Each order contributes its FIRST paid invoice, and only when that invoice was issued inside the window - renewals never count, and an order whose first payment predates the window contributes nothing even if a renewal was paid inside it. Only live-mode orders paid in the workspace `currency` are counted.","properties":{"total":{"type":"string","description":"Revenue attributed to the step, as a decimal string in `currency`"},"orders_count":{"type":"integer","description":"Attributed orders whose FIRST paid invoice was issued inside the window"},"per_recipient":{"type":"string","description":"Revenue divided by `recipients`, as a decimal string in `currency`"},"per_unique_open":{"type":"string","description":"Revenue divided by unique opens, as a decimal string in `currency`"},"per_unique_click":{"type":"string","description":"Revenue divided by unique clicks, as a decimal string in `currency`"}},"required":["orders_count","per_recipient","per_unique_click","per_unique_open","total"]}},"required":["performance","revenue"]}},"example":{"step":{"id":42,"public_id":"RBxAQx","name":"Welcome email","step_type":"send_email_step"},"workflow":{"id":7,"public_id":"zmXVGz","name":"New lead nurture"},"currency":"USD","timerange":{"from":"2026-08-05T00:00:00Z","to":"2026-09-04T00:00:00Z"},"contacts":{"are_here":12,"were_here":1240},"email":{"performance":{"sends":1240,"recipients":1180,"failed":4,"bounced":21,"opened":890,"unique_opens":604,"clicked":173,"unique_clicks":148,"unsubscribed":9,"spam_complaints":2,"open_rate":51,"click_rate":13,"click_to_open_rate":25,"bounce_rate":2,"unsubscribe_rate":1},"revenue":{"total":"3480.00","orders_count":24,"per_recipient":"2.95","per_unique_open":"5.76","per_unique_click":"23.51"}}},"required":["contacts","currency","email","step","timerange","workflow"]},"WorkflowsRunAttributes":{"type":"object","title":"Workflows::Run","description":"An execution record tracking a contact's progress through a workflow.\n\n`status` is derived:\n- `canceled` — the run was explicitly canceled.\n- `completed` — the run finished normally.\n- `paused` — the run is waiting at a delay or hold step.\n- `active` — none of the above; currently in-progress.\n\nThe list endpoint returns only standard automation runs (`type: null`);\nsurvey/STI run subtypes are excluded.\n","properties":{"id":{"type":"integer","description":"Run ID"},"public_id":{"type":["string","null"],"description":"Obfuscated run ID"},"workflow_id":{"type":"integer","description":"Integer ID of the parent workflow"},"contact_id":{"type":["integer","null"],"description":"Raw integer ID of the enrolled contact"},"current_step_id":{"type":["integer","null"],"description":"Raw integer ID of the step the run is currently at. Null when not at a step."},"event_id":{"type":["integer","null"],"description":"Raw integer ID of the triggering event that started this run, if any."},"type":{"type":["string","null"],"description":"STI type column. Always `null` for standard automation runs (the only subtype the list endpoint returns)."},"status":{"type":"string","enum":["active","paused","completed","canceled"],"description":"Derived execution status."},"skip_communication":{"type":"boolean","description":"When true, communication steps (send email, etc.) are skipped for this run."},"completed_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when the run completed. Null if still in progress."},"paused_at":{"type":["string","null"],"format":"date-time","description":"Timestamp when the run was last paused. Null if never paused."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"example":{"id":501,"public_id":"RnXxYz","workflow_id":101,"contact_id":9001,"current_step_id":null,"event_id":null,"type":null,"status":"completed","skip_communication":false,"completed_at":"2025-06-02T10:30:00.000Z","paused_at":null,"created_at":"2025-06-01T09:00:00.000Z","updated_at":"2025-06-02T10:30:00.000Z"},"required":["completed_at","contact_id","created_at","current_step_id","event_id","id","paused_at","public_id","skip_communication","status","type","updated_at","workflow_id"]},"WorkflowsRunParametersCreate":{"type":"object","title":"Create Workflows::Run (manual enroll)","description":"Parameters for manually enrolling a contact into a workflow. The workflow\nmust be enabled (status `live`) — otherwise returns 422.\n","required":["run"],"properties":{"run":{"type":"object","required":["contact_id"],"properties":{"contact_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Integer id or obfuscated public_id of the contact to enroll. Must belong to the same workspace."},"skip_communication":{"type":"boolean","description":"When true, communication steps (send email, chat message, etc.) are skipped for this run. Defaults to false."}}}},"example":{"run":{"contact_id":"CtAbcd","skip_communication":false}}}},"parameters":{"id":{"name":"id","in":"path","required":true,"schema":{"type":"string"}},"line_item_id":{"name":"line_item_id","in":"path","required":true,"description":"The id of the subscription line item. Accepts either the integer database\nid or the obfuscated `public_id` string returned by line-item endpoints.\n","schema":{"oneOf":[{"type":"integer"},{"type":"string"}]}},"after":{"name":"after","in":"query","required":false,"schema":{"type":"string"},"description":"ID of item after which the collection should be returned. More examples and info about pagination [in our guides](https://developers.myclickfunnels.com/docs/pagination)."},"sort_order":{"name":"sort_order","in":"query","description":"Sort order of a list response. Use 'desc' to reverse the default 'asc' (ascending) sort order. Examples [in our guides](https://developers.myclickfunnels.com/docs/pagination).","required":false,"schema":{"type":"string","enum":["asc","desc"]}},"sort_property":{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at"]}},"InvoiceFilter":{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of Invoice IDs to filter by.","example":"1,42"},"status":{"type":"string","description":"The status of the invoice to filter by.","example":"pending"},"invoice_type":{"type":"string","description":"The type of the invoice to filter by.","example":"one_time_sale"},"invoice_number":{"type":"string","description":"A comma-separated list of Invoice Numbers to filter by.","example":"#1000,#1001"},"external_id":{"type":"string","description":"A comma-separated list of External IDs to filter by.","example":"inv_1234567890,inv_0987654321"}}},"style":"deepObject","explode":true},"ExpandBlogPostFields":{"name":"expand[]","in":"query","description":"Expand additional data in the response. Use `expand[]=markup` to include the PML markup for the post's visual content. Markup is opt-in on every endpoint (show, list, create, update) because PML serialization runs per post. See the [Expanding guide](https://developers.myclickfunnels.com/docs/expand) for available fields and examples.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["markup"]}}},"ExpandCodeFields":{"name":"expand[]","in":"query","description":"Expand additional data in the response. Use `expand[]=field_name` to include optional fields (e.g., `expand[]=head_code\u0026expand[]=footer_code`). See the [Expanding guide](https://developers.myclickfunnels.com/docs/expand) for available fields and examples.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["head_code","footer_code","markup"]}}},"ExpandPageFields":{"name":"expand[]","in":"query","description":"Expand additional data in the response. Use `expand[]=field_name` to include optional fields (e.g., `expand[]=head_code\u0026expand[]=footer_code\u0026expand[]=custom_css\u0026expand[]=markup`). Markup is opt-in on every endpoint (show, list, create, update) because PML serialization runs per page. `custom_css` is available on internal pages only. See the [Expanding guide](https://developers.myclickfunnels.com/docs/expand) for available fields and examples. Read a page's existing markup with `expand[]=markup` before editing it: see [Reading Current Markup](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#reading-current-markup) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md).","required":false,"schema":{"type":"array","items":{"type":"string","enum":["head_code","footer_code","custom_css","markup"]}}},"ExpandFunnelFields":{"name":"expand[]","in":"query","description":"Expand additional data in the response. Use `expand[]=field_name` to include optional fields. Available fields: head_code, footer_code. See the [Expanding guide](https://developers.myclickfunnels.com/docs/expand) for examples.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["head_code","footer_code"]}}},"ExpandFunnelStatsFields":{"name":"expand[]","in":"query","description":"Expand additional data in the response. Use `expand[]=steps` to include per-step statistics. When `expand[]=steps` is set, the response contains a `steps` array with detailed metrics for each funnel step. When omitted, the response contains a `page_public_ids` array instead. See [the expanded steps response](https://accounts.myclickfunnels.com/.well-known/stats/skill.md#response-with-expandsteps) in the [Stats Skill](https://accounts.myclickfunnels.com/.well-known/stats/skill.md) for both response shapes.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["steps"]}}},"StatsTimerangeStart":{"name":"timerange_start","in":"query","description":"Start of the stats timerange (ISO 8601 format). Defaults to 30 days before `timerange_end`. If the window between start and end exceeds 90 days, start is automatically clamped to 90 days before end. If start is after end, the window resets to the default 30 days ending at `timerange_end`. See [Timerange parameters (both endpoints)](https://accounts.myclickfunnels.com/.well-known/stats/skill.md#timerange-parameters-both-endpoints) in the [Stats Skill](https://accounts.myclickfunnels.com/.well-known/stats/skill.md) for the clamping rules and how to cover longer windows.","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-01-01T00:00:00Z"},"StatsTimerangeEnd":{"name":"timerange_end","in":"query","description":"End of the stats timerange (ISO 8601 format). Defaults to the current time. Values in the future are automatically clamped to now.","required":false,"schema":{"type":"string","format":"date-time"},"example":"2026-01-31T23:59:59Z"},"ExpandContactFields":{"name":"expand[]","in":"query","description":"Expand additional data in the response. Use `expand[]=field_name` to include optional fields (e.g., `expand[]=email_engagement`). See the [Expanding guide](https://developers.myclickfunnels.com/docs/expand) for available fields and examples.","required":false,"schema":{"type":"array","items":{"type":"string","enum":["email_engagement"]}}}},"headers":{"PaginationNext":{"description":"ID of the last item in the current response after which more records exist. You can use it in an `after` query parameter for cursor-based pagination to get to the next page.","schema":{"type":"string"}},"Link":{"description":"A direct link to the next page for the cursor-based pagination. It includes the `after` and the Pagination-Next ID value.","schema":{"type":"string"}}},"responses":{"FilteredQueryConcurrency":{"description":"Too Many Requests — two filtered reads are already active for this token and workspace","headers":{"Retry-After":{"description":"Seconds to wait before retrying. Also in the body as `retry_after`, for clients that cannot read response headers.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error","hint","retry_after"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Mirrors the `Retry-After` header so the delay survives transports that forward only the status and body."}}},"example":{"error":"Too many filtered requests are already running for this workspace and access token. Try again in 2 seconds.","retry_after":2,"hint":null}}}},"FilteredQueryBudget":{"description":"Service Unavailable — retryable. Two conditions land here:\n\n* **Transient dependency** — a database connection, the model behind filter generation, or another\n  dependency was briefly unavailable.\n* **Request budget exhausted** — the request's own wall clock ran out before the filter could be given a\n  fair slice, so no records were read. The time went elsewhere in the same request: a slow generation\n  call, or earlier pages of the same projection.\n\nThe second case is the OPPOSITE of the 422 that says the filter \"took longer than 10s to evaluate\". That\n422 is a statement timeout and is deterministic — the filter selects more than can be evaluated, and an\nunchanged retry fails identically. This 503 makes no such claim about the filter, so retrying is worth\ndoing; if it recurs, narrow the filter or ask for fewer records per call.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Service unavailable: This request ran out of its 20s budget before the filter could be evaluated, so no records were read. The filter itself was not found to be too broad, so retrying is worth doing.","hint":null}}}},"WorkspaceGrantForbidden":{"description":"Forbidden — the access token is limited to specific workspaces (see the workspace\nselection made when the key was provisioned, or the workspaces approved on the OAuth\nconsent screen) and this request is outside that set.\n\nTwo cases return this:\n\n* The request acts on a workspace the token was not granted.\n* The request's workspace could not be determined at all. The gate is fail-closed, so a\n  workspace-limited token is denied rather than allowed through when the target workspace\n  is ambiguous.\n\nA token with no workspace restriction never receives this status.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token is limited to specific workspaces and was not granted access to this one.","hint":"The token's workspace grant was chosen when it was provisioned (Platform Applications) or on the OAuth consent screen. Use GET /api/v2/workspaces to list the workspaces this token can reach."}}}}}},"security":[{"BearerAuth":[]},{"OAuth2":[]}],"paths":{"/teams":{"get":{"tags":["Team"],"summary":"List Teams","description":"List all teams for the current account","operationId":"listTeams","parameters":[{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamAttributes"}},"example":[{"id":42000,"public_id":"LAPeMn","name":"Example Team","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","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 \u0026 Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}]},{"id":42000,"public_id":"fJAxwk","name":"Example Team","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","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 \u0026 Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/teams/{id}":{"get":{"tags":["Team"],"summary":"Fetch Team","description":"Retrieve a single team","operationId":"fetchTeam","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamAttributes"},"example":{"id":42000,"public_id":"ErCxdM","name":"Example Team","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","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 \u0026 Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Team"],"summary":"Update Team","description":"List all teams for the current account","operationId":"updateTeam","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Team","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","$ref":"#/components/schemas/TeamParametersUpdate"}}},"example":{"team":{"name":"Example Team","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamAttributes"},"example":{"id":42000,"public_id":"aztNQC","name":"Example Team","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","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 \u0026 Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity"}}}},"/users":{"get":{"tags":["User"],"summary":"List Users","description":"List users for the current account. Note: an OAuth/API integration authenticates as a\n**platform-agent user** (e.g. \"Default API Client\"), so this endpoint is scoped to that\nagent and typically returns only it — it is **not** the way to enumerate the human team\nmembers. To find real team members (for example a workflow `notify_step`'s `user_ids`),\nuse `GET /api/v2/teams/{team_id}/memberships` and read each membership's `user_id`\n(`notify_step` only accepts non-platform team members).\n","operationId":"listUsers","parameters":[{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAttributes"}},"example":[{"id":9,"public_id":"QxvoAS","email":"test@email.com","first_name":"Kevin","last_name":"Hoppe","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","memberships":[{"id":10,"public_id":"vYxaJB","team_id":4,"user_id":9,"user_first_name":null,"user_last_name":null,"user_profile_photo_id":null,"user_email":null,"added_by_id":null,"platform_agent_of_id":null,"role_ids":["admin"],"created_at":"2025-01-27T12:44:11.708Z","updated_at":"2025-01-27T12:44:11.776Z","user":{"id":4,"public_id":"WJrGjY","name":"ClickFunnels","time_zone":"Eastern Time (US \u0026 Canada)","locale":"en","created_at":"2025-01-27T12:43:53.368Z","updated_at":"2025-07-15T11:27:53.059Z","billing_subscriptions":[{"id":4,"public_id":"WYrGvz","team_id":4,"status":"active","cycle_ends_at":null,"created_at":"2025-01-27T12:46:33.400Z","updated_at":"2025-01-27T12:46:33.459Z","included_prices":[{"id":4,"subscription_id":4,"price_id":"funnel_hacker_monthly_2022","quantity":1,"created_at":"2025-01-27T12:46:33.458Z","updated_at":"2025-01-27T12:46:33.458Z"}]}]}}]},{"id":10,"public_id":"boYPTU","email":"test@email.com","first_name":"Tandra","last_name":"Bechtelar","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","memberships":[{"id":11,"public_id":"OezDJK","team_id":6,"user_id":10,"user_first_name":null,"user_last_name":null,"user_profile_photo_id":null,"user_email":"noreply+f59f2d7a1f5fbdf431a5772b5e4ca0e4@bullettrain.co","added_by_id":null,"platform_agent_of_id":6,"role_ids":["admin"],"created_at":"2025-01-27T12:46:33.953Z","updated_at":"2025-01-27T12:46:33.959Z","user":{"id":6,"public_id":"GJPOeQ","name":"ClickFunnels Internal","time_zone":"Eastern Time (US \u0026 Canada)","locale":"en","created_at":"2025-01-27T12:46:33.481Z","updated_at":"2025-03-07T16:47:17.574Z"}}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/users/{id}":{"get":{"tags":["User"],"summary":"Fetch User","description":"Retrieve a single user","operationId":"fetchUser","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAttributes"},"example":{"id":11,"public_id":"nQDZEX","email":"test@email.com","first_name":"Eugenio","last_name":"Watsica","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","memberships":[{"id":14,"public_id":"RegNjN","team_id":2,"user_id":11,"user_first_name":null,"user_last_name":null,"user_profile_photo_id":null,"user_email":"noreply+557af4afa3ddc7d542ae242fef455a41@bullettrain.co","added_by_id":null,"platform_agent_of_id":7,"role_ids":["admin"],"created_at":"2025-01-27T12:46:38.579Z","updated_at":"2025-01-27T12:46:38.587Z","user":{"id":2,"public_id":"OjMAjZ","name":"System Admin Team Team","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","created_at":"2025-01-27T12:42:38.175Z","updated_at":"2025-03-07T16:46:55.374Z","billing_subscriptions":[{"id":1,"public_id":"BvJXjb","team_id":2,"status":"active","cycle_ends_at":null,"created_at":"2025-01-27T12:42:44.975Z","updated_at":"2025-01-27T12:42:45.038Z","included_prices":[{"id":1,"subscription_id":1,"price_id":"basic_monthly_2022","quantity":1,"created_at":"2025-01-27T12:42:45.037Z","updated_at":"2025-01-27T12:42:45.037Z"}]}]}}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"User not found","hint":null}}}}}}},"/me":{"get":{"tags":["User"],"summary":"Fetch My User","description":"This endpoint returns the user data for the currently authenticated user.\nIt is useful for quickly retrieving user information without knowing the user ID.\nIt also includes optional data if the current user is a platform agent.\n","operationId":"fetchMyUser","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","title":"My User","description":"Current user data with optional platform agent information","properties":{"id":{"type":"integer","description":"User ID"},"public_id":{"type":["string"],"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":"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 at"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated at"},"connected_workspace":{"type":["object","null"],"description":"The connected workspace for the user, if the user's access is\nscoped to a single workspace. This can happen in the case of\nOAuth, where the `/me` subject is a user who is a platform\nagent acting on behalf of the ClickFunnels workspace users.\nThe platform agent was authorized by a team admin to act on\nbehalf of the connected workspace.\n","properties":{"team_id":{"type":"integer","description":"Team ID of the connected workspace"},"team_name":{"type":"string","description":"Name of the team associated with the connected workspace"},"workspace_id":{"type":"integer","description":"Workspace ID of the connected workspace"},"workspace_name":{"type":"string","description":"Name of the connected workspace"},"workspace_url":{"type":"string","description":"URL of the connected workspace"},"workspace_currency":{"type":"string","description":"ISO 4217 currency code","example":"USD"}}},"platform_application":{"type":["object","null"],"description":"The connected platform application. It's only present if the\n`/me` subject user is an agent of a different platform who\nwas authorized by a team admin to act on behalf of the\nconnected workspace.\n","properties":{"id":{"type":"integer","description":"ID of the platform application"},"public_id":{"type":"string","description":"Public ID of the platform application"},"team_id":{"type":"integer","description":"Team ID associated with the platform application"}}}}},"example":{"id":1,"public_id":"tOACcL","email":"ines_lang@gibson.com","first_name":"Marcell","last_name":"Mertz","time_zone":"Pacific Time (US \u0026 Canada)","locale":"en","created_at":"2025-06-25T10:13:57.348Z","updated_at":"2025-06-25T10:13:57.348Z","connected_workspace":{"team_id":1,"team_name":"Team Alpha","workspace_id":2,"workspace_name":"Workspace Beta","workspace_url":"https://workspace-beta.example.com","workspace_currency":"USD"},"platform_application":{"id":11,"public_id":"OjzDYD","team_id":4}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/teams/{team_id}/workspaces":{"get":{"tags":["Workspace"],"summary":"List Workspaces","description":"List workspaces for a team","operationId":"listWorkspaces","parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of the workspace list. Defaults to `id`; `updated_at`\nand `name` are also supported.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","name"]}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceAttributes"}},"example":[{"id":42000,"public_id":"EYNOMX","team_id":42000,"name":"Example Workspace","subdomain":"example","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":42000,"public_id":"SuvKfc","team_id":42000,"name":"Example Workspace","subdomain":"example","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{id}":{"get":{"tags":["Workspace"],"summary":"Fetch Workspace","description":"Retrieve a workspace","operationId":"getWorkspaces","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceAttributes"},"example":{"id":42000,"public_id":"ouGIxn","team_id":42000,"name":"Example Workspace","subdomain":"example","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Workspace"],"summary":"Update Workspace","description":"Update a workspace","operationId":"updateWorkspaces","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Workspace","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"workspace":{"type":"object","$ref":"#/components/schemas/WorkspaceParametersUpdate"}}},"example":{"workspace":{"name":"My Workspace","subdomain":"mysubdomain"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkspaceAttributes"},"example":{"id":42000,"public_id":"JgaPjc","team_id":42000,"name":"Example Workspace","subdomain":"example","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/site":{"get":{"tags":["Site"],"summary":"Fetch Site","description":"Fetch the site for a workspace. Sites contain global code settings that apply to all pages and funnels.\n","operationId":"getSite","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/ExpandCodeFields"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteAttributes"},"example":{"id":1,"public_id":"aBcDeF","workspace_id":42000,"name":"My Website","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","blog_theme_id":null,"homepage_id":null,"store_theme_id":null,"theme_id":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Site"],"summary":"Update Site","description":"Update the site for a workspace.\n\nYou can use head_code and footer_code parameters to inject custom code. Use head_code_mode and footer_code_mode to control whether code is appended or replaced.\n","operationId":"updateSite","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/ExpandCodeFields"}],"requestBody":{"description":"Information about updated fields in Site","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"site":{"type":"object","$ref":"#/components/schemas/SiteParametersUpdate"}}},"example":{"site":{"name":"My Updated Website","head_code":"\u003cscript\u003econsole.log('site');\u003c/script\u003e","head_code_mode":"append","homepage_id":"RcHPAt"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteAttributes"},"example":{"id":1,"public_id":"aBcDeF","workspace_id":42000,"name":"My Updated Website","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","blog_theme_id":null,"homepage_id":null,"store_theme_id":null,"theme_id":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: Invalid code mode 'invalid'. Must be 'append' or 'replace'.","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Validation failed","hint":null}}}}}}},"/addresses/countries":{"get":{"tags":["Addresses::Country"],"summary":"List Countries","description":"List all 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.","operationId":"listAddressesCountries","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddressesCountryAttributes"}},"example":[{"iso2":"US","iso3":"USA","name":"United States","localized_name":"United States","has_regions":true},{"iso2":"CA","iso3":"CAN","name":"Canada","localized_name":"Canada","has_regions":true}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/addresses/countries/{id}":{"get":{"tags":["Addresses::Country"],"summary":"Get Country","description":"Retrieve a single country by its ISO 3166-1 alpha-2 code.","operationId":"getAddressesCountries","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"The country's ISO 3166-1 alpha-2 code (e.g. \"US\")."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressesCountryAttributes"},"example":{"iso2":"US","iso3":"USA","name":"United States","localized_name":"United States","has_regions":true}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: No such country: ZZ","hint":null}}}}}}},"/addresses/countries/{country_id}/regions":{"get":{"tags":["Addresses::Region"],"summary":"List Country Regions","description":"List the regions (states/provinces) of a country. Use a region's `code` or `name` as the address `region` value. Many countries have no regions.","operationId":"listAddressesCountriesRegions","parameters":[{"name":"country_id","in":"path","required":true,"schema":{"type":"string"},"description":"The country's ISO 3166-1 alpha-2 code (e.g. \"US\")."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddressesRegionAttributes"}},"example":[{"code":"CA","name":"California","localized_name":"California","country_code":"US"},{"code":"NY","name":"New York","localized_name":"New York","country_code":"US"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: No such country: ZZ","hint":null}}}}}}},"/workspaces/{workspace_id}/appointments/scheduled_events":{"get":{"tags":["Appointments::ScheduledEvent"],"summary":"List Scheduled Events","description":"List Scheduled Events","operationId":"listAppointmentsScheduledEvents","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppointmentsScheduledEventAttributes"}},"example":[{"id":2,"public_id":"THudgA","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":41,"public_id":"wuHLvl","email_address":"test-f2a9de6fe23672ca2a72@example.com","first_name":"Jules","last_name":"Connelly","phone_number":"(224) 508-1342 x59891"}},{"id":3,"public_id":"JbGkLQ","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":42,"public_id":"mOuNlh","email_address":"test-789e44776663df4ef58a@example.com","first_name":"Bobbie","last_name":"Zboncak","phone_number":"(224) 508-1342 x59891"}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/blogs":{"get":{"tags":["Blog"],"summary":"List Blogs","description":"List blogs for the given workspace.","operationId":"listBlogs","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogAttributes"}},"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"},{"id":2,"public_id":"gHiJkL","workspace_id":42000,"site_id":10,"name":"Product Updates","current_path":"/product-updates","url":"https://myworkspace.myclickfunnels.com/product-updates","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":null,"seo_description":null,"created_at":"2025-03-01T00:00:00.000Z","updated_at":"2025-03-15T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/blogs/{id}":{"get":{"tags":["Blog"],"summary":"Fetch Blog","description":"Retrieve a blog.","operationId":"getBlog","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Blog"],"summary":"Update Blog","description":"Update a blog's metadata. Permitted fields: `name`, `seo_title`, `seo_description`, `seo_image_id`, `theme_id`.\n\nSee [Update blog metadata](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#update-blog-metadata) in the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md). For appearance and templates, see [Configure blog appearance with existing Theme and Page APIs](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#configure-blog-appearance-with-existing-theme-and-page-apis).\n","operationId":"updateBlog","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Fields to update on the blog","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"blog":{"type":"object","$ref":"#/components/schemas/BlogParameters"}}},"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}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogAttributes"},"example":{"id":1,"public_id":"aBcDeF","workspace_id":42000,"site_id":10,"name":"My Updated 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-06-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Name can't be blank","hint":null}}}}}}},"/blogs/{blog_id}/posts":{"get":{"tags":["Blogs::Post"],"summary":"List Blog Posts","description":"List posts for the given blog. When importing content from an external source, page through this list first so you do not create a duplicate post, 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).","operationId":"listBlogsPosts","parameters":[{"name":"blog_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"$ref":"#/components/parameters/ExpandBlogPostFields"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogsPostAttributes"}},"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"},{"id":2,"public_id":"dEfGhI","blog_id":1,"title":"Tips for getting started with marketing automation","published_at":null,"current_path":"/blog/tips-for-marketing-automation","url":"https://myworkspace.myclickfunnels.com/blog/tips-for-marketing-automation","visibility":"draft","excerpt_content":"Practical advice for new marketers.","seo_title":null,"seo_description":null,"image_id":null,"image_url":null,"categories":[],"tags":[],"authors":[],"created_at":"2025-02-01T00:00:00.000Z","updated_at":"2025-02-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Blogs::Post"],"summary":"Create Blog Post","description":"Create a new post within the given blog.\n\nPass `markup` to set the post's visual content via PML. Invalid markup returns 400 and the post is not created. Pass `expand[]=markup` to have the markup returned in the response.\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) for the permitted fields and the publish-state rules. To copy an article in from an RSS/Atom feed or an external page, follow [Normalize external HTML for PML](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#3-normalize-external-html-for-pml) and [Create a draft](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#5-create-a-draft) in the [Import External Blog Post Skill](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md).\n","operationId":"createBlogPost","parameters":[{"name":"blog_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/ExpandBlogPostFields"}],"requestBody":{"description":"Information about a new Blog Post","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"blogs_post":{"type":"object","$ref":"#/components/schemas/BlogsPostParameters"}}},"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":"\u003csection\u003e\u003crow cols=\"1\"\u003e\u003ccolumn\u003e\u003cheadline\u003eHello world\u003c/headline\u003e\u003c/column\u003e\u003c/row\u003e\u003c/section\u003e","author_ids":[],"tag_ids":[],"category_ids":[]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogsPostAttributes"},"example":{"id":3,"public_id":"jKlMnO","blog_id":1,"title":"Getting started with your blog","published_at":null,"current_path":"/blog/getting-started-with-your-blog","url":"https://myworkspace.myclickfunnels.com/blog/getting-started-with-your-blog","visibility":"draft","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,"image_url":null,"categories":[],"tags":[],"authors":[],"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Invalid markup: unexpected token at line 3","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Blog. Granted scopes: blog:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Title can't be blank","hint":null}}}}}}},"/blogs/posts/{id}":{"get":{"tags":["Blogs::Post"],"summary":"Fetch Blog Post","description":"Retrieve a blog post.","operationId":"getBlogPost","parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandBlogPostFields"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogsPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Blogs::Post"],"summary":"Update Blog Post","description":"Update a blog post.\n\nPass `markup` to update the post's visual content via PML. It replaces the whole body, and PML covers only a subset of what the ClickFunnels editor can build, so if this post could have been written or edited in the editor, stop and get explicit approval from the user first: 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 change only metadata. Invalid markup returns 400 and neither the post metadata nor the markup is saved. Pass `expand[]=markup` to have the markup returned in the response.\n\nSee [Updating a blog post](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#updating-a-blog-post) in the [Blogs Skill](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md). To publish a draft, see [Publish separately](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#7-publish-separately) and [Two gotchas worth knowing](https://accounts.myclickfunnels.com/.well-known/blogs/skill.md#two-gotchas-worth-knowing).\n","operationId":"updateBlogPost","parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandBlogPostFields"}],"requestBody":{"description":"Information about updated fields in Blog Post","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"blogs_post":{"type":"object","$ref":"#/components/schemas/BlogsPostParameters"}}},"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":"\u003csection\u003e\u003crow cols=\"1\"\u003e\u003ccolumn\u003e\u003cheadline\u003eHello world\u003c/headline\u003e\u003c/column\u003e\u003c/row\u003e\u003c/section\u003e","author_ids":[],"tag_ids":[],"category_ids":[]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogsPostAttributes"},"example":{"id":1,"public_id":"xYzAbC","blog_id":1,"title":"Updated post title","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 updated summary.","seo_title":"Updated post title","seo_description":"Updated description.","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-07-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Invalid markup: unexpected token at line 3","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Blog. Granted scopes: blog:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Title can't be blank","hint":null}}}}}},"delete":{"tags":["Blogs::Post"],"summary":"Delete Blog Post","description":"Delete a blog post. This is a hard delete; the post and its associated authorships, taggings, applied categories, and publish actions are removed.\n\nDeleting example or stock posts while migrating content in is a separate step, see [Optional cleanup of confirmed example posts](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md#optional-cleanup-of-confirmed-example-posts) in the [Import External Blog Post Skill](https://accounts.myclickfunnels.com/.well-known/blogs/import-external-post/skill.md).\n","operationId":"deleteBlogPost","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Blog. Granted scopes: blog:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/blogs/{blog_id}/tags":{"get":{"tags":["Blogs::Tag"],"summary":"List Blog Tags","description":"List tags for the given blog.","operationId":"listBlogsTags","parameters":[{"name":"blog_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogsTagAttributes"}},"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"},{"id":2,"public_id":"tFgHiJ","blog_id":1,"name":"tutorial","created_at":"2025-01-15T00:00:00.000Z","updated_at":"2025-01-15T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Blogs::Tag"],"summary":"Create Blog Tag","description":"Create a new tag within the given blog.\n","operationId":"createBlogTag","parameters":[{"name":"blog_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Blog Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"blogs_tag":{"type":"object","$ref":"#/components/schemas/BlogsTagParameters"}}},"example":{"blogs_tag":{"name":"beginner"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogsTagAttributes"},"example":{"id":3,"public_id":"tKlMnO","blog_id":1,"name":"advanced","created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Name can't be blank","hint":null}}}}}}},"/blogs/tags/{id}":{"get":{"tags":["Blogs::Tag"],"summary":"Fetch Blog Tag","description":"Retrieve a blog tag.","operationId":"getBlogTag","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogsTagAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/blogs/{blog_id}/categories":{"get":{"tags":["Blogs::Category"],"summary":"List Blog Categories","description":"List the categories within the given blog.","operationId":"listBlogsCategories","parameters":[{"name":"blog_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogsCategoryAttributes"}},"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"},{"id":2,"public_id":"cFgHiJ","blog_id":1,"name":"Marketing","current_path":"/blog/category/marketing","created_at":"2025-01-15T00:00:00.000Z","updated_at":"2025-01-15T00:00:00.000Z","url":"https://myworkspace.myclickfunnels.com/blog/category/marketing"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/blogs/categories/{id}":{"get":{"tags":["Blogs::Category"],"summary":"Fetch Blog Category","description":"Retrieve a blog category.","operationId":"getBlogCategory","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogsCategoryAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/blogs/{blog_id}/authors":{"get":{"tags":["Blogs::Author"],"summary":"List Blog Authors","description":"List the authors within the given blog.","operationId":"listBlogsAuthors","parameters":[{"name":"blog_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogsAuthorAttributes"}},"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"},{"id":2,"public_id":"aFgHiJ","blog_id":1,"first_name":"John","last_name":"Doe","email_address":"john@example.com","image_id":null,"created_at":"2025-01-15T00:00:00.000Z","updated_at":"2025-01-15T00:00:00.000Z","full_name":"John Doe","display_name":"John Doe","image_url":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/blogs/authors/{id}":{"get":{"tags":["Blogs::Author"],"summary":"Fetch Blog Author","description":"Retrieve a blog author.","operationId":"getBlogAuthor","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogsAuthorAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/contacts":{"get":{"tags":["Contact"],"summary":"List Contacts","description":"List contacts for the given workspace. By default, only identified contacts are shown so you won\u0026#39;t see anonymous or GDPR-redacted contacts.","operationId":"listContacts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"email_address":{"type":"string","description":"A comma-separated list of email addresses to filter by.","example":"russel@clickfunnels.com,todd@clickfunnels.com"},"id":{"type":"string","description":"A comma-separated list of contact IDs to filter by.","example":"1,42"},"tag_ids":{"type":"string","description":"A comma-separated list of Contacts::Tag IDs to filter contacts that had those tags applied to them.","example":"1,42"},"is_active":{"type":"boolean","description":"Filter contacts by their active status. Pass true to return only active contacts, or false to return only inactive contacts.","example":true}}},"style":"deepObject","explode":true},{"name":"stored_filter_id","in":"query","required":false,"schema":{"type":"string"},"description":"The `id` (integer) or `public_id` (string) of a saved `Refine::StoredFilter` scoped to this workspace. Returned by `POST /api/v2/workspaces/{workspace_id}/contacts/filters` (with `save: true`) or by the RefineFilter endpoints. Applies the saved filter's criteria to the results, composed (AND) with any `filter[…]` params.\nReturns 422 if the filter is unknown, invalid, or belongs to a different workspace. When both `stored_filter_id` and `stable_id` are supplied, `stable_id` takes precedence."},{"name":"stable_id","in":"query","required":false,"schema":{"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 the tokens interoperable. Returned by `POST /api/v2/workspaces/{workspace_id}/contacts/filters` in the `stable_id` field. Treat the returned token as opaque and let the HTTP client encode the complete query parameter value. With curl, use `-G --data-urlencode \"stable_id=$STABLE_ID\"`; do not decode the token or interpolate it directly into a raw URL. Applies the encoded filter criteria to the results, composed (AND) with any `filter[…]` params.\nReturns 422 if the token is not a valid Refine stable_id, is not a ContactsFilter, or groups conditions with mixed `and`/`or` semantics. Flat filters and grouped filters using a single conjunction (including tokens copied from the filtered Contacts UI) are supported. When both `stored_filter_id` and `stable_id` are supplied, `stable_id` takes precedence."},{"$ref":"#/components/parameters/ExpandContactFields"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactAttributes"}},"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,"deleted_at":null,"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"}}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — `stored_filter_id` is unknown, invalid, or belongs to a different workspace; or `stable_id` is not a valid Refine token, is not a ContactsFilter, or groups conditions with mixed `and`/`or` semantics. Flat and single-conjunction grouped stable-id filters are supported.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"stored_filter_id is invalid or does not belong to this workspace","hint":null}}}}}},"post":{"tags":["Contact"],"summary":"Create Contact","description":"Add a new contact to the workspace","operationId":"createContacts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/ExpandContactFields"}],"requestBody":{"description":"Information about a new Contact","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contact":{"type":"object","$ref":"#/components/schemas/ContactParameters"}}},"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 \u0026 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"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactAttributes"},"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,"deleted_at":null,"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"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/contacts/{id}":{"get":{"tags":["Contact"],"summary":"Fetch Contact","description":"Retrieve a contact","operationId":"getContacts","parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandContactFields"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactAttributes"},"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,"deleted_at":null,"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"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Contact"],"summary":"Update Contact","description":"Update a contact","operationId":"updateContacts","parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandContactFields"}],"requestBody":{"description":"Information about updated fields in Contact","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contact":{"type":"object","$ref":"#/components/schemas/ContactParametersUpdate"}}},"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 \u0026 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"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactAttributes"},"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,"deleted_at":null,"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"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contact"],"summary":"Remove Contact","description":"Delete a contact. This is a soft delete: the contact is removed from list endpoints and filters but stays readable by id, with `deleted_at` set. Returns 422 when the contact cannot be deleted - it is the workspace default contact, has an active subscription order, or has course enrollments.","operationId":"removeContacts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"This contact has an active subscription order and cannot be deleted.","hint":null}}}}}}},"/contacts/{id}/gdpr_destroy":{"delete":{"tags":["Contact"],"summary":"Redact Contact","description":"This will destroy all personally identifiable information for a contact, including their name and phone number, but does not delete the contact record itself. This cannot be undone.","operationId":"gdpr_destroyContacts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK"},"404":{"description":"Not Found"}}}},"/workspaces/{workspace_id}/contacts/upsert":{"post":{"tags":["Contact"],"summary":"Upsert a Contact","description":"Creates or updates a Contact, matching on the email address. If the Contact does not exist, it will be created. If the Contact does exist, it will be updated. It is not possible to delete a Contact via this endpoint. It is not possible to reset properties of a Contact by passing empty values. E.g. passing `null` for `first_name` or an empty array for `tag_ids` won\u0026#39;t update previous values. To do that you would instead need to use the `Update Contact` endpoint.","operationId":"upsertContacts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/ExpandContactFields"}],"requestBody":{"description":"Contact to create or update, matching on the email address. Note that properties of a Contact are not reset when passed empty values, e.g. passing `null` for `first_name` or an empty array for `tag_ids` won't update previous values. To do that you would instead use the `Update Contact` endpoint.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contact":{"type":"object","$ref":"#/components/schemas/ContactParameters"}}},"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 \u0026 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"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactAttributes"},"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,"deleted_at":null,"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"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactAttributes"},"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,"deleted_at":null,"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"}}}}}}}}},"/workspaces/{workspace_id}/stats":{"get":{"tags":["Workspace"],"summary":"Fetch Workspace Stats","description":"\u003e **Closed Beta** — not yet enabled for all workspaces (403 otherwise). Request access at https://developers.myclickfunnels.com/page/code-support.\n\nAggregate statistics over a **filtered set of records, without listing the records**. Use this for any\n\"how many\", \"what's the breakdown\", or \"what's the total\" question: it is dramatically cheaper than paging\na collection and counting client-side.\n\nOne workspace endpoint serves every analyzable resource. Name the resource and request the stats you want\nas query parameters:\n\n```http\nGET /api/v2/workspaces/{workspace_id}/stats?resource=contact\u0026count=true\u0026count_by[property]=is_active\u0026filter[tag_ids]=42\n```\n\nA flag of `true` computes the stat; an object-style query supplies a stat's parameters. Omit a stat (or pass\n`false`) to skip it. Calling with only `resource` returns a 422 that lists the stats and `property` values the\nnamed resource supports, so the endpoint is self-describing.\n\n### Narrowing the set\n\nThe same selectors the resource's own index accepts, composed with AND:\n\n- `filter` - simple field matches, e.g. `filter[tag_ids]=42` for contacts\n- `stable_id` - a one-off Refine filter token, e.g. from `POST /workspaces/{workspace_id}/contacts/filters`\n- `stored_filter_id` - a saved Refine filter id\n\nOmit all three to report on every record of that resource in the workspace.\n\n### Counts are capped\n\nCounting a large filtered audience scans every matching row, so every stat here is bounded. When the\nmatching set exceeds the cap, `count` returns the cap and the response carries `count_capped_at` - the real\ntotal is higher, so narrow the filter. Exact aggregates (`created_at_range`, `sum`) are not computed at all\nbeyond the cap; they are named in `unavailable` rather than returned as a confidently wrong number.\n\n### Access\n\nComputing a statistic persists nothing, so a token with **read-only** access may call it. Authorization\nfollows the category of the resource being analyzed: `contact` requires read access to Contacts, `order`\nrequires read access to Store.\n","operationId":"getWorkspaceStats","externalDocs":{"description":"Stats Skill - record stats","url":"https://accounts.myclickfunnels.com/.well-known/stats/skill.md#record-stats-counts-breakdowns-and-totals"},"parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"resource","in":"query","required":true,"description":"The resource to report on.","schema":{"type":"string","enum":["contact","order"]},"example":"contact"},{"name":"count","in":"query","required":false,"description":"How many records match. Capped - see `count_capped_at` in the response.","schema":{"type":"boolean","default":false}},{"name":"count_by","in":"query","required":false,"description":"Breaks the matching set down by one allow-listed property, returning a count per distinct value.","style":"deepObject","explode":true,"schema":{"type":"object","required":["property"],"properties":{"property":{"type":"string","description":"Allow-listed per resource - `contact`: `is_active`, `anonymous`, `email_suppression_reason`, `time_zone`; `order`: `billing_status`, `service_status`, `order_type`, `live_mode`. A 422 lists them.","example":"is_active"}}}},{"name":"created_at_range","in":"query","required":false,"description":"The earliest and latest `created_at` in the matching set. Exact, so it is only computed when the set is within the cap.","schema":{"type":"boolean","default":false}},{"name":"sum","in":"query","required":false,"description":"Totals one allow-listed numeric property. Exact, so it is only computed when the set is within the cap. Not available for every resource.","style":"deepObject","explode":true,"schema":{"type":"object","required":["property"],"properties":{"property":{"type":"string","description":"Allow-listed per resource - `order`: `total_amount`, `tax_amount`, `total_collected`. A 422 lists them.","example":"total_amount"}}}},{"name":"filter","in":"query","required":false,"description":"Simple field matches, using the same keys the resource's index accepts - `contact`: `id`, `email_address`, `is_active`, `tag_ids`; `order`: `id`, `contact_id`, `order_type`, `billing_status`, `service_status`, `live_mode`. Comma-separated values match any of them.","style":"deepObject","explode":true,"schema":{"type":"object","additionalProperties":{"type":"string"}},"example":{"tag_ids":"42"}},{"name":"stable_id","in":"query","required":false,"description":"A URL-encoded Refine `stable_id` token, applied to the set before computing. Same token format the resource's index accepts; for contacts it can come from `POST /workspaces/{workspace_id}/contacts/filters`. Pass it exactly as returned.","schema":{"type":"string"}},{"name":"stored_filter_id","in":"query","required":false,"description":"The `id` or `public_id` of a saved Refine filter in this workspace, applied to the set before computing. Must match the resource's filter type.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["resource","workspace_id","stats"],"properties":{"resource":{"type":"string","description":"The resource reported on."},"workspace_id":{"type":"integer"},"stats":{"type":"object","description":"One key per requested stat.","properties":{"count":{"type":"integer","description":"Matching records. Equal to `count_capped_at` when the cap was hit, in which case the true total is higher."},"count_capped_at":{"type":"integer","description":"Present only when the matching set exceeded the scan cap. `count` is this value, and the real total is higher — narrow the filter."},"count_by":{"type":"object","required":["property","values","capped"],"properties":{"property":{"type":"string"},"values":{"type":"object","description":"Count per distinct value. A NULL value is keyed as the string `null`.","additionalProperties":{"type":"integer"}},"capped":{"type":"boolean","description":"When `true`, the breakdown covers only the first capped slice of the set."}}},"created_at_range":{"type":"object","properties":{"min":{"type":["string","null"],"format":"date-time","description":"Earliest `created_at` in the matching set, or `null` when the set is empty."},"max":{"type":["string","null"],"format":"date-time","description":"Latest `created_at` in the matching set, or `null` when the set is empty."}}},"sum":{"type":"object","required":["property","value"],"properties":{"property":{"type":"string"},"value":{"type":["string","null"],"description":"Decimal total serialized as a string to preserve precision. Money renders at the currency's minor units, the same scale the resource's own record serializer uses (`\"100.00\"`, not `\"100.0\"`). `null` means the matching set was EMPTY - a non-empty set whose rows are all NULL in that column totals zero, matching what those records serialize as, so `null` and a zero total are never ambiguous."}}}}},"unavailable":{"type":"array","description":"Requested stats that were NOT computed because the matching set exceeded the cap. Present only when something was skipped.","items":{"type":"string"}},"unavailable_reason":{"type":"string"}}},"example":{"resource":"contact","workspace_id":5,"stats":{"count":51,"count_by":{"property":"is_active","values":{"true":40,"false":11},"capped":false}}}}}},"400":{"description":"Bad Request — the required `resource` query parameter is missing","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: param is missing or the value is empty: resource","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden, from either of two conditions. Neither is retryable.\n\n* **Scope** — the token's scopes don't grant read access to the analyzed resource's category.\n* **Availability** — this endpoint is in Closed Beta and is not enabled for the workspace yet.\n  The message says so and names the alternatives that need no access: ask a refine filter for its\n  matching records with `results` (which returns a bounded `count` when you pass\n  `results[count]=true`), or page the resource's own list endpoint. Request access at https://developers.myclickfunnels.com/page/code-support.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"This access token's scopes do not grant read access to Store. Granted scopes: read contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found — workspace not found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — an unknown `resource`, an unknown or unsupported stat, a missing/disallowed\n`property`, an unknown `filter` key, or no stats requested. The message enumerates the valid values, so\nan empty request is a cheap way to discover a resource's capabilities.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"sum is not supported for contact. Supported: count, count_by, created_at_range","hint":null}}}},"429":{"$ref":"#/components/responses/FilteredQueryConcurrency"},"503":{"$ref":"#/components/responses/FilteredQueryBudget"}}}},"/workspaces/{workspace_id}/contacts/filters":{"post":{"tags":["Contacts::Filter"],"summary":"Generate a Contact Filter","description":"Translates a natural-language audience description into a ClickFunnels contact filter using an AI model.\n\nThe response always includes the same key set: a `stable_id` token, a structured `filter` object, and the\nidentity fields `id`, `public_id`, `workspace_id`, and `name`. When `save: true` is supplied the filter is\npersisted as a reusable `Refine::StoredFilter` and those identity fields are populated; otherwise they are\n`null`. A saved filter can be fetched later via `GET /api/v2/contacts/filters/{id}`.\n\nPass the returned `stable_id` to `GET /api/v2/workspaces/{workspace_id}/contacts` as the value of the\n`stable_id` query parameter. Keep it opaque and let the HTTP client encode the complete parameter value;\nwith curl, use `-G --data-urlencode \"stable_id=$STABLE_ID\"`. Do not decode it or interpolate it directly\ninto a raw URL. Alternatively, pass the returned `id` as `stored_filter_id` (requires `save: true`).\n\nThe `stable_id` token uses the standard gzip+base64 Refine full-state format — the same format the\nserver-rendered filter UI produces and consumes — making tokens fully interoperable between the API\nand the HTML filter UI.\n\nAlthough this is a POST, generating a filter persists nothing, so a token with read-only access to\nthe Contacts category may call it (the `stable_id` it returns is usable against read endpoints like\nthe contacts index). Passing `save: true` persists a stored filter and requires write access.\n\nBecause this endpoint selects from the full condition catalog, it can produce text criteria that no\nindex can serve. On a text attribute `eq` and `sw` resolve against an index, while `cont` (contains)\nand `ew` (ends with) force a scan of every value stored for that attribute - the cost tracks how many\nvalues the attribute holds rather than how many contacts the filter selects, so adding further\ncriteria may not reduce it. This is most visible on free-text contact custom attributes, which only\nthis endpoint can select on, and on a workspace with millions of contacts it is what makes evaluating\nthe filter exceed the request limit. Where the description allows it, ask for an exact value or a\nprefix rather than a substring.\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 a worked request and for managing a saved filter afterwards.\n","operationId":"generateContactFilter","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"Natural-language description of the audience or filter to generate.","example":"buyers of the $99 course who joined in the last 30 days"},"save":{"type":"boolean","default":false,"description":"When `true`, persists the generated filter as a reusable `Refine::StoredFilter`. The saved filter identity fields are included in the response. Requires write access to the Contacts category (generating without `save` needs only read)."},"name":{"type":["string","null"],"description":"Human-readable name for the saved filter. Only used when `save` is `true`. Must be unique within the workspace when provided."},"results":{"$ref":"#/components/schemas/FilterResultsParameter"}}},"example":{"text":"buyers of the $99 course who joined in the last 30 days","save":true,"name":"Recent course buyers"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"type":"object","required":["id","public_id","workspace_id","name","stable_id","filter"],"properties":{"id":{"type":["integer","null"],"description":"Saved filter ID, or `null` when the filter was not saved (`save` was falsey)."},"public_id":{"type":["string","null"],"description":"Obfuscated saved filter ID, or `null` when the filter was not saved."},"workspace_id":{"type":["integer","null"],"description":"Workspace ID, or `null` when the filter was not saved."},"name":{"type":["string","null"],"description":"Name of the saved filter, or `null` when the filter was not saved or had no name."},"results":{"$ref":"#/components/schemas/FilterResults"},"stable_id":{"type":"string","description":"URL-encoded Refine `stable_id` token in the standard gzip+base64 full-state format — interoperable with the server-rendered filter UI. To apply it on the contacts index, keep it opaque and let the HTTP client encode the complete `stable_id` query parameter value (with curl, use `-G --data-urlencode \"stable_id=$STABLE_ID\"`). Always present in the response."},"filter":{"type":"object","description":"The structured filter generated from the natural-language description.","required":["conjunction","criteria"],"properties":{"conjunction":{"type":"string","enum":["and","or"],"description":"How the criteria are joined — `and` (all must match) or `or` (any must match)."},"criteria":{"type":"array","description":"Ordered list of filter criteria.","items":{"$ref":"#/components/schemas/RefineFilterCriterion"}}}}}},"example":{"id":87,"public_id":"XyZ123","workspace_id":5,"name":"Recent course buyers","stable_id":"eyJjb25qdW5jdGlvbiI6ImFuZCIsImNyaXRlcmlhIjpbXX0=","filter":{"conjunction":"and","criteria":[{"attribute":"owned_products.id","clause":"in","value":["123"]},{"attribute":"created_at","clause":"gt","value":"2026-05-12"}]}}}}},"400":{"description":"Bad Request — `text` is blank or missing","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"param is missing or the value is empty: text","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found — workspace not found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — the model could not produce a valid filter from the given description, or the\nrequest is too big to translate in one call.\n\nThe second case is worth designing for: how long generation takes is driven by how long the ANSWER is,\nso a description implying many separate criteria (a list of individual contacts or email addresses,\nfor example) exceeds the request budget every time, not intermittently. Retrying it unchanged fails\nidentically — describe the audience by attributes (tags, dates, purchases) or split it into smaller\nrequests instead.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"The request is too large to translate into a contact filter. Describe the audience in terms of attributes (tags, dates, purchases) rather than listing individual contacts, or split it into smaller requests.","hint":null}}}},"429":{"description":"Too Many Requests, from either of two independent limits:\n\n* **Concurrency** — two database-heavy filtered reads are already active for this access token and workspace. Wait `retry_after` seconds (also sent as the `Retry-After` header); the same request will succeed once one finishes.\n* **Funnels AI spend cap** — the team has reached its Funnels AI budget, so no new generation is started. The body carries `limit_reached: true` and retrying will not help until the cap resets. This is the cap working rather than a failure, so present it as a notice.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before retrying. Sent for the concurrency limit; absent when the spend cap is what stopped the request. Mirrored in the body as `retry_after`, for clients that cannot read response headers."}},"content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only for the concurrency limit, mirroring the `Retry-After` header so the delay survives transports that forward only the status and body."},"limit_reached":{"type":"boolean","description":"Present and true only when the Funnels AI spend cap stopped the request, which distinguishes it from the concurrency limit."}}},"example":{"error":"Too many filtered requests are already running for this workspace and access token. Try again in 2 seconds.","retry_after":2,"hint":null}}}},"503":{"$ref":"#/components/responses/FilteredQueryBudget"}}}},"/contacts/filters/{id}":{"get":{"tags":["Contacts::Filter"],"summary":"Get a Contact Filter","description":"Fetches a previously saved contact filter by id. This route is shallow — the workspace is resolved from\nthe filter itself, so no `workspace_id` is required in the path. Use the `id` (or `public_id`) returned by\n`POST /api/v2/workspaces/{workspace_id}/contacts/filters` with `save: true`.\n\nReturns the same resource shape as the generate endpoint, with the identity fields populated. The\n`stable_id` is re-derived from the saved filter. To apply it on the contacts index, keep it opaque and\nlet the HTTP client encode the complete `stable_id` query parameter value; with curl, use\n`-G --data-urlencode \"stable_id=$STABLE_ID\"`.\n","operationId":"getContactFilter","parameters":[{"name":"id","in":"path","required":true,"description":"The saved filter's `id` or `public_id`.","schema":{"type":"string"}},{"name":"results","in":"query","required":false,"style":"deepObject","explode":true,"description":"Return projected matches inline. Pass `true` for ids only; omit for the filter definition alone.","schema":{"type":["object","boolean"],"properties":{"fields":{"type":"string","description":"Comma-separated fields to project. Defaults to `id`.","example":"id,email_address"},"limit":{"type":"integer","description":"Caller-set row limit. Defaults to 500."},"max_bytes":{"type":"integer","description":"Caller-set row byte budget. Defaults to 3072 and is capped at 4194304."},"after":{"type":"string","description":"Positive-integer cursor from `results.next_after`."},"count":{"type":"boolean","default":false,"description":"Include the bounded total count. May require another filter evaluation."}}}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["id","public_id","workspace_id","name","stable_id","filter"],"properties":{"id":{"type":"integer","description":"Saved filter ID."},"public_id":{"type":"string","description":"Obfuscated saved filter ID."},"workspace_id":{"type":"integer","description":"Workspace the filter belongs to."},"name":{"type":["string","null"],"description":"Name of the saved filter, or `null` when it has no name."},"stable_id":{"type":"string","description":"URL-encoded Refine `stable_id` token in the standard gzip+base64 full-state format — interoperable with the server-rendered filter UI. To apply it on the contacts index, keep it opaque and let the HTTP client encode the complete `stable_id` query parameter value (with curl, use `-G --data-urlencode \"stable_id=$STABLE_ID\"`)."},"filter":{"type":"object","description":"The structured filter.","required":["conjunction","criteria"],"properties":{"conjunction":{"type":"string","enum":["and","or"],"description":"How the criteria are joined — `and` (all must match) or `or` (any must match)."},"criteria":{"type":"array","description":"Ordered list of filter criteria.","items":{"$ref":"#/components/schemas/RefineFilterCriterion"}}}},"results":{"$ref":"#/components/schemas/FilterResults"}}},"example":{"id":87,"public_id":"XyZ123","workspace_id":5,"name":"Recent course buyers","stable_id":"eyJjb25qdW5jdGlvbiI6ImFuZCIsImNyaXRlcmlhIjpbXX0=","filter":{"conjunction":"and","criteria":[{"attribute":"owned_products.id","clause":"in","value":["123"]}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found — no such filter, or it belongs to a workspace you cannot access","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — invalid result projection or filter state","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Unknown results.fields for contact: favourite_colour","hint":null}}}},"429":{"$ref":"#/components/responses/FilteredQueryConcurrency"},"503":{"$ref":"#/components/responses/FilteredQueryBudget"}}}},"/contacts/{contact_id}/applied_tags":{"get":{"tags":["Contacts::AppliedTag"],"summary":"List Applied Tags","description":"List the applied tags for a contact","operationId":"listContactsAppliedTags","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of applied tag IDs to filter by.","example":"1,42"},"tag_id":{"type":"string","description":"A comma-separated list of tag IDs to filter by.","example":"1,2,3"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactsAppliedTagAttributes"}},"example":[{"id":2,"public_id":"AYevzG","contact_id":1,"tag_id":51,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","tag":{"public_id":"QeOyXv","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"}},{"id":3,"public_id":"hIQuPR","contact_id":1,"tag_id":52,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","tag":{"public_id":"wjGBNe","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"}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Contacts::AppliedTag"],"summary":"Create Applied Tag","description":"Assign a tag to a contact by creating an applied tag","operationId":"createContactsAppliedTags","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Applied Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_applied_tag":{"type":"object","$ref":"#/components/schemas/ContactsAppliedTagParameters"}}},"example":{"contacts_applied_tag":{"tag_id":3}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsAppliedTagAttributes"},"example":{"id":5,"public_id":"jgqvTJ","contact_id":1,"tag_id":54,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","tag":{"public_id":"wvVYaj","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"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/contacts/applied_tags/{id}":{"get":{"tags":["Contacts::AppliedTag"],"summary":"Fetch Applied Tag","description":"Retrieve an applied tag for a contact","operationId":"getContactsAppliedTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsAppliedTagAttributes"},"example":{"id":4,"public_id":"VNCLKs","contact_id":1,"tag_id":53,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","tag":{"public_id":"ovwMke","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"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contacts::AppliedTag"],"summary":"Remove Applied Tag","description":"Remove a tag from a contact by deleting an applied tag","operationId":"removeContactsAppliedTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/contacts/tags":{"get":{"tags":["Contacts::Tag"],"summary":"List Tags","description":"List all Contact Tags for your workspace","operationId":"listContactsTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of tag IDs to filter by.","example":"1,42"},"name":{"type":"string","description":"A comma-separated list of tag names to filter by.","example":"cool-user,gold"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactsTagAttributes"}},"example":[{"id":60,"public_id":"rnZVJU","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":61,"public_id":"AgQjPt","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Contacts::Tag"],"summary":"Create Tag","description":"Add a new Contact Tag to your Workspace","operationId":"createContactsTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_tag":{"type":"object","$ref":"#/components/schemas/ContactsTagParameters"}}},"example":{"contacts_tag":{"name":"Example Tag","color":"#FF5733"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsTagAttributes"},"example":{"id":63,"public_id":"DxSHCE","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/contacts/tags/{id}":{"get":{"tags":["Contacts::Tag"],"summary":"Fetch Tag","description":"Retrieve a single Contact Tag","operationId":"getContactsTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsTagAttributes"},"example":{"id":62,"public_id":"DOCZao","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Contacts::Tag"],"summary":"Update Tag","description":"Update a Contact Tag","operationId":"updateContactsTags","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_tag":{"type":"object","$ref":"#/components/schemas/ContactsTagParametersUpdate"}}},"example":{"contacts_tag":{"name":"renamed-tag","color":"#FF5733"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsTagAttributes"},"example":{"id":65,"public_id":"aLwlpM","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contacts::Tag"],"summary":"Remove Tag","description":"Delete a Contact Tag from your workspace","operationId":"removeContactsTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/contacts/tag_actions":{"get":{"tags":["Contacts::TagAction"],"summary":"List Tag Actions","description":"List all Contact Tag Actions for your workspace","operationId":"listContactsTagActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactsTagActionAttributes"}},"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":850,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:02:30.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:02:30.000Z"},{"id":2,"public_id":"eF5gH6","workspace_id":42000,"tag_ids":["12"],"action_type":"remove","filter_id":null,"target_all":false,"target_ids":["cust_abc","cust_def"],"target_count":2,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Contacts::TagAction"],"summary":"Create Tag Action","description":"Bulk-apply or bulk-remove one or more Contact Tags across a filtered set of contacts. The action runs asynchronously — poll the returned record with `GET /api/v2/contacts/tag_actions/{id}` to track progress via `target_count` and `performed_count`.\nExactly one target selection must be supplied: `stable_id`, `stored_filter_id` (alias `filter_id`), `target_ids`, or `target_all`. Returns 422 if none is provided or if the supplied value is invalid.","operationId":"createContactsTagActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Tag Action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_tag_action":{"type":"object","$ref":"#/components/schemas/ContactsTagActionParameters"}}},"example":{"contacts_tag_action":{"tag_ids":["12","34"],"action_type":"add","stored_filter_id":"7"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsTagActionAttributes"},"example":{"id":3,"public_id":"iJ7kL8","workspace_id":42000,"tag_ids":["12","34"],"action_type":"add","filter_id":7,"target_all":false,"target_ids":[],"target_count":null,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity — no target selection was supplied; or `stable_id` is not a valid Refine token or not a ContactsFilter; or `stored_filter_id` is unknown, invalid, or belongs to a different workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"provide a selection: stable_id, stored_filter_id, target_ids, or target_all","hint":null}}}}}}},"/contacts/tag_actions/{id}":{"get":{"tags":["Contacts::TagAction"],"summary":"Fetch Tag Action","description":"Retrieve a single Contact Tag Action and its current async progress","operationId":"getContactsTagActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsTagActionAttributes"},"example":{"id":3,"public_id":"iJ7kL8","workspace_id":42000,"tag_ids":["12","34"],"action_type":"add","filter_id":7,"target_all":false,"target_ids":[],"target_count":850,"performed_count":600,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-03T00:00:30.000Z","completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:30.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contacts::TagAction"],"summary":"Remove Tag Action","description":"Delete a Contact Tag Action record","operationId":"removeContactsTagActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/contacts/enroll_actions":{"get":{"tags":["Contacts::EnrollAction"],"summary":"List Enroll Actions","description":"List all Contact Enroll Actions for your workspace","operationId":"listContactsEnrollActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactsEnrollActionAttributes"}},"example":[{"id":1,"public_id":"aB3cD4","workspace_id":42000,"course_ids":["QwdWoj"],"section_ids":["Xk9pLm"],"filter_id":7,"target_all":false,"target_ids":[],"target_count":200,"performed_count":200,"created_by_id":5,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:02:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:02:00.000Z"},{"id":2,"public_id":"eF5gH6","workspace_id":42000,"course_ids":["QwdWoj"],"section_ids":[],"filter_id":null,"target_all":false,"target_ids":["cust_abc"],"target_count":1,"performed_count":0,"created_by_id":5,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Contacts::EnrollAction"],"summary":"Create Enroll Action","description":"Bulk-enroll a collection of contacts into course sections. Pass `course_ids` to enroll in every section of those courses, or `section_ids` for specific sections (or both). The action runs asynchronously — poll the returned record with `GET /api/v2/contacts/enroll_actions/{id}` to track progress via `target_count` and `performed_count`.\nExactly one target selection must be supplied: `stable_id`, `stored_filter_id` (alias `filter_id`), `target_ids`, or `target_all`. Returns 422 if none is provided or if the supplied value is invalid.\nThe `course_ids` and `section_ids` you target come from the course content tree; see [Reading back a course](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#reading-back-a-course) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md).","operationId":"createContactsEnrollActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Enroll Action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_enroll_action":{"type":"object","$ref":"#/components/schemas/ContactsEnrollActionParameters"}}},"example":{"contacts_enroll_action":{"course_ids":["QwdWoj"],"stored_filter_id":"7"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsEnrollActionAttributes"},"example":{"id":3,"public_id":"iJ7kL8","workspace_id":42000,"course_ids":["QwdWoj"],"section_ids":["Xk9pLm"],"filter_id":7,"target_all":false,"target_ids":[],"target_count":null,"performed_count":0,"created_by_id":5,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity — no target selection was supplied; or `stable_id` is not a valid Refine token or not a ContactsFilter; or `stored_filter_id` is unknown, invalid, or belongs to a different workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"provide a selection: stable_id, stored_filter_id, target_ids, or target_all","hint":null}}}}}}},"/contacts/enroll_actions/{id}":{"get":{"tags":["Contacts::EnrollAction"],"summary":"Fetch Enroll Action","description":"Retrieve a single Contact Enroll Action and its current async progress","operationId":"getContactsEnrollActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsEnrollActionAttributes"},"example":{"id":3,"public_id":"iJ7kL8","workspace_id":42000,"course_ids":["QwdWoj"],"section_ids":["Xk9pLm"],"filter_id":7,"target_all":false,"target_ids":[],"target_count":200,"performed_count":150,"created_by_id":5,"scheduled_for":null,"started_at":"2025-01-03T00:00:30.000Z","completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:30.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contacts::EnrollAction"],"summary":"Remove Enroll Action","description":"Delete a Contact Enroll Action record","operationId":"removeContactsEnrollActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/contacts/run_workflow_actions":{"get":{"tags":["Contacts::RunWorkflowAction"],"summary":"List Run Workflow Actions","description":"List all Contact Run Workflow Actions for your workspace","operationId":"listContactsRunWorkflowActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactsRunWorkflowActionAttributes"}},"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":500,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:03:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:03:00.000Z"},{"id":2,"public_id":"fG6hI7","workspace_id":42000,"workflow_id":99,"force_run":true,"filter_id":null,"target_all":false,"target_ids":["cust_abc"],"target_count":1,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Contacts::RunWorkflowAction"],"summary":"Create Run Workflow Action","description":"Run a workflow against a collection of contacts. Requires `workflow_id`. Set `force_run: true` to re-enqueue contacts already in the workflow. The action runs asynchronously — poll the returned record with `GET /api/v2/contacts/run_workflow_actions/{id}` to track progress via `target_count` and `performed_count`.\nExactly one target selection must be supplied: `stable_id`, `stored_filter_id` (alias `filter_id`), `target_ids`, or `target_all`. Returns 422 if none is provided or if the supplied value is invalid.\nTo enroll a single contact instead of an audience, use `POST /workflows/{workflow_id}/runs` ([manual enrollment](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#runs---manual-enrollment)). See the [Workflows Skill](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md) for building the target workflow and [Enabling, disabling](https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling) for taking it live.","operationId":"createContactsRunWorkflowActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Run Workflow Action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_run_workflow_action":{"type":"object","$ref":"#/components/schemas/ContactsRunWorkflowActionParameters"}}},"example":{"contacts_run_workflow_action":{"workflow_id":"Wf1aB2","stored_filter_id":"7"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsRunWorkflowActionAttributes"},"example":{"id":3,"public_id":"jK8lM9","workspace_id":42000,"workflow_id":99,"force_run":false,"filter_id":7,"target_all":false,"target_ids":[],"target_count":null,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity — no target selection was supplied; or `stable_id` is not a valid Refine token or not a ContactsFilter; or `stored_filter_id` is unknown, invalid, or belongs to a different workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"provide a selection: stable_id, stored_filter_id, target_ids, or target_all","hint":null}}}}}}},"/contacts/run_workflow_actions/{id}":{"get":{"tags":["Contacts::RunWorkflowAction"],"summary":"Fetch Run Workflow Action","description":"Retrieve a single Contact Run Workflow Action and its current async progress","operationId":"getContactsRunWorkflowActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsRunWorkflowActionAttributes"},"example":{"id":3,"public_id":"jK8lM9","workspace_id":42000,"workflow_id":99,"force_run":false,"filter_id":7,"target_all":false,"target_ids":[],"target_count":500,"performed_count":250,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-03T00:00:30.000Z","completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:30.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contacts::RunWorkflowAction"],"summary":"Remove Run Workflow Action","description":"Delete a Contact Run Workflow Action record","operationId":"removeContactsRunWorkflowActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/contacts/unsubscribe_actions":{"get":{"tags":["Contacts::UnsubscribeAction"],"summary":"List Unsubscribe Actions","description":"List all Contact Unsubscribe Actions for your workspace","operationId":"listContactsUnsubscribeActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactsUnsubscribeActionAttributes"}},"example":[{"id":1,"public_id":"cD5eF6","workspace_id":42000,"filter_id":7,"target_all":false,"target_ids":[],"target_count":300,"performed_count":300,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:02:30.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:02:30.000Z"},{"id":2,"public_id":"gH7iJ8","workspace_id":42000,"filter_id":null,"target_all":false,"target_ids":["cust_abc","cust_def"],"target_count":2,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Contacts::UnsubscribeAction"],"summary":"Create Unsubscribe Action","description":"Bulk-unsubscribe a collection of contacts from email. The action runs asynchronously — poll the returned record with `GET /api/v2/contacts/unsubscribe_actions/{id}` to track progress via `target_count` and `performed_count`.\nExactly one target selection must be supplied: `stable_id`, `stored_filter_id` (alias `filter_id`), `target_ids`, or `target_all`. Returns 422 if none is provided or if the supplied value is invalid.","operationId":"createContactsUnsubscribeActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Unsubscribe Action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_unsubscribe_action":{"type":"object","$ref":"#/components/schemas/ContactsUnsubscribeActionParameters"}}},"example":{"contacts_unsubscribe_action":{"stored_filter_id":"7"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsUnsubscribeActionAttributes"},"example":{"id":3,"public_id":"kL9mN0","workspace_id":42000,"filter_id":7,"target_all":false,"target_ids":[],"target_count":null,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity — no target selection was supplied; or `stable_id` is not a valid Refine token or not a ContactsFilter; or `stored_filter_id` is unknown, invalid, or belongs to a different workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"provide a selection: stable_id, stored_filter_id, target_ids, or target_all","hint":null}}}}}}},"/contacts/unsubscribe_actions/{id}":{"get":{"tags":["Contacts::UnsubscribeAction"],"summary":"Fetch Unsubscribe Action","description":"Retrieve a single Contact Unsubscribe Action and its current async progress","operationId":"getContactsUnsubscribeActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsUnsubscribeActionAttributes"},"example":{"id":3,"public_id":"kL9mN0","workspace_id":42000,"filter_id":7,"target_all":false,"target_ids":[],"target_count":300,"performed_count":180,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-03T00:00:30.000Z","completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:30.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contacts::UnsubscribeAction"],"summary":"Remove Unsubscribe Action","description":"Delete a Contact Unsubscribe Action record","operationId":"removeContactsUnsubscribeActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/contacts/export_actions":{"get":{"tags":["Contacts::ExportAction"],"summary":"List Export Actions","description":"List all Contact Export Actions for your workspace","operationId":"listContactsExportActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactsExportActionAttributes"}},"example":[{"id":1,"public_id":"dE6fG7","workspace_id":42000,"fields":["email_address","first_name","tag_ids"],"file_url":"https://assets.myclickfunnels.com/exports/contacts_20250101.csv","filter_id":7,"target_all":false,"target_ids":[],"target_count":1500,"performed_count":1500,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:05:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:05:00.000Z"},{"id":2,"public_id":"hI8jK9","workspace_id":42000,"fields":["email_address","last_name"],"file_url":null,"filter_id":null,"target_all":true,"target_ids":[],"target_count":null,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Contacts::ExportAction"],"summary":"Create Export Action","description":"Export a collection of contacts to a CSV file. Supply `fields` to specify which contact columns appear in the CSV (including custom attribute keys). The action runs asynchronously — poll the returned record with `GET /api/v2/contacts/export_actions/{id}`. Once complete, `file_url` contains the download URL for the generated CSV.\nExactly one target selection must be supplied: `stable_id`, `stored_filter_id` (alias `filter_id`), `target_ids`, or `target_all`. Returns 422 if none is provided or if the supplied value is invalid.","operationId":"createContactsExportActions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Export Action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"contacts_export_action":{"type":"object","$ref":"#/components/schemas/ContactsExportActionParameters"}}},"example":{"contacts_export_action":{"fields":["email_address","first_name","tag_ids"],"stored_filter_id":"7"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsExportActionAttributes"},"example":{"id":3,"public_id":"lM0nO1","workspace_id":42000,"fields":["email_address","first_name","tag_ids"],"file_url":null,"filter_id":7,"target_all":false,"target_ids":[],"target_count":null,"performed_count":0,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":null,"completed_at":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity — no target selection was supplied; or `stable_id` is not a valid Refine token or not a ContactsFilter; or `stored_filter_id` is unknown, invalid, or belongs to a different workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"provide a selection: stable_id, stored_filter_id, target_ids, or target_all","hint":null}}}}}}},"/contacts/export_actions/{id}":{"get":{"tags":["Contacts::ExportAction"],"summary":"Fetch Export Action","description":"Retrieve a single Contact Export Action and its current async progress. When `completed_at` is set, `file_url` contains the CSV download URL.","operationId":"getContactsExportActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsExportActionAttributes"},"example":{"id":3,"public_id":"lM0nO1","workspace_id":42000,"fields":["email_address","first_name","tag_ids"],"file_url":"https://assets.myclickfunnels.com/exports/contacts_20250103.csv","filter_id":7,"target_all":false,"target_ids":[],"target_count":1500,"performed_count":1500,"created_by_id":5,"approved_by_id":null,"scheduled_for":null,"started_at":"2025-01-03T00:00:30.000Z","completed_at":"2025-01-03T00:04:30.000Z","created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:04:30.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Contacts::ExportAction"],"summary":"Remove Export Action","description":"Delete a Contact Export Action record","operationId":"removeContactsExportActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/communities":{"get":{"tags":["Community"],"summary":"List Communities","description":"List communities for a workspace","operationId":"listCommunities","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunityAttributes"}},"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"},{"id":2,"public_id":"GhIjKl","site_id":10,"workspace_id":42,"name":"Another Community","status":"draft","private":true,"current_path":"/another-community","logo_image_id":null,"social_image_id":null,"seo_title":null,"seo_description":null,"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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Community"],"summary":"Create Community","description":"Create a community for a workspace","operationId":"createCommunities","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Community","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"community":{"type":"object","$ref":"#/components/schemas/CommunityParameters"}}},"example":{"community":{"name":"My Community"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityAttributes"},"example":{"id":3,"public_id":"MnOpQr","site_id":10,"workspace_id":42,"name":"My Community","status":"draft","private":true,"current_path":null,"logo_image_id":null,"social_image_id":null,"seo_title":null,"seo_description":null,"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Name can't be blank","hint":null}}}}}}},"/communities/{id}":{"get":{"tags":["Community"],"summary":"Fetch Community","description":"Retrieve a community","operationId":"getCommunities","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Community"],"summary":"Update Community","description":"Update a community","operationId":"updateCommunities","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Community","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"community":{"type":"object","$ref":"#/components/schemas/CommunityParametersUpdate"}}},"example":{"community":{"name":"My Community","status":"live","private":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityAttributes"},"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/space_groups":{"get":{"tags":["Communities::SpaceGroup"],"summary":"List Space Groups","description":"List space groups for a community","operationId":"listCommunitiesSpaceGroups","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesSpaceGroupAttributes"}},"example":[{"id":1,"public_id":"BcDeFg","community_id":1,"workspace_id":42,"name":"General","description":"General discussion group","access":0,"group_type":0,"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"},{"id":2,"public_id":"HiJkLm","community_id":1,"workspace_id":42,"name":"Announcements","description":"Official announcements","access":0,"group_type":0,"current_path":"/announcements","emoji":"📢","card_image_id":null,"auto_add_to_spaces":true,"approval_terms":null,"require_post_approvals":true,"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":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Community parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::SpaceGroup"],"summary":"Create Space Group","description":"Create a space group within a community","operationId":"createCommunitiesSpaceGroups","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Space Group","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_space_group":{"type":"object","$ref":"#/components/schemas/CommunitiesSpaceGroupParameters"}}},"example":{"communities_space_group":{"name":"General"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpaceGroupAttributes"},"example":{"id":3,"public_id":"NoPqRs","community_id":1,"workspace_id":42,"name":"General","description":null,"access":0,"group_type":0,"current_path":null,"emoji":null,"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":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Name can't be blank","hint":null}}}}}}},"/communities/space_groups/{id}":{"get":{"tags":["Communities::SpaceGroup"],"summary":"Fetch Space Group","description":"Retrieve a space group","operationId":"getCommunitiesSpaceGroups","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpaceGroupAttributes"},"example":{"id":1,"public_id":"BcDeFg","community_id":1,"workspace_id":42,"name":"General","description":"General discussion group","access":0,"group_type":0,"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Communities::SpaceGroup"],"summary":"Update Space Group","description":"Update a space group","operationId":"updateCommunitiesSpaceGroups","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Space Group","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_space_group":{"type":"object","$ref":"#/components/schemas/CommunitiesSpaceGroupParametersUpdate"}}},"example":{"communities_space_group":{"name":"General","access":0,"is_hidden":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpaceGroupAttributes"},"example":{"id":1,"public_id":"BcDeFg","community_id":1,"workspace_id":42,"name":"General","description":"General discussion group","access":0,"group_type":0,"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Communities::SpaceGroup"],"summary":"Remove Space Group","description":"Delete a space group","operationId":"removeCommunitiesSpaceGroups","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/space_groups/{space_group_id}/spaces":{"get":{"tags":["Communities::Space"],"summary":"List Spaces","description":"List spaces within a space group","operationId":"listCommunitiesSpaces","parameters":[{"name":"space_group_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesSpaceAttributes"}},"example":[{"id":1,"public_id":"CdEfGh","space_group_id":1,"workspace_id":42,"name":"Welcome","access":0,"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"},{"id":2,"public_id":"IjKlMn","space_group_id":1,"workspace_id":42,"name":"Introductions","access":0,"current_path":"/introductions","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":2,"always_on":null,"upgrade_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Space Group parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Space"],"summary":"Create Space","description":"Create a space within a space group","operationId":"createCommunitiesSpaces","parameters":[{"name":"space_group_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Space","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_space":{"type":"object","$ref":"#/components/schemas/CommunitiesSpaceParameters"}}},"example":{"communities_space":{"name":"Welcome"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpaceAttributes"},"example":{"id":3,"public_id":"OpQrSt","space_group_id":1,"workspace_id":42,"name":"Welcome","access":0,"current_path":null,"emoji":null,"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":null,"always_on":null,"upgrade_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Name can't be blank","hint":null}}}}}}},"/communities/spaces/{id}":{"get":{"tags":["Communities::Space"],"summary":"Fetch Space","description":"Retrieve a space","operationId":"getCommunitiesSpaces","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpaceAttributes"},"example":{"id":1,"public_id":"CdEfGh","space_group_id":1,"workspace_id":42,"name":"Welcome","access":0,"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Communities::Space"],"summary":"Update Space","description":"Update a space","operationId":"updateCommunitiesSpaces","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Space","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_space":{"type":"object","$ref":"#/components/schemas/CommunitiesSpaceParametersUpdate"}}},"example":{"communities_space":{"name":"Welcome","access":0,"members_can_post":true}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpaceAttributes"},"example":{"id":1,"public_id":"CdEfGh","space_group_id":1,"workspace_id":42,"name":"Welcome","access":0,"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Communities::Space"],"summary":"Remove Space","description":"Delete a space","operationId":"removeCommunitiesSpaces","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/{space_id}/posts":{"get":{"tags":["Communities::Spaces::Post"],"summary":"List Posts","description":"List posts for a space","operationId":"listCommunitiesSpacesPosts","parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"}},"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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Spaces::Post"],"summary":"Create Post","description":"Create a post in a space. Posts created via the API are auto-approved. The `contact_id` is optional and defaults to the connected user's own contact.","operationId":"createCommunitiesSpacesPosts","parameters":[{"name":"space_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Post","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_spaces_post":{"type":"object","$ref":"#/components/schemas/CommunitiesSpacesPostParameters"}}},"example":{"communities_spaces_post":{"title":"Welcome to the community!","body":"\u003cp\u003eHi everyone, excited to be here.\u003c/p\u003e"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Title can't be blank","hint":null}}}}}}},"/communities/spaces/posts/{id}":{"get":{"tags":["Communities::Spaces::Post"],"summary":"Fetch Post","description":"Retrieve a post","operationId":"getCommunitiesSpacesPosts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Communities::Spaces::Post"],"summary":"Update Post","description":"Update a post. The `contact_id` field is ignored on update.","operationId":"updateCommunitiesSpacesPosts","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Post","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_spaces_post":{"type":"object","$ref":"#/components/schemas/CommunitiesSpacesPostParametersUpdate"}}},"example":{"communities_spaces_post":{"title":"Updated post title","is_pinned":true}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"example":{"id":101,"public_id":"AbCdEf","contact_id":55,"title":"Updated post title","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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Communities::Spaces::Post"],"summary":"Remove Post","description":"Delete a post","operationId":"removeCommunitiesSpacesPosts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{id}/approve":{"post":{"tags":["Communities::Spaces::Post"],"summary":"Approve Post","description":"Approve a post. Sets `approved_at` to the current time, applies any pending draft edit to the live body, and notifies any contacts mentioned in the post body.","operationId":"approveCommunitiesSpacesPost","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{id}/decline":{"post":{"tags":["Communities::Spaces::Post"],"summary":"Decline Post","description":"Decline a post. Sets `declined_at` to the current time, marking the post as rejected and hiding it from the community feed.","operationId":"declineCommunitiesSpacesPost","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{id}/dismiss_reports":{"post":{"tags":["Communities::Spaces::Post"],"summary":"Dismiss Reports on Post","description":"Dismiss all pending moderation reports on a post. Clears the report flags and approves the post, making it visible in the community feed.","operationId":"dismissReportsCommunitiesSpacesPost","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{id}/pin":{"post":{"tags":["Communities::Spaces::Post"],"summary":"Pin Post","description":"Pin a post. Sets `is_pinned` to true, causing the post to appear at the top of the community space feed.","operationId":"pinCommunitiesSpacesPost","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{id}/unpin":{"post":{"tags":["Communities::Spaces::Post"],"summary":"Unpin Post","description":"Unpin a post. Sets `is_pinned` to false, removing the post from the pinned section at the top of the community space feed.","operationId":"unpinCommunitiesSpacesPost","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{post_id}/comments":{"get":{"tags":["Communities::Spaces::Post::Comment"],"summary":"List Comments","description":"List comments for a post","operationId":"listCommunitiesSpacesPostsComments","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentAttributes"}},"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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Spaces::Post::Comment"],"summary":"Create Comment","description":"Create a comment on a post. Comments created via the API are auto-approved. The `contact_id` is optional and defaults to the connected user's own contact. Use `parent_comment_id` for threaded replies.","operationId":"createCommunitiesSpacesPostsComments","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Comment","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_spaces_posts_comment":{"type":"object","$ref":"#/components/schemas/CommunitiesSpacesPostsCommentParameters"}}},"example":{"communities_spaces_posts_comment":{"body":"\u003cp\u003eGreat post, thanks for sharing!\u003c/p\u003e"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Body can't be blank","hint":null}}}}}}},"/communities/spaces/posts/comments/{id}/approve":{"post":{"tags":["Communities::Spaces::Post::Comment"],"summary":"Approve Comment","description":"Approve a comment. Sets `approved_at` to the current time and applies any pending draft edit to the live body.","operationId":"approveCommunitiesSpacesPostsComment","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/comments/{id}/decline":{"post":{"tags":["Communities::Spaces::Post::Comment"],"summary":"Decline Comment","description":"Decline a comment. Sets `declined_at` to the current time, marking it as rejected.","operationId":"declineCommunitiesSpacesPostsComment","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/comments/{id}/dismiss_reports":{"post":{"tags":["Communities::Spaces::Post::Comment"],"summary":"Dismiss Comment Reports","description":"Clear the comment's report flags (reported_at, report_count, report_type) and approve it.","operationId":"dismissReportsCommunitiesSpacesPostsComment","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/comments/{id}":{"get":{"tags":["Communities::Spaces::Post::Comment"],"summary":"Fetch Comment","description":"Retrieve a comment","operationId":"getCommunitiesSpacesPostsComments","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Communities::Spaces::Post::Comment"],"summary":"Update Comment","description":"Update a comment. The `contact_id` and `parent_comment_id` fields are ignored on update.","operationId":"updateCommunitiesSpacesPostsComments","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Comment","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_spaces_posts_comment":{"type":"object","$ref":"#/components/schemas/CommunitiesSpacesPostsCommentParametersUpdate"}}},"example":{"communities_spaces_posts_comment":{"body":"\u003cp\u003eUpdated comment text.\u003c/p\u003e"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentAttributes"},"example":{"id":202,"public_id":"MnOpQr","contact_id":55,"body":"Updated comment text.","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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Communities::Spaces::Post::Comment"],"summary":"Remove Comment","description":"Delete a comment","operationId":"removeCommunitiesSpacesPostsComments","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{post_id}/likes":{"get":{"tags":["Communities::Spaces::Post::Like"],"summary":"List Post Likes","description":"List likes for a post","operationId":"listCommunitiesSpacesPostsLikes","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesSpacesPostsLikeAttributes"}},"example":[{"id":301,"public_id":"StUvWx","post_id":101,"contact_id":55,"contact_public_id":"GhIjKl","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","contact":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Spaces::Post::Like"],"summary":"Create Post Like","description":"Like a post. The `contact_id` is optional and defaults to the connected user's own contact.","operationId":"createCommunitiesSpacesPostsLikes","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Post Like","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_spaces_posts_like":{"type":"object","$ref":"#/components/schemas/CommunitiesSpacesPostsLikeParameters"}}},"example":{"communities_spaces_posts_like":{}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsLikeAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/communities/spaces/posts/likes/{id}":{"delete":{"tags":["Communities::Spaces::Post::Like"],"summary":"Remove Post Like","description":"Unlike a post by deleting the like record","operationId":"removeCommunitiesSpacesPostsLikes","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/comments/{comment_id}/likes":{"get":{"tags":["Communities::Spaces::Post::Comment::Like"],"summary":"List Comment Likes","description":"List likes for a comment","operationId":"listCommunitiesSpacesPostsCommentsLikes","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentsLikeAttributes"}},"example":[{"id":401,"public_id":"YzAbCd","comment_id":202,"contact_id":55,"contact_public_id":"GhIjKl","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","contact":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Spaces::Post::Comment::Like"],"summary":"Create Comment Like","description":"Like a comment. The `contact_id` is optional and defaults to the connected user's own contact.","operationId":"createCommunitiesSpacesPostsCommentsLikes","parameters":[{"name":"comment_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Comment Like","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_spaces_posts_comments_like":{"type":"object","$ref":"#/components/schemas/CommunitiesSpacesPostsCommentsLikeParameters"}}},"example":{"communities_spaces_posts_comments_like":{}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsCommentsLikeAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/communities/spaces/posts/comments/likes/{id}":{"delete":{"tags":["Communities::Spaces::Post::Comment::Like"],"summary":"Remove Comment Like","description":"Unlike a comment by deleting the like record","operationId":"removeCommunitiesSpacesPostsCommentsLikes","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/spaces/posts/{post_id}/video_embeds":{"get":{"tags":["Communities::Spaces::Post::VideoEmbed"],"summary":"List Video Embeds","description":"List video embeds for a post","operationId":"listCommunitiesSpacesPostsVideoEmbeds","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesSpacesPostsVideoEmbedAttributes"}},"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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Spaces::Post::VideoEmbed"],"summary":"Create Video Embed","description":"Attach a video embed to a post. The `url` field is required.","operationId":"createCommunitiesSpacesPostsVideoEmbeds","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Video Embed","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_spaces_posts_video_embed":{"type":"object","$ref":"#/components/schemas/CommunitiesSpacesPostsVideoEmbedParameters"}}},"example":{"communities_spaces_posts_video_embed":{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","provider":"youtube"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsVideoEmbedAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Url can't be blank","hint":null}}}}}}},"/communities/spaces/posts/video_embeds/{id}":{"get":{"tags":["Communities::Spaces::Post::VideoEmbed"],"summary":"Fetch Video Embed","description":"Retrieve a video embed","operationId":"getCommunitiesSpacesPostsVideoEmbeds","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesSpacesPostsVideoEmbedAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Communities::Spaces::Post::VideoEmbed"],"summary":"Remove Video Embed","description":"Delete a video embed from a post","operationId":"removeCommunitiesSpacesPostsVideoEmbeds","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/memberships":{"get":{"tags":["Communities::Membership"],"summary":"List Memberships","description":"List memberships for a community","operationId":"listCommunitiesMemberships","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesMembershipAttributes"}},"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}},{"id":102,"public_id":"MnOpQr","community_id":1,"moderator":true,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z","contact":{"id":56,"public_id":"StUvWx","email_address":"mod@example.com","first_name":"John","last_name":"Smith","phone_number":null}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Community parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Membership"],"summary":"Create Membership","description":"Add a contact as a member of a community","operationId":"createCommunitiesMemberships","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about the new Membership","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_membership":{"type":"object","$ref":"#/components/schemas/CommunitiesMembershipParameters"}}},"example":{"communities_membership":{"contact_id":"GhIjKl","moderator":false,"space_ids":["SpAcEa","SpAcEb"]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipAttributes"},"example":{"id":103,"public_id":"YzAbCd","community_id":1,"moderator":false,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z","contact":{"id":57,"public_id":"EfGhIj","email_address":"member@example.com","first_name":"Jane","last_name":"Doe","phone_number":null}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Contact has already joined this community","hint":null}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/communities/memberships/{id}":{"get":{"tags":["Communities::Membership"],"summary":"Fetch Membership","description":"Retrieve a community membership","operationId":"getCommunitiesMemberships","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipAttributes"},"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}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Communities::Membership"],"summary":"Update Membership","description":"Update a community membership (e.g. moderator status or space memberships)","operationId":"updateCommunitiesMemberships","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Fields to update on the Membership","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_membership":{"type":"object","$ref":"#/components/schemas/CommunitiesMembershipParametersUpdate"}}},"example":{"communities_membership":{"moderator":true,"space_ids":["SpAcEa"]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipAttributes"},"example":{"id":101,"public_id":"AbCdEf","community_id":1,"moderator":true,"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}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Communities::Membership"],"summary":"Remove Membership","description":"Remove a contact's membership from a community. This also removes the contact from all Spaces within the community.","operationId":"removeCommunitiesMemberships","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/bans":{"get":{"tags":["Communities::Ban"],"summary":"List Bans","description":"List bans for a community","operationId":"listCommunitiesBans","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesBanAttributes"}},"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}},{"id":202,"public_id":"StUvWx","community_id":1,"bannable_type":"Community","bannable_id":1,"banned_by_id":12,"reason":null,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z","contact":{"id":58,"public_id":"YzAbCd","email_address":"spammer@example.com","first_name":"Sam","last_name":"Jones","phone_number":null}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Community parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Ban"],"summary":"Create Ban","description":"Ban a contact from a community","operationId":"createCommunitiesBans","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about the new Ban","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_ban":{"type":"object","$ref":"#/components/schemas/CommunitiesBanParameters"}}},"example":{"communities_ban":{"contact_id":"GhIjKl","reason":"Violated community guidelines"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesBanAttributes"},"example":{"id":203,"public_id":"EfGhIj","community_id":1,"bannable_type":"Community","bannable_id":1,"banned_by_id":12,"reason":"Spam","created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z","contact":{"id":59,"public_id":"KlMnOp","email_address":"spammer@example.com","first_name":"Sam","last_name":"Jones","phone_number":null}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Contact has already been banned from this community","hint":null}}}}}}},"/communities/bans/{id}":{"get":{"tags":["Communities::Ban"],"summary":"Fetch Ban","description":"Retrieve a community ban","operationId":"getCommunitiesBans","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesBanAttributes"},"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}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Communities::Ban"],"summary":"Remove Ban","description":"Unban a contact from a community","operationId":"removeCommunitiesBans","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/memberships/ban_actions":{"post":{"tags":["Communities::Memberships::BanAction"],"summary":"Create Membership Ban Action","description":"Enqueue an async background job to ban one or more community members. The action record is returned immediately with `status: queued`. Poll `GET /communities/memberships/ban_actions/{id}` until `status` is `completed`.\n","operationId":"createCommunitiesMembershipsBanActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Parameters for the ban action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_memberships_ban_action":{"type":"object","$ref":"#/components/schemas/CommunitiesMembershipsBanActionParameters"}}},"example":{"communities_memberships_ban_action":{"target_all":false,"target_ids":["AbCdEf","GhIjKl"],"reason":"Violated community guidelines"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsBanActionAttributes"},"example":{"id":501,"public_id":"BnAcT1","community_id":1,"target_all":false,"target_ids":[101,102],"failed_ids":[],"target_count":null,"performed_count":0,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","status":"queued","reason":"Violated community guidelines"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Reason is too long (maximum is 1024 characters)","hint":null}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/communities/memberships/ban_actions/{id}":{"get":{"tags":["Communities::Memberships::BanAction"],"summary":"Fetch Membership Ban Action","description":"Retrieve the current status of a membership ban action. Poll this endpoint until `status` is `completed`.","operationId":"getCommunitiesMembershipsBanActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsBanActionAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/memberships/add_to_group_actions":{"post":{"tags":["Communities::Memberships::AddToGroupAction"],"summary":"Create Membership Add-To-Group Action","description":"Enqueue an async background job to add one or more community members to one or more spaces (groups). The action record is returned immediately with `status: queued`. Poll `GET /communities/memberships/add_to_group_actions/{id}` until `status` is `completed`.\n","operationId":"createCommunitiesMembershipsAddToGroupActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Parameters for the add-to-group action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_memberships_add_to_group_action":{"type":"object","$ref":"#/components/schemas/CommunitiesMembershipsAddToGroupActionParameters"}}},"example":{"communities_memberships_add_to_group_action":{"target_all":false,"target_ids":["AbCdEf","GhIjKl"],"space_ids":["SpAcEa","SpAcEb"]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsAddToGroupActionAttributes"},"example":{"id":502,"public_id":"AdGrP1","community_id":1,"target_all":false,"target_ids":[101,102],"failed_ids":[],"target_count":null,"performed_count":0,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","status":"queued","space_ids":[10,11]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Please select at least one topic.","hint":null}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/communities/memberships/add_to_group_actions/{id}":{"get":{"tags":["Communities::Memberships::AddToGroupAction"],"summary":"Fetch Membership Add-To-Group Action","description":"Retrieve the current status of a membership add-to-group action. Poll this endpoint until `status` is `completed`.","operationId":"getCommunitiesMembershipsAddToGroupActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsAddToGroupActionAttributes"},"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]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/memberships/remove_from_group_actions":{"post":{"tags":["Communities::Memberships::RemoveFromGroupAction"],"summary":"Create Membership Remove-From-Group Action","description":"Enqueue an async background job to remove one or more community members from one or more spaces (groups). The action record is returned immediately with `status: queued`. Poll `GET /communities/memberships/remove_from_group_actions/{id}` until `status` is `completed`.\n","operationId":"createCommunitiesMembershipsRemoveFromGroupActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Parameters for the remove-from-group action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_memberships_remove_from_group_action":{"type":"object","$ref":"#/components/schemas/CommunitiesMembershipsRemoveFromGroupActionParameters"}}},"example":{"communities_memberships_remove_from_group_action":{"target_all":false,"target_ids":["AbCdEf","GhIjKl"],"space_ids":["SpAcEa"]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsRemoveFromGroupActionAttributes"},"example":{"id":503,"public_id":"RmGrP1","community_id":1,"target_all":false,"target_ids":[101,102],"failed_ids":[],"target_count":null,"performed_count":0,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","status":"queued","space_ids":[10]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Please select at least one topic.","hint":null}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/communities/memberships/remove_from_group_actions/{id}":{"get":{"tags":["Communities::Memberships::RemoveFromGroupAction"],"summary":"Fetch Membership Remove-From-Group Action","description":"Retrieve the current status of a membership remove-from-group action. Poll this endpoint until `status` is `completed`.","operationId":"getCommunitiesMembershipsRemoveFromGroupActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsRemoveFromGroupActionAttributes"},"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]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/memberships/export_actions":{"get":{"tags":["Communities::Memberships::ExportAction"],"summary":"List Membership Export Actions","description":"List previous membership export actions for a community","operationId":"listCommunitiesMembershipsExportActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesMembershipsExportActionAttributes"}},"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"]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Memberships::ExportAction"],"summary":"Create Membership Export Action","description":"Enqueue an async background job to export community membership data to a file. The action record is returned immediately with `status: queued`. Poll `GET /communities/memberships/export_actions/{id}` until `status` is `completed`.\n","operationId":"createCommunitiesMembershipsExportActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Parameters for the membership export action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_memberships_export_action":{"type":"object","$ref":"#/components/schemas/CommunitiesMembershipsExportActionParameters"}}},"example":{"communities_memberships_export_action":{"target_all":true,"target_ids":[],"fields":["name","email","joined_at"]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsExportActionAttributes"},"example":{"id":504,"public_id":"ExPrt1","community_id":1,"target_all":true,"target_ids":[],"failed_ids":[],"target_count":null,"performed_count":0,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","status":"queued","fields":["name","email","joined_at"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Fields contains invalid field names: invalid_field","hint":null}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/communities/memberships/export_actions/{id}":{"get":{"tags":["Communities::Memberships::ExportAction"],"summary":"Fetch Membership Export Action","description":"Retrieve the current status of a membership export action. Poll this endpoint until `status` is `completed`.","operationId":"getCommunitiesMembershipsExportActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesMembershipsExportActionAttributes"},"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"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/bans/unban_actions":{"post":{"tags":["Communities::Bans::UnbanAction"],"summary":"Create Ban Unban Action","description":"Enqueue an async background job to unban one or more contacts from a community. The action record is returned immediately with `status: queued`. Poll `GET /communities/bans/unban_actions/{id}` until `status` is `completed`.\n","operationId":"createCommunitiesBansUnbanActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Parameters for the unban action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_bans_unban_action":{"type":"object","$ref":"#/components/schemas/CommunitiesBansUnbanActionParameters"}}},"example":{"communities_bans_unban_action":{"target_all":false,"target_ids":["MnOpQr","StUvWx"]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesBansUnbanActionAttributes"},"example":{"id":505,"public_id":"UnBn01","community_id":1,"target_all":false,"target_ids":[201,202],"failed_ids":[],"target_count":null,"performed_count":0,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","status":"queued"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/communities/bans/unban_actions/{id}":{"get":{"tags":["Communities::Bans::UnbanAction"],"summary":"Fetch Ban Unban Action","description":"Retrieve the current status of a ban unban action. Poll this endpoint until `status` is `completed`.","operationId":"getCommunitiesBansUnbanActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesBansUnbanActionAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/communities/{community_id}/bans/export_actions":{"get":{"tags":["Communities::Bans::ExportAction"],"summary":"List Ban Export Actions","description":"List previous ban export actions for a community","operationId":"listCommunitiesBansExportActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommunitiesBansExportActionAttributes"}},"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"]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Communities::Bans::ExportAction"],"summary":"Create Ban Export Action","description":"Enqueue an async background job to export community ban data to a file. The action record is returned immediately with `status: queued`. Poll `GET /communities/bans/export_actions/{id}` until `status` is `completed`.\n","operationId":"createCommunitiesBansExportActions","parameters":[{"name":"community_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Parameters for the ban export action","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"communities_bans_export_action":{"type":"object","$ref":"#/components/schemas/CommunitiesBansExportActionParameters"}}},"example":{"communities_bans_export_action":{"target_all":true,"target_ids":[],"fields":["contact_name","contact_email","reason","created_at"]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesBansExportActionAttributes"},"example":{"id":506,"public_id":"BnExP1","community_id":1,"target_all":true,"target_ids":[],"failed_ids":[],"target_count":null,"performed_count":0,"started_at":null,"completed_at":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","status":"queued","fields":["contact_name","contact_email","reason","created_at"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Fields contains invalid field names: invalid_field","hint":null}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/communities/bans/export_actions/{id}":{"get":{"tags":["Communities::Bans::ExportAction"],"summary":"Fetch Ban Export Action","description":"Retrieve the current status of a ban export action. Poll this endpoint until `status` is `completed`.","operationId":"getCommunitiesBansExportActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunitiesBansExportActionAttributes"},"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"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/courses":{"get":{"tags":["Course"],"summary":"List Courses","description":"List courses for a team","operationId":"listCourses","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CourseAttributes"}},"example":[{"id":7,"public_id":"QwdWoj","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"},{"id":8,"public_id":"LzpZKh","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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Course"],"summary":"Create Course","description":"Create a course for a team. See [Creating a course](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#creating-a-course) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for the permitted fields.","operationId":"createCourses","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Course","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course":{"type":"object","$ref":"#/components/schemas/CourseParameters"}}},"example":{"course":{"title":"Getting Started"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseAttributes"},"example":{"id":10,"public_id":"gVWRTP","title":"Getting Started","published_at":null,"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Title can't be blank","hint":null}}}}}}},"/courses/{id}":{"get":{"tags":["Course"],"summary":"Fetch Course","description":"Retrieve a course","operationId":"getCourses","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseAttributes"},"example":{"id":9,"public_id":"gVWRTP","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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Course"],"summary":"Update Course","description":"Update a course's settings and appearance — including its storefront image (`image_id`), title, and description. Updates are partial: only the attributes you include are changed; omitted attributes are left unchanged.\nSee [Permitted course fields](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#permitted-course-fields) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md).","operationId":"updateCourses","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"The Course attributes to change","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course":{"type":"object","$ref":"#/components/schemas/CourseParametersUpdate"}}},"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}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseAttributes"},"example":{"id":9,"public_id":"gVWRTP","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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Title can't be blank","hint":null}}}}}}},"/courses/{id}/publish":{"post":{"tags":["Course"],"summary":"Publish Course","description":"Makes the course live by setting `published_at`. Pass an optional future `published_at` to schedule the publish; omit it (or leave it blank) to publish immediately. A `published_at` in the past is rejected.\nBy default this publishes only the course record. To publish a brand-new course in one step, pass `publish_sections_and_lessons: true`. Before the `200 OK` response, the requested publish timestamp is set on the course, every eligible unpublished non-root section, and all unpublished or scheduled lessons underneath it. Drip and blocked section gates remain in effect. Section publish actions may still perform follow-up work asynchronously, and each records how many lessons it published in `published_lessons_count`. Otherwise sections and lessons stay draft until published via the `Courses::Sections::PublishAction` resource.\nReturns 422 if `published_at` is supplied but is not a valid ISO 8601 datetime, or if it is in the past.\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.","operationId":"publishCourse","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"published_at":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime at which the course should become live. Must be now or in the future — a past datetime is rejected with a 422. Omit or leave blank to publish immediately."},"publish_sections_and_lessons":{"type":"boolean","description":"When `true`, sets the requested publish timestamp on the course, every eligible unpublished non-root section, and all unpublished or scheduled lessons before returning the response. Drip and blocked section gates remain in effect. Section publish actions may continue follow-up processing asynchronously. Use this for a one-step publish of a new course. Defaults to `false`."}}},"example":{"published_at":"2026-09-01T09:00:00.000Z","publish_sections_and_lessons":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseAttributes"},"example":{"id":9,"public_id":"gVWRTP","title":"Example Course","published_at":"2026-09-01T09: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":"2026-09-01T09:00:00.000Z","image_url":"https://example.myclickfunnels.com/uploads/image/1/file/9c8d1e7d480dc9882c519d4b4528826f.png"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — `published_at` is not a valid datetime","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"published_at is not a valid datetime","hint":null}}}}}}},"/courses/{course_id}/enrollments":{"get":{"tags":["Courses::Enrollment"],"summary":"List Enrollments","description":"List enrollments for a course","operationId":"listCoursesEnrollments","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"contact_id":{"type":"string","description":"A comma-separated list of contact IDs to filter by.","example":"1,42"},"id":{"type":"string","description":"A comma-separated list of enrollment IDs to filter by.","example":"1,2,3"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoursesEnrollmentAttributes"}},"example":[{"id":3,"public_id":"Srohqc","contact_id":49,"course_id":16,"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":60,"contact":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"}},{"id":4,"public_id":"QgKoUb","contact_id":50,"course_id":17,"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":61,"contact":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Courses::Enrollment"],"summary":"Create Enrollment","description":"Add a new enrollment","operationId":"createCoursesEnrollments","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Enrollment","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"courses_enrollment":{"type":"object","$ref":"#/components/schemas/CoursesEnrollmentParameters"}}},"example":{"courses_enrollment":{"contact_id":3,"suspended":false,"suspension_reason":"Call in to reapply after robot incident"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesEnrollmentAttributes"},"example":{"id":6,"public_id":"WvIRKa","contact_id":52,"course_id":19,"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":63,"contact":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/courses/enrollments/{id}":{"get":{"tags":["Courses::Enrollment"],"summary":"Fetch Enrollment","description":"Retrieve an enrollment","operationId":"getCoursesEnrollments","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesEnrollmentAttributes"},"example":{"id":5,"public_id":"JvtRKP","contact_id":51,"course_id":18,"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":62,"contact":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Courses::Enrollment"],"summary":"Update Enrollment","description":"Update an enrollment","operationId":"updateCoursesEnrollments","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Enrollment","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"courses_enrollment":{"type":"object","$ref":"#/components/schemas/CoursesEnrollmentParametersUpdate"}}},"example":{"courses_enrollment":{"suspended":false,"suspension_reason":"Call in to reapply after robot incident"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesEnrollmentAttributes"},"example":{"id":8,"public_id":"jhtPUX","contact_id":54,"course_id":21,"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":65,"contact":{"id":24359,"public_id":"vQxYMj","email_address":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone_number":"+18005550199"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/courses/{course_id}/sections":{"get":{"tags":["Courses::Section"],"summary":"List Sections","description":"List Sections. Ordered by id ascending by default (pass sort_order=desc for\ndescending), consistent with the pagination cursor, so following the\nPagination-Next header returns every section exactly once.\n\nThe list includes the course's root section - a structural container\n(`parent_id: null`, matching the course's `root_section_id`) that is not\nshown in the course builder UI; most integrations can ignore it and treat its\nchildren as the modules. Pass sort_property=sort_order for the builder's\ndisplay order; note sort_order is scoped per parent, so it is not globally\nunique across the list (the root and each parent's first child both start at\n0, tie-broken by id).\n\nSee [Reading back a course](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#reading-back-a-course) in the\n[Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for the read walk.\n","operationId":"listCoursesSections","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","sort_order"]}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoursesSectionAttributes"}},"example":[{"id":4,"public_id":"JyVHGZ","course_id":25,"title":"Module 4","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":3,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":5,"public_id":"SXZNPl","course_id":26,"title":"Module 5","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":4,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Courses::Section"],"summary":"Create Section","description":"Add a new Section. See [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).","operationId":"createCoursesSections","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Section","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"courses_section":{"type":"object","$ref":"#/components/schemas/CoursesSectionParametersUpdate"}}},"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}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesSectionAttributes"},"example":{"id":7,"public_id":"ZkVcQM","course_id":28,"title":"Module 7","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":6,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Title can't be blank","hint":null}}}}}}},"/courses/sections/{id}":{"get":{"tags":["Courses::Section"],"summary":"Fetch Section","description":"Fetch Section","operationId":"getCoursesSections","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesSectionAttributes"},"example":{"id":6,"public_id":"QkVcPU","course_id":27,"title":"Module 6","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":5,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Courses::Section"],"summary":"Update Section","description":"Update Section. See [Permitted section fields (create and update)](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#permitted-section-fields-create-and-update) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for the writable fields.","operationId":"updateCoursesSections","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Section","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"courses_section":{"type":"object","$ref":"#/components/schemas/CoursesSectionParametersUpdate"}}},"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}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesSectionAttributes"},"example":{"id":9,"public_id":"lmTNJu","course_id":30,"title":"Module 9","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":8,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/courses/sections/{id}/publish":{"post":{"tags":["Courses::Section"],"summary":"Publish Section","description":"Makes a single section live by setting `published_at`, and cascade-publishes its lessons individually so per-lesson side effects fire. The response is the canonical section resource. If section or lesson validation fails, the entire request returns `422` without changing any publish timestamps. Pass an optional future `published_at` to schedule it; omit it to publish now. A past `published_at` is rejected. This is the default publish (`auto_enroll: false`) — to also grant existing enrollees access and notify them, use `createCoursesSectionsPublishActions` with `auto_enroll` instead. The root section cannot be published directly.\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.","operationId":"publishCoursesSections","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"published_at":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime at which the section should become live. Must be now or in the future — a past datetime is rejected. Omit to publish immediately."}}},"example":{"published_at":"2026-09-01T09:00:00.000Z"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesSectionAttributes"},"example":{"id":6,"public_id":"QkVcPU","course_id":27,"title":"Module 6","published_at":"2026-09-01T09:00:00.000Z","description":"Example Course Section","days_till_drip_access":null,"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":5,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"published_at cannot be in the past; omit it to publish now or pass a future datetime to schedule","hint":null}}}}}}},"/courses/sections/{section_id}/lessons":{"get":{"tags":["Courses::Lesson"],"summary":"List Lessons","description":"List Lessons. Ordered by id ascending by default (pass sort_order=desc for\ndescending), consistent with the pagination cursor, so following the\nPagination-Next header returns every lesson exactly once.\n\nPass sort_property=sort_order for the builder's display order of lessons\nwithin the section (sort_order is scoped per section, starting at 0).\n","operationId":"listCoursesLessons","parameters":[{"name":"section_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","sort_order"]}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoursesLessonAttributes"}},"example":[{"id":3,"public_id":"YcBQNd","title":"Lesson 3","body":"Example Lesson","section_id":13,"published_at":"2025-01-01T00:00:00.000Z","current_path":null,"sort_order":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":4,"public_id":"adKOnr","title":"Lesson 4","body":"Example Lesson","section_id":14,"published_at":"2025-01-01T00:00:00.000Z","current_path":null,"sort_order":3,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Courses::Lesson"],"summary":"Create Lesson","description":"Add a new Lesson. The lesson body is authored in Markdown via `lesson_content`, 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).","operationId":"createCoursesLessons","parameters":[{"name":"section_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Lesson","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"courses_lesson":{"type":"object","$ref":"#/components/schemas/CoursesLessonParametersUpdate"}}},"example":{"courses_lesson":{"title":"Lesson 1","body":"Example Lesson","lesson_content":"## Welcome\nThis is the lesson content."}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesLessonAttributes"},"example":{"id":6,"public_id":"PfXVKq","title":"Lesson 6","body":"Example Lesson","section_id":16,"published_at":"2025-01-01T00:00:00.000Z","current_path":null,"sort_order":5,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Title can't be blank","hint":null}}}}}}},"/courses/lessons/{id}":{"get":{"tags":["Courses::Lesson"],"summary":"Fetch Lesson","description":"Fetch Lesson","operationId":"getCoursesLessons","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesLessonAttributes"},"example":{"id":5,"public_id":"OfXUJp","title":"Lesson 5","body":"Example Lesson","section_id":15,"published_at":"2025-01-01T00:00:00.000Z","current_path":null,"sort_order":4,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Courses::Lesson"],"summary":"Update Lesson","description":"Update Lesson. See [Permitted lesson fields](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#permitted-lesson-fields) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md); the Markdown body field is `lesson_content`.","operationId":"updateCoursesLessons","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Lesson","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"courses_lesson":{"type":"object","$ref":"#/components/schemas/CoursesLessonParametersUpdate"}}},"example":{"courses_lesson":{"title":"Lesson 1","body":"Example Lesson","lesson_content":"## Welcome\nThis is the lesson content."}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesLessonAttributes"},"example":{"id":8,"public_id":"mZRfdu","title":"Lesson 8","body":"Example Lesson","section_id":18,"published_at":"2025-01-01T00:00:00.000Z","current_path":null,"sort_order":7,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/courses/{course_id}/lesson_completions":{"get":{"tags":["Courses::LessonCompletion"],"summary":"List Lesson Completions","description":"List of enrollment-completion records showing which lessons have been completed by which enrollments. You can filter on one or more `enrollment_id` or `lesson_id` records (see filter params).","operationId":"listCoursesLessonCompletions","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"enrollment_id":{"type":"string","description":"A comma-separated list of enrollement IDs to filter by.","example":"1,42"},"lesson_id":{"type":"string","description":"A comma-separated list of lesson IDs to filter by.","example":"1,2,3"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoursesLessonCompletionAttributes"}},"example":[{"id":2,"public_id":"NZDTsU","enrollment_id":12,"lesson_id":12,"completed_at":"2025-01-01T00:00:00.000Z"},{"id":3,"public_id":"AwMUmq","enrollment_id":13,"lesson_id":13,"completed_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Courses::LessonCompletion"],"summary":"Create Lesson Completion","description":"Mark a lesson as completed by a specific enrollment. You can only mark a lesson as completed once. Subsequent completions for the same lesson by the same enrollment will return a conflict error.","operationId":"createCoursesLessonCompletions","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Lesson Completion","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"courses_lesson_completion":{"type":"object","$ref":"#/components/schemas/CoursesLessonCompletionParameters"}}},"example":{"courses_lesson_completion":{"enrollment_id":2,"lesson_id":2}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesLessonCompletionAttributes"},"example":{"id":5,"public_id":"VbFKls","enrollment_id":15,"lesson_id":15,"completed_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/courses/lessons/{id}/publish":{"post":{"tags":["Courses::Lesson"],"summary":"Publish Lesson","description":"Makes a single lesson live by setting `published_at`. Pass an optional future `published_at` to schedule it; omit it to publish now. A past `published_at` is rejected. A lesson's `published_at` is not writable via `updateCoursesLessons`, so this is the way to publish or schedule an individual lesson.\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 other publish paths.","operationId":"publishCoursesLessons","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"published_at":{"type":"string","format":"date-time","description":"Optional ISO 8601 datetime at which the lesson should become live. Must be now or in the future — a past datetime is rejected. Omit to publish immediately."}}},"example":{"published_at":"2026-09-01T09:00:00.000Z"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesLessonAttributes"},"example":{"id":5,"public_id":"OfXUJp","title":"Lesson 5","body":"Example Lesson","section_id":15,"published_at":"2026-09-01T09:00:00.000Z","current_path":null,"sort_order":4,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"published_at cannot be in the past; omit it to publish now or pass a future datetime to schedule","hint":null}}}}}}},"/courses/lesson_completions/{id}":{"get":{"tags":["Courses::LessonCompletion"],"summary":"Fetch Lesson Completion","description":"Retrieve a enrollment-lesson completion record","operationId":"getCoursesLessonCompletions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesLessonCompletionAttributes"},"example":{"id":4,"public_id":"pGoNfq","enrollment_id":14,"lesson_id":14,"completed_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Courses::LessonCompletion"],"summary":"Remove Lesson Completion","description":"Unmark a lesson as completed. This action deletes the record.","operationId":"removeCoursesLessonCompletions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/courses/{course_id}/sections/publish_actions":{"get":{"tags":["Courses::Sections::PublishAction"],"summary":"List Publish Actions","description":"List course-section publish actions for a course","operationId":"listCoursesSectionsPublishActions","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoursesSectionsPublishActionAttributes"}},"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":2,"published_lessons_count":4,"status":"completed","scheduled_for":null,"started_at":"2025-01-01T00:01:00.000Z","completed_at":"2025-01-01T00:01:30.000Z","created_by_id":3,"approved_by_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:01:30.000Z"},{"id":2,"public_id":"eF5gH6","course_id":5,"target_all":false,"target_ids":[10,11],"auto_enroll":false,"send_email":false,"offer_new_section_via_all_access_products":true,"target_count":null,"performed_count":0,"published_lessons_count":0,"status":"scheduled","scheduled_for":"2026-09-01T09:00:00.000Z","started_at":null,"completed_at":null,"created_by_id":3,"approved_by_id":null,"created_at":"2025-01-02T00:00:00.000Z","updated_at":"2025-01-02T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Courses::Sections::PublishAction"],"summary":"Create Publish Action","description":"Publish one or more course sections AND the lessons they contain. Provide exactly one of `target_ids` (a nonempty array of course-section public IDs) or `target_all: true` to publish every unpublished non-root section of the course. Explicit target IDs must identify sections in this course. Targeting the root \"Primary module\" container (or using `target_all`) expands to every unpublished non-root section. A missing or empty `courses_sections_publish_action` wrapper is a malformed request and returns `400`; a well-formed wrapper with a missing or conflicting selection, or an invalid/cross-course target ID, returns `422`. If a root or `target_all` request has no unpublished content to publish, the response is `200 OK` with a message (not an error).\nThe action runs asynchronously — poll with `GET /api/v2/courses/sections/publish_actions/{id}`. The `status` field is `queued`, `scheduled`, or `processing` while work remains and `completed` when it is done. Compare `performed_count` to `target_count` for section progress. `published_lessons_count` reports lesson publish states this action changed, excluding lessons already live.\nSet `auto_enroll: true` to grant existing course enrollees access to the newly published sections. Pair with `send_email: true` to notify them.\nUse `scheduled_for` (ISO 8601, must be a future datetime) to defer the publish.\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 when this bulk action is the right choice.","operationId":"createCoursesSectionsPublishActions","parameters":[{"name":"course_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Publish action parameters","required":true,"content":{"application/json":{"schema":{"type":"object","required":["courses_sections_publish_action"],"properties":{"courses_sections_publish_action":{"$ref":"#/components/schemas/CoursesSectionsPublishActionParameters"}}},"example":{"courses_sections_publish_action":{"target_ids":["sSwcZK"],"auto_enroll":true,"send_email":true}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesSectionsPublishActionAttributes"},"example":{"id":3,"public_id":"iJ7kL8","course_id":5,"target_all":false,"target_ids":[8],"auto_enroll":true,"send_email":false,"offer_new_section_via_all_access_products":false,"target_count":null,"performed_count":0,"published_lessons_count":0,"status":"queued","scheduled_for":null,"started_at":null,"completed_at":null,"created_by_id":3,"approved_by_id":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:00.000Z"}}}},"200":{"description":"OK — the request was valid but there was no unpublished content to publish (e.g. the root \"Primary module\" container was targeted on an empty or fully-published course). Nothing was published; this is not an error.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"target_count":{"type":"integer"},"performed_count":{"type":"integer"},"published_lessons_count":{"type":"integer"},"status":{"type":"string","enum":["completed"]}}},"example":{"message":"no unpublished course content to publish","target_count":0,"performed_count":0,"published_lessons_count":0,"status":"completed"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"400":{"description":"Bad Request — the required `courses_sections_publish_action` request wrapper is missing or empty.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: param is missing or the value is empty: courses_sections_publish_action","hint":null}}}},"422":{"description":"Unprocessable Entity — the request did not select exactly one of a nonempty `target_ids` array or `target_all: true`; an explicit target ID was invalid or did not belong to this course; or `scheduled_for` was not a valid future datetime.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"provide target_ids or target_all","hint":null}}}}}}},"/courses/sections/publish_actions/{id}":{"get":{"tags":["Courses::Sections::PublishAction"],"summary":"Fetch Publish Action","description":"Retrieve a single course-section publish action and its current async progress","operationId":"getCoursesSectionsPublishActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoursesSectionsPublishActionAttributes"},"example":{"id":3,"public_id":"iJ7kL8","course_id":5,"target_all":false,"target_ids":[8],"auto_enroll":true,"send_email":false,"offer_new_section_via_all_access_products":false,"target_count":1,"performed_count":1,"published_lessons_count":2,"status":"completed","scheduled_for":null,"started_at":"2025-01-03T00:00:05.000Z","completed_at":"2025-01-03T00:00:10.000Z","created_by_id":3,"approved_by_id":null,"created_at":"2025-01-03T00:00:00.000Z","updated_at":"2025-01-03T00:00:10.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Courses::Sections::PublishAction"],"summary":"Remove Publish Action","description":"Delete a course-section publish action record","operationId":"removeCoursesSectionsPublishActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/discounts":{"get":{"tags":["Discount"],"summary":"List Discounts","description":"List the discounts in a workspace.","operationId":"listDiscounts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of discount IDs to filter by.","example":"1,2,3"},"code":{"type":"string","description":"Filter by discount code (exact match)."},"discount_type":{"type":"string","description":"Filter by discount type (`code`, `automatic`, `sale`)."},"discount_method":{"type":"string","description":"Filter by discount method (`percentage`, `fixed`, `shipping`, `bogo`)."},"applies_to":{"type":"string","description":"Filter by scope (`all_products`, `specific_products`, `specific_variants`, `specific_collections`)."}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DiscountAttributes"}},"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"},{"id":772,"public_id":"qBEDNp","workspace_id":42000,"name":"Bundle 10 off","code":"BUNDLE10","discount_type":"code","discount_method":"fixed","amount":"10.0","percent":null,"currency":"usd","applies_to":"specific_products","apply_from":"2025-01-01T00:00:00.000Z","apply_until":"2025-02-01T00:00:00.000Z","limit_1_per_customer":true,"require_minimum_spend":true,"require_minimum_spend_amount":50,"discounts_per_redemption":1,"redemptions_count":3,"product_ids":[126],"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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Store. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Discount"],"summary":"Create Discount","description":"Create a discount in a workspace. A `code`-type discount (the default) needs a unique `code`; a `percentage` discount needs `percent`; a `fixed` discount needs a positive `amount`.\n\nCreating a discount publishes the code; it does not attach it to anything. The link between an order and a discount is a separate applied-discount record, written when a buyer redeems the code at checkout or when a ClickFunnels user applies it in the admin UI - which is why `POST /api/v2/workspaces/{workspace_id}/orders` takes no discount field and the `discount_ids` on an order are read-only. Writing applied discounts is not part of this API yet, and when it lands it will be that record you create rather than a discount field on the order. Until then an integration creates, reads, updates, expires and deletes discounts, and reads back which orders ended up carrying them.\n","operationId":"createDiscounts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Discount","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"discount":{"type":"object","$ref":"#/components/schemas/DiscountParameters"}}},"example":{"discount":{"name":"Launch 20","code":"LAUNCH20","discount_type":"code","discount_method":"percentage","percent":"20.0","applies_to":"all_products"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Store. Granted scopes: store:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity - validation failed","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"code_taken":{"summary":"code already in use","value":{"error":"Request unprocessable: Coupon Code is already being used in another Discount or Coupon","hint":null}},"missing_percent":{"summary":"percentage method with no percent","value":{"error":"Request unprocessable: Percent must be greater than 0","hint":null}},"code_characters":{"summary":"code contains characters other than letters, numbers and hyphens","value":{"error":"Request unprocessable: Coupon Code only allows letters, numbers, and hyphens","hint":null}},"expired_on_create":{"summary":"`expired` sent on create, at any value including `false`","value":{"error":"Request unprocessable: `expired` is not a create field. Create the discount, then expire it with `PATCH { \"discount\": { \"expired\": true } }`.","hint":null}},"unknown_enum_value":{"summary":"a value outside an enum field's list","value":{"error":"Request unprocessable: `discount_type` must be one of: code, automatic, sale.","hint":null}}}}}}}}},"/discounts/{id}":{"get":{"tags":["Discount"],"summary":"Fetch Discount","description":"Retrieve a single discount.","operationId":"getDiscounts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Store. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Discount"],"summary":"Update Discount","description":"Update a discount. Money-affecting fields are locked once the discount has been redeemed and return 422, while renaming and expiring still work. A discount that is already expired freezes its other fields and returns 422, a rename included - lift the expiry with `expired: false` (the API side of Remove Expiration in the app) or push `apply_until` into the future, then make the change and expire it again.\n","operationId":"updateDiscounts","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Discount","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"discount":{"type":"object","$ref":"#/components/schemas/DiscountParametersUpdate"}}},"example":{"discount":{"expired":true}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountAttributes"},"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":"2025-01-15T09:30:00.000Z","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":false,"expired":true,"scheduled":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-15T09:30:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Store. Granted scopes: store:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity - validation failed, the discount is locked after redemption, or the discount is expired","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"money_field_locked_after_redemption":{"summary":"a money-affecting field on a redeemed discount","value":{"error":"Request unprocessable: Percent cannot be changed because it has already been applied","hint":null}},"already_expired":{"summary":"a frozen field on an already-expired discount, including one sent alongside `expired: true`","value":{"error":"Request unprocessable: Discount cannot be changed because it has expired","hint":null}},"cannot_unexpire_redeemed":{"summary":"`expired: false` on a discount that has been redeemed","value":{"error":"Request unprocessable: Apply until cannot be removed after it has been redeemed","hint":null}},"expired_not_boolean":{"summary":"an `expired` value that is neither true nor false","value":{"error":"Request unprocessable: `expired` must be true or false.","hint":null}},"unknown_enum_value":{"summary":"a value outside an enum field's list","value":{"error":"Request unprocessable: `discount_type` must be one of: code, automatic, sale.","hint":null}},"end_before_start":{"summary":"apply_until earlier than apply_from - use `expired: true` to expire now","value":{"error":"Request unprocessable: Apply until scheduled end date must be after the scheduled start date","hint":null}}}}}}}},"delete":{"tags":["Discount"],"summary":"Remove Discount","description":"Hard-delete a discount. Only a discount that has NOT been applied to an order can be deleted; a used discount returns 422 (expire it with `expired: true` instead, to preserve its order history).\n\nA discount enters that state through an applied-discount record, written when a buyer redeems the code at checkout or when a ClickFunnels user applies it in the admin UI. A code an integration created and never published carries none of those records, so it is always deletable.\n","operationId":"removeDiscounts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Store. Granted scopes: store:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity - the discount is attached to an order and cannot be deleted. `redemptions_count` does not predict this - it only counts completed sales, so a discount reporting zero redemptions can still be undeletable.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Cannot delete a discount that has been applied to an order. Expire it instead with `expired: true`.","hint":null}}}}}}},"/workspaces/{workspace_id}/domains":{"get":{"tags":["Domain"],"summary":"List Domains","description":"List all domains for a workspace. Use this endpoint to retrieve domain IDs for use with other resources such as Funnels. These are **website hosting** domains (ownership + hosting CNAME + SSL). To manage **email sending** domains (DKIM/SPF/DMARC), see the Email Domains endpoints (listEmailsDomains / createEmailsDomains).","operationId":"listDomains","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainAttributes"}},"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"},{"id":2,"public_id":"gHiJkL","workspace_id":42000,"name":"shop.example.com","status":"connecting","connected":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/domains/{id}":{"get":{"tags":["Domain"],"summary":"Fetch Domain","description":"Fetch a single domain by ID.","operationId":"getDomain","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/downloads":{"get":{"tags":["Download"],"summary":"List Downloads","description":"List downloads for a workspace. Use each download's `asset_id` when configuring a product variant's digital-asset access.","operationId":"listDownloads","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DownloadAttributes"}},"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"},{"id":74,"public_id":"qRzKTy","workspace_id":42000,"asset_id":905,"name":"Launch Planning Workbook.xlsx","created_at":"2026-07-21T11:00:00.000Z","updated_at":"2026-07-21T11:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/downloads/{id}":{"get":{"tags":["Download"],"summary":"Fetch Download","description":"Fetch a single download by ID, including the Asset ID used to configure product-variant access.","operationId":"getDownloads","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/emails/addresses":{"get":{"tags":["Emails::Address"],"summary":"List Email Addresses","description":"List all email addresses for a workspace. 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) for picking one to send from.","operationId":"listEmailsAddresses","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[email_address]=value\u0026filter[verified]=true`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"email_address":{"type":"string","description":"Exact match on the email address.","example":"marketing@example.com"},"verified":{"type":"boolean","description":"When `true`, returns only addresses whose sending domain has verified email transport. This is NOT the same as usable: transport verification says nothing about domain ownership, so always pick a sender by the top-level `usable_as_sender` field rather than by this filter. When `false`, returns only addresses without a transport-verified sending domain (including shared-domain addresses). Omit to return all addresses."}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailsAddressAttributes"}},"example":[{"id":1,"public_id":"AbCdEf","workspace_id":42000,"email_address":"marketing@example.com","name":"Marketing Team","is_workspace_default":false,"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","usable_as_sender":true},{"id":2,"public_id":"GhIjKl","workspace_id":42000,"email_address":"support@clickfunnelsmail.com","name":"Support","is_workspace_default":true,"emails_domain":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","usable_as_sender":false}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Emails::Address"],"summary":"Create Email Address","description":"Create a sender (\"from\") email address. Provide `username` and `name` (the from-name shown on emails). By default, the address is created on ClickFunnels' shared sending domain. To use a custom domain, first provision it with `POST /workspaces/{workspace_id}/emails/domains`, add the returned DNS records, and have the customer connect that same root domain to this workspace as a website/hosting domain in the ClickFunnels app. Both halves are required and no API call can do the second one, so DNS records alone never make a domain ready. Re-check with `POST /emails/domains/{id}/verify` until `ready_for_sending` is true, then pass the domain's numeric `id` as `emails_domain_id`. An address created before the domain is ready is allowed; it simply reports `usable_as_sender: false` until then. 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).","operationId":"createEmailsAddresses","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Email Address","required":true,"content":{"application/json":{"schema":{"type":"object","required":["emails_address"],"properties":{"emails_address":{"type":"object","$ref":"#/components/schemas/EmailsAddressParameters","required":["username","name"]}}},"example":{"emails_address":{"username":"hello","name":"Acme Support"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsAddressAttributes"},"example":{"id":3,"public_id":"MnOpQr","workspace_id":42000,"email_address":"hello@clickfunnelsmail.com","name":"Acme Support","is_workspace_default":true,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","emails_domain":null,"usable_as_sender":true}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Validation failed","hint":null}}}}}}},"/emails/addresses/{id}":{"get":{"tags":["Emails::Address"],"summary":"Get Email Address","description":"Retrieve a single email address","operationId":"getEmailsAddresses","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsAddressAttributes"},"example":{"id":1,"public_id":"AbCdEf","workspace_id":42000,"email_address":"marketing@example.com","name":"Marketing Team","is_workspace_default":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","emails_domain":{"name":"example.com","verified":true,"dkim_verified":true,"spf_verified":true,"dmarc_verified":true,"smtp_verified":false},"usable_as_sender":true}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Emails::Address"],"summary":"Update Email Address","description":"Update a sender address — most commonly to change its `name` (the from-name). You may also move it to a different ready-for-sending custom domain via `emails_domain_id`.","operationId":"updateEmailsAddresses","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Email Address","required":true,"content":{"application/json":{"schema":{"type":"object","required":["emails_address"],"properties":{"emails_address":{"type":"object","$ref":"#/components/schemas/EmailsAddressParameters"}}},"example":{"emails_address":{"name":"Acme Support"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsAddressAttributes"},"example":{"id":1,"public_id":"AbCdEf","workspace_id":42000,"email_address":"marketing@example.com","name":"Acme Support","is_workspace_default":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","emails_domain":{"name":"example.com","verified":true,"dkim_verified":true,"spf_verified":true,"dmarc_verified":true,"smtp_verified":false},"usable_as_sender":true}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Validation failed","hint":null}}}}}},"delete":{"tags":["Emails::Address"],"summary":"Archive Email Address","description":"Archive (soft-delete) a sender address. Once archived the sender is treated as gone: it is excluded from the list endpoint and a subsequent GET/PATCH/DELETE on its id returns 404 (there is no un-archive endpoint).","operationId":"removeEmailsAddresses","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/emails/broadcasts":{"get":{"tags":["Emails::Broadcast"],"summary":"List Email Broadcasts","description":"List all email broadcasts for a workspace. Filterable by id and status.","operationId":"listEmailsBroadcasts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of broadcast IDs to filter by.","example":"1,42"},"status":{"type":"string","description":"A comma-separated list of statuses to filter by (draft, scheduled, sending, paused, unhealthy, complete, canceled).","example":"draft,scheduled"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailsBroadcastAttributes"}},"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 \u0026 Canada)","send_immediately":false,"smart_sending":true,"smart_sending_time":0.5,"smart_sending_unit":"hour","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],"split_test":false,"split_test_percentage":null,"split_test_wait_time":null,"variants":[{"subject":"This Week's Updates","preheadline":"Check out what's new","send_percentage":100.0,"main":true,"open_count":0,"winner":null}],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Emails::Broadcast"],"summary":"Create Email Broadcast","description":"Create a new email broadcast. Broadcasts are created in DRAFT status — creating one does not send it. To send it, create a send action for the broadcast (POST /emails/broadcasts/{broadcast_id}/send_actions): omit send_at to send now, or pass a future send_at to schedule. (Alternatively, the legacy inline path accepts recipients with send_immediately=true, or send_at/send_at_local_time/time_zone to schedule.) A complete business mailing address is required even when creating a draft. Configure it first with PUT /workspaces/{workspace_id}/emails/settings; an incomplete address returns 422. Pick from_email and reply_to_email from addresses whose top-level `usable_as_sender` is true, not from the sending domain's `verified` flag: `verified` covers email transport only, and sending a broadcast from an address that is not usable is rejected with 422. List addresses via GET /workspaces/{workspace_id}/emails/addresses. See [Broadcasts](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#broadcasts) and 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).","operationId":"createEmailsBroadcast","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Email Broadcast","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"emails_broadcast":{"type":"object","$ref":"#/components/schemas/EmailsBroadcastParameters"}}},"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":"\u003ch1\u003eHello World\u003c/h1\u003e","text_body":"Hello World","send_immediately":false,"smart_sending":false,"send_at":"2025-06-01","send_at_local_time":"18:00:00","time_zone":"Pacific Time (US \u0026 Canada)","topic_ids":[1,2],"recipients":[{"email":"user@example.com","first_name":"Jane","last_name":"Doe"}]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsBroadcastAttributes"},"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 \u0026 Canada)","send_immediately":false,"smart_sending":true,"smart_sending_time":0.5,"smart_sending_unit":"hour","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],"split_test":false,"split_test_percentage":null,"split_test_wait_time":null,"variants":[{"subject":"This Week's Updates","preheadline":"Check out what's new","send_percentage":100.0,"main":true,"open_count":0,"winner":null}],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: A complete business mailing address is required to create marketing emails. Set it first via the email settings endpoint (GET/PUT /api/v2/workspaces/:workspace_id/emails/settings), providing a name and address, then try again.","hint":null}}}}}}},"/emails/broadcasts/{id}":{"get":{"tags":["Emails::Broadcast"],"summary":"Fetch Email Broadcast","description":"Retrieve a single email broadcast by ID","operationId":"getEmailsBroadcast","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsBroadcastAttributes"},"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 \u0026 Canada)","send_immediately":false,"smart_sending":true,"smart_sending_time":0.5,"smart_sending_unit":"hour","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],"split_test":false,"split_test_percentage":null,"split_test_wait_time":null,"variants":[{"subject":"This Week's Updates","preheadline":"Check out what's new","send_percentage":100.0,"main":true,"open_count":0,"winner":null}],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Emails::Broadcast"],"summary":"Update Email Broadcast","description":"Update an email broadcast. Only broadcasts in draft status can be updated. See [Broadcasts](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#broadcasts) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).","operationId":"updateEmailsBroadcast","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Email Broadcast","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"emails_broadcast":{"type":"object","$ref":"#/components/schemas/EmailsBroadcastParametersUpdate"}}},"example":{"emails_broadcast":{"name":"Updated Newsletter","subject":"Updated Subject"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsBroadcastAttributes"},"example":{"id":1,"public_id":"GhIjKl","workspace_id":42000,"name":"Updated Newsletter","subject":"Updated Subject","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 \u0026 Canada)","send_immediately":false,"smart_sending":true,"smart_sending_time":0.5,"smart_sending_unit":"hour","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],"split_test":false,"split_test_percentage":null,"split_test_wait_time":null,"variants":[{"subject":"This Week's Updates","preheadline":"Check out what's new","send_percentage":100.0,"main":true,"open_count":0,"winner":null}],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Emails::Broadcast"],"summary":"Delete Email Broadcast","description":"Delete an email broadcast. Only broadcasts in draft status can be deleted.","operationId":"removeEmailsBroadcast","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/emails/broadcasts/{broadcast_id}/send_actions":{"get":{"tags":["Emails::Broadcasts::SendAction"],"summary":"List Send Actions","description":"List all send actions for an email broadcast. Send actions represent past or scheduled delivery attempts for the broadcast.","operationId":"listEmailsBroadcastsSendActions","parameters":[{"name":"broadcast_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailsBroadcastsSendActionAttributes"}},"example":[{"id":1,"public_id":"aB3cD4","workspace_id":42000,"send_type":"default","target_ids":[7],"target_count":1500,"performed_count":1500,"scheduled_for":null,"started_at":"2025-06-01T18:00:05.000Z","completed_at":"2025-06-01T18:12:30.000Z","created_by_id":3,"approved_by_id":null,"created_at":"2025-06-01T17:59:00.000Z","updated_at":"2025-06-01T18:12:30.000Z","broadcast_id":7},{"id":2,"public_id":"eF5gH6","workspace_id":42000,"send_type":"default","target_ids":[7],"target_count":null,"performed_count":0,"scheduled_for":"2025-09-15T18:00:00.000Z","started_at":null,"completed_at":null,"created_by_id":3,"approved_by_id":null,"created_at":"2025-06-02T10:00:00.000Z","updated_at":"2025-06-02T10:00:00.000Z","broadcast_id":7}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Emails::Broadcasts::SendAction"],"summary":"Create Send Action","description":"Send (or schedule) an email broadcast by creating a Send Action. This is the same trigger the ClickFunnels dashboard fires when you click \"Send\".\nThe request body is optional — a bodyless POST dispatches the broadcast immediately. Pass `send_at` inside `emails_broadcasts_send_action` to schedule the broadcast for a future date and time; the broadcast will be sent at the given hour on that day, adjusted to the workspace's time zone.\nThe broadcast must be ready to send before this call will succeed. It requires: - A topic assigned (`topic_ids` is non-empty) - A from-address with `usable_as_sender: true` - A complete workspace marketing address (set via the Email Settings endpoint)\nIf any of these conditions are not met, the endpoint returns 422 with a message listing what is missing.\nThe send runs asynchronously. The returned Send Action record tracks progress: poll `GET /api/v2/emails/broadcasts/send_actions/{id}` and compare `performed_count` to `target_count`.\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).","operationId":"createEmailsBroadcastsSendActions","parameters":[{"name":"broadcast_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Send action parameters. The entire body is optional — omit it (or pass an empty object) to send immediately.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"emails_broadcasts_send_action":{"type":"object","$ref":"#/components/schemas/EmailsBroadcastsSendActionParameters"}}},"example":{"emails_broadcasts_send_action":{"send_at":"2025-09-15T18:00:00.000Z"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsBroadcastsSendActionAttributes"},"example":{"id":1,"public_id":"aB3cD4","workspace_id":42000,"send_type":"default","target_ids":[7],"target_count":null,"performed_count":0,"scheduled_for":null,"started_at":null,"completed_at":null,"created_by_id":3,"approved_by_id":null,"created_at":"2025-06-01T17:59:00.000Z","updated_at":"2025-06-01T17:59:00.000Z","broadcast_id":7}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — the broadcast is not ready to send. The error message lists what is missing (e.g. no topic assigned, from-address not usable as sender, or marketing address incomplete). May also be returned if the broadcast has already been scheduled. To fix an incomplete marketing address, 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).","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Weekly Newsletter is not sendable.; send_at is not a valid datetime","hint":null}}}}}}},"/emails/broadcasts/{broadcast_id}/stats":{"get":{"tags":["Emails::Broadcast"],"summary":"Fetch Email Broadcast Stats","description":"Delivery progress, engagement and revenue for one email broadcast, the same numbers as\nthe broadcast's page in the ClickFunnels dashboard.\n\nThe numbers cover the broadcast's send window, returned as `timerange`: from when\nsending began until two weeks after it completed, or until now while it has not\ncompleted, capped at 90 days after sending began. A broadcast that has not started\nsending reports the last 90 days, with every number zero. There are no timerange parameters;\nthe `timerange_start` and `timerange_end` parameters of the funnel and page stats\nendpoints are refused with a 422 rather than silently ignored.\n\nCounts are unique contacts, except `opened` and `clicked`, which count every event.\nRates are whole percentages (0-100) of the audience (`progress.total`), rounded to the\nnearest integer, so a share under 0.5% reads 0 next to a non-zero count; the counts are\nauthoritative. `click_to_open_rate` is unique clicks over unique opens. Revenue is\nattributed to the broadcast when the buyer reached the order through one of its links,\nsummed across every send of the broadcast. Only live-mode transactions in the workspace\ncurrency are counted (a workspace with no currency set has nothing to filter on, so\n`currency` is `null` and every currency is summed); test-mode orders are excluded.\n\n`progress.total` is the audience size recorded when the broadcast sent, summed over every\nsend of the broadcast, and is `null` before the first send has run. Stats are cached for a\nfew minutes while a broadcast is sending and longer once it has completed.\n\nThe split-test variants and the winner are on the broadcast record itself\n(`GET /api/v2/emails/broadcasts/{id}`), not here.\n","operationId":"getEmailsBroadcastStats","parameters":[{"name":"broadcast_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsBroadcastStatsAttributes"},"example":{"broadcast":{"id":1,"public_id":"GhIjKl","name":"Weekly Newsletter"},"currency":"USD","timerange":{"from":"2026-08-01T10:00:00Z","to":"2026-08-15T12:00:00Z"},"progress":{"total":1000,"queued":0,"processing":0,"sent":985,"failed":3},"performance":{"delivered":985,"bounced":12,"opened":610,"unique_opens":402,"clicked":95,"unique_clicks":81,"unsubscribed":4,"spam_complaints":1,"open_rate":40,"click_rate":8,"click_to_open_rate":20,"bounce_rate":1,"unsubscribe_rate":0},"revenue":{"total":"1234.50","orders_count":17,"per_recipient":"1.23","per_unique_open":"3.07","per_unique_click":"15.24"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden — the token's scopes don't grant read access to emails. Not retryable.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Emails. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found — broadcast not found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — a `timerange_start` or `timerange_end` parameter was given. Broadcast\nstats always cover the broadcast's own send window (returned as `timerange`), so the parameter\nis refused rather than silently ignored. Remove it and read `timerange` from the response.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: timerange_start not supported: broadcast stats always cover the broadcast's own send window, which the response returns as timerange.","hint":null}}}},"503":{"description":"Service Unavailable — a stats query exceeded the database timeout, or a dependency was\nbriefly unavailable. Retryable; the numbers are cached once a query completes, so a retry\nshortly after is usually cheap.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Service unavailable: Transient service issue: Please try again shortly.","hint":null}}}}}}},"/emails/broadcasts/send_actions/{id}":{"get":{"tags":["Emails::Broadcasts::SendAction"],"summary":"Fetch Send Action","description":"Retrieve a single send action and its current async delivery progress. Compare `performed_count` to `target_count` to determine how far along delivery is. `completed_at` is set when delivery finishes.","operationId":"getEmailsBroadcastsSendActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsBroadcastsSendActionAttributes"},"example":{"id":1,"public_id":"aB3cD4","workspace_id":42000,"send_type":"default","target_ids":[7],"target_count":1500,"performed_count":1500,"scheduled_for":null,"started_at":"2025-06-01T18:00:05.000Z","completed_at":"2025-06-01T18:12:30.000Z","created_by_id":3,"approved_by_id":null,"created_at":"2025-06-01T17:59:00.000Z","updated_at":"2025-06-01T18:12:30.000Z","broadcast_id":7}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Emails::Broadcasts::SendAction"],"summary":"Remove Send Action","description":"Delete a send action record. This cancels a scheduled (not-yet-started) send action and removes the record. Deleting a send action that has already started or completed may not halt in-flight delivery.","operationId":"removeEmailsBroadcastsSendActions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/emails/domains":{"get":{"tags":["Emails::Domain"],"summary":"List Email Domains","description":"List all email sending domains (DKIM/SPF/DMARC) for a workspace. These are **email sending** domains - for website/hosting domains, see **listDomains**. Each result separates workspace ownership (`ownership_verified`) from email transport (`verified`); addresses on a custom domain can send only when `ready_for_sending` is true. Ownership comes from connecting the domain, as `www.example.com` or another subdomain of it, to this workspace as a website/hosting domain in the ClickFunnels app - no API call makes `ownership_verified` true. Return-path verification is independent of sender readiness. Reads return the stored DNS verification state and never trigger a live DNS lookup (use `verifyEmailsDomains` for that); `ownership_verified` is always current. See [Sending domains](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#sending-domains) in the Emails Skill for the complete agent workflow.","operationId":"listEmailsDomains","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailsDomainAttributes"}},"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"},{"id":2,"public_id":"LmNoPq","workspace_id":42000,"name":"verified-example.com","ownership_verified":true,"verified":true,"ready_for_sending":true,"dkim_verified":true,"spf_verified":true,"dmarc_verified":true,"smtp_verified":false,"return_address_verified":false,"dkim_record":{"type":"TXT","name":"second._domainkey.verified-example.com","value":"v=DKIM1; k=rsa; p=...","ttl":300,"verified":true},"spf_record":{"type":"TXT","name":"verified-example.com","value":"v=spf1 include:mailer.myclickfunnels.com -all","ttl":300,"verified":true},"dmarc_record":{"type":"TXT","name":"_dmarc.verified-example.com","value":"v=DMARC1; p=none;","ttl":300,"verified":true},"return_address_record":{"type":"CNAME","name":"cf2mail.verified-example.com","value":"mailer.myclickfunnels.com","ttl":300,"verified":false},"next_steps":["Recommended for ClickFunnels bounce handling: add return_address_record at the DNS provider.","Ready to send - create addresses on this domain with POST /api/v2/workspaces/42000/emails/addresses (emails_domain_id 2)."],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Emails::Domain"],"summary":"Create Email Domain","description":"Provision a sending domain for a workspace. Find-or-create: returns `200` with the existing record if a domain with this name already exists for the workspace, or `201` with freshly generated DNS records if it was just created. These are **email sending** domains (DKIM/SPF/DMARC) - for website/hosting domains, see **listDomains**. The response includes the email-transport records; `dkim_record` can be `null` until the DKIM key finishes generating, and POSTing the same name again retries provisioning. Provisioning also creates a `no-reply@\u003cname\u003e` sender address on the new domain. Follow `next_steps`, which distinguishes the required ownership step, the required transport records, and the recommended return-path record; verified SMTP replaces DKIM/SPF/DMARC. Ownership (`ownership_verified`) is proved by connecting the domain, as `www.example.com` or another subdomain of it, to this workspace as a website/hosting domain in the ClickFunnels app, not through this API. Ownership is confirmed at the root domain, so provision `example.com` rather than a subdomain such as `mail.example.com`, which is rejected with `422` naming the root domain to use instead. Then call **verifyEmailsDomains** until `ready_for_sending` is true; a `200` there means the check ran, not that it passed. The top-level `verified` field means transport only; sender readiness requires both ownership and transport. Return-path verification is independent. Once ready, create addresses via `POST /workspaces/{workspace_id}/emails/addresses` with `emails_domain_id` set to this domain's numeric `id`.","operationId":"createEmailsDomains","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about the sending domain to provision","required":true,"content":{"application/json":{"schema":{"type":"object","required":["emails_domain"],"properties":{"emails_domain":{"type":"object","$ref":"#/components/schemas/EmailsDomainParameters"}}},"example":{"emails_domain":{"name":"example.com"}}}}},"responses":{"200":{"description":"OK - a sending domain with this name already existed for the workspace and is returned as-is.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsDomainAttributes"},"example":{"id":5,"public_id":"LmNoPq","workspace_id":42000,"name":"existing-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.existing-example.com","value":"v=DKIM1; k=rsa; p=...","ttl":300,"verified":false},"spf_record":{"type":"TXT","name":"existing-example.com","value":"v=spf1 include:mailer.myclickfunnels.com -all","ttl":300,"verified":false},"dmarc_record":{"type":"TXT","name":"_dmarc.existing-example.com","value":"v=DMARC1; p=none;","ttl":300,"verified":false},"return_address_record":{"type":"CNAME","name":"cf2mail.existing-example.com","value":"mailer.myclickfunnels.com","ttl":300,"verified":false},"next_steps":["Connect existing-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 existing-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/LmNoPq/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"}}}},"201":{"description":"Created - a new sending domain was provisioned; its DNS records were just generated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsDomainAttributes"},"example":{"id":6,"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"malformed_name":{"value":{"error":"Request unprocessable: Name must be a valid public domain name.","hint":null}},"subdomain_name":{"value":{"error":"Request unprocessable: Sending domains are set up on the root domain. Use \"example.com\" instead of \"mail.example.com\".","hint":null}},"trademarked_name":{"value":{"error":"Request unprocessable: Name includes a trademarked phrase - please select another domain name","hint":null}}}}}}}}},"/emails/domains/{id}":{"get":{"tags":["Emails::Domain"],"summary":"Get Email Domain","description":"Retrieve a single email sending domain (DKIM/SPF/DMARC), including its ownership, transport, readiness, and return-path flags plus the DNS records to add at the provider. These are **email sending** domains - for website/hosting domains, see **listDomains**. `verified` reports transport only; `ready_for_sending` requires both workspace ownership and transport, while return-path verification is independent. Ownership is confirmed by connecting the domain, as `www.example.com` or another subdomain of it, to this workspace as a website/hosting domain in the ClickFunnels app, not through this API. `dkim_record` is `null` until the DKIM key finishes generating - re-POST the same name to **createEmailsDomains** to retry provisioning. This read returns the stored DNS verification state and never triggers a live DNS lookup (use `verifyEmailsDomains` to re-check), while `ownership_verified` is always current.","operationId":"getEmailsDomains","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsDomainAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/emails/domains/{id}/verify":{"post":{"tags":["Emails::Domain"],"summary":"Verify Email Domain","description":"Re-run the DNS checks for DKIM, SPF, DMARC, and the return path, cached for about 10 minutes, and return the refreshed status together with the current ownership state. A `200` means the check ran, not that it passed, so always read the booleans back. `verified` reports transport only and becomes true when DKIM, SPF, and DMARC are all live, or when a verified SMTP setting exists. `ownership_verified` reports workspace control of the name, which comes from connecting the domain, as `www.example.com` or another subdomain of it, to this workspace as a website/hosting domain in the ClickFunnels app rather than from any API call. `ready_for_sending` becomes true only when both are true. Return-path verification is checked but remains independent and is not required for readiness. DNS changes can take up to 48 hours to propagate.","operationId":"verifyEmailsDomains","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsDomainAttributes"},"example":{"id":1,"public_id":"QrStUv","workspace_id":42000,"name":"example.com","ownership_verified":true,"verified":true,"ready_for_sending":true,"dkim_verified":true,"spf_verified":true,"dmarc_verified":true,"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":true},"spf_record":{"type":"TXT","name":"example.com","value":"v=spf1 include:mailer.myclickfunnels.com -all","ttl":300,"verified":true},"dmarc_record":{"type":"TXT","name":"_dmarc.example.com","value":"v=DMARC1; p=none;","ttl":300,"verified":true},"return_address_record":{"type":"CNAME","name":"cf2mail.example.com","value":"mailer.myclickfunnels.com","ttl":300,"verified":false},"next_steps":["Recommended for ClickFunnels bounce handling: add return_address_record at the DNS provider.","Ready to send - create addresses on this domain with POST /api/v2/workspaces/42000/emails/addresses (emails_domain_id 1)."],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-06-01T12:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/emails/settings":{"get":{"tags":["Emails::Settings"],"summary":"Get Email Settings","description":"Retrieve email settings for a workspace. A workspace that has never configured its email settings has no persisted record yet; this returns `200` with the empty settings shape (`address: null`, `address_complete: false`) rather than a `404`, signalling \"not set up yet - PUT to configure\".\nCheck `address_complete` here before sending marketing email: 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).","operationId":"getEmailsSettings","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsSettingsAttributes"},"example":{"workspace_id":42000,"name":"Acme Inc.","hide_branding":false,"unsubscribe_footer":null,"footer_alignment":"center","address_single_line":false,"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":null,"address_complete":false}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Emails::Settings"],"summary":"Update Email Settings","description":"Update a workspace's email/marketing settings. Most importantly, this sets the marketing (business) address, which is the workspace-wide prerequisite for creating broadcasts and workflow send-email steps, and for sending broadcasts. When an `address` is supplied it is validated for completeness, so a 422 here means marketing-email creation and sending remain blocked. A workspace that has never configured its email settings has no persisted record yet; the first PUT builds and persists it, so it succeeds rather than returning a `404`.\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) for the exact body to send.","operationId":"updateEmailsSettings","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about updated fields in the email settings","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"marketing_setting":{"type":"object","$ref":"#/components/schemas/EmailsSettingsParameters"}}},"example":{"marketing_setting":{"name":"Acme Inc.","address":{"address_one":"123 Main St","city":"San Francisco","postal_code":"94105","country_code":"US","region":"CA"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsSettingsAttributes"},"example":{"workspace_id":42000,"name":"Acme Inc.","hide_branding":false,"unsubscribe_footer":null,"footer_alignment":"center","address_single_line":false,"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}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity. Returned when the supplied `address` is incomplete, when a sender/reply-to id does not belong to this workspace, or when `footer_alignment` is not one of `left`, `center`, `right`.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Address is incomplete","hint":null}}}}}}},"/workspaces/{workspace_id}/emails/templates":{"get":{"tags":["Emails::Template"],"summary":"List Email Templates","description":"List all email templates for a workspace","operationId":"listEmailsTemplates","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailsTemplateAttributes"}},"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","created_via_api":false,"from_address":null,"subject":null},{"id":2,"public_id":"StUvWx","workspace_id":42000,"name":"Newsletter Template","template_type":"email","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","created_via_api":false,"from_address":null,"subject":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Emails::Template"],"summary":"Create Email Template","description":"Create an email template from html_body/text_body. The template is marked api-created and is hidden from the visual template pickers (it cannot be edited in the visual BeeFree editor).\nSee [Create a template](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#create-a-template) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md), including the `expand[]=html_body`/`expand[]=text_body` params that echo the body you just set back in the response.","operationId":"createEmailsTemplate","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Email Template","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"emails_template":{"type":"object","$ref":"#/components/schemas/EmailsTemplateParameters"}}},"example":{"emails_template":{"name":"Welcome Email","subject":"Welcome aboard!","html_body":"\u003ch1\u003eHello\u003c/h1\u003e","text_body":"Hello","from_address_id":4001}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsTemplateAttributes"},"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":"\u003ch1\u003eHello\u003c/h1\u003e","text_body":"Hello","created_via_api":true,"from_address":{"id":4001,"public_id":"FrAd01","email_address":"marketing@example.com","name":"Marketing Team"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"from_address_id not found","hint":null}}}}}}},"/emails/templates/{id}":{"get":{"tags":["Emails::Template"],"summary":"Fetch Email Template","description":"Retrieve a single email template","operationId":"getEmailsTemplate","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsTemplateAttributes"},"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","created_via_api":false,"from_address":null,"subject":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Emails::Template"],"summary":"Update Email Template","description":"Update an email template. Only the provided fields are changed. Invalid Liquid in html_body is rejected with 422.\nSee [Update a template](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#update-a-template) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md).","operationId":"updateEmailsTemplate","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Fields to update on the template","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"emails_template":{"type":"object","$ref":"#/components/schemas/EmailsTemplateParametersUpdate"}}},"example":{"emails_template":{"html_body":"\u003ch1\u003eUpdated\u003c/h1\u003e"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsTemplateAttributes"},"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":"\u003ch1\u003eHello\u003c/h1\u003e","text_body":"Hello","created_via_api":true,"from_address":{"id":4001,"public_id":"FrAd01","email_address":"marketing@example.com","name":"Marketing Team"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Liquid syntax error: 'if' tag was never closed","hint":null}}}}}},"delete":{"tags":["Emails::Template"],"summary":"Delete Email Template","description":"Delete an email template. Returns 422 if the template is shared or is in use by a workflow send-email step.\nSee [Delete a template](https://accounts.myclickfunnels.com/.well-known/emails/skill.md#delete-a-template) in the [Emails Skill](https://accounts.myclickfunnels.com/.well-known/emails/skill.md) for what makes a template undeletable.","operationId":"deleteEmailsTemplate","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Emails. Granted scopes: emails:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Template cannot be deleted while it is in use by a workflow step or is shared","hint":null}}}}}}},"/workspaces/{workspace_id}/emails/topics":{"get":{"tags":["Emails::Topic"],"summary":"List Email Topics","description":"List all email topics for a workspace. Use include_archived=true to include archived topics.","operationId":"listEmailsTopics","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"include_archived","in":"query","description":"Set to true to include archived topics in the results","required":false,"schema":{"type":"string","enum":["true"]}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailsTopicAttributes"}},"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"},{"id":2,"public_id":"YzAbCd","workspace_id":42000,"name":"Promotions","description":"Promotional emails","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Emails::Topic"],"summary":"Create Email Topic","description":"Create a new email topic for a workspace","operationId":"createEmailsTopic","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Email Topic","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"emails_topic":{"type":"object","$ref":"#/components/schemas/EmailsTopicParameters"}}},"example":{"emails_topic":{"name":"Product Updates","description":"Updates about our products"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsTopicAttributes"},"example":{"id":3,"public_id":"EfGhIj","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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/emails/topics/{id}":{"get":{"tags":["Emails::Topic"],"summary":"Fetch Email Topic","description":"Retrieve a single email topic","operationId":"getEmailsTopic","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsTopicAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Emails::Topic"],"summary":"Update Email Topic","description":"Update an email topic","operationId":"updateEmailsTopic","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Email Topic","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"emails_topic":{"type":"object","$ref":"#/components/schemas/EmailsTopicParametersUpdate"}}},"example":{"emails_topic":{"name":"Renamed Topic","description":"Updated description"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailsTopicAttributes"},"example":{"id":1,"public_id":"StUvWx","workspace_id":42000,"name":"Renamed Topic","description":"Updated description","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Emails::Topic"],"summary":"Archive Email Topic","description":"Archive an email topic. System topics cannot be archived.","operationId":"archiveEmailsTopic","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/forms":{"get":{"tags":["Form"],"summary":"List Forms","description":"List forms for a workspace","operationId":"listForms","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormAttributes"}},"example":[{"id":144,"public_id":"ESIkld","workspace_id":42000,"name":"Example Form","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":145,"public_id":"AZXVCl","workspace_id":42000,"name":"Example Form","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Form"],"summary":"Create Form","description":"Add a new form","operationId":"createForms","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Form","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"form":{"type":"object","$ref":"#/components/schemas/FormParameters"}}},"example":{"form":{"name":"Example Form"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAttributes"},"example":{"id":147,"public_id":"HGeoKF","workspace_id":42000,"name":"Example Form","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/forms/{id}":{"get":{"tags":["Form"],"summary":"Fetch Form","description":"Retrieve a form","operationId":"getForms","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAttributes"},"example":{"id":146,"public_id":"oLaHxY","workspace_id":42000,"name":"Example Form","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Form"],"summary":"Update Form","description":"Update a form","operationId":"updateForms","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Form","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"form":{"type":"object","$ref":"#/components/schemas/FormParametersUpdate"}}},"example":{"form":{"name":"Example Form"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormAttributes"},"example":{"id":149,"public_id":"yCJFVM","workspace_id":42000,"name":"Example Form","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Form"],"summary":"Remove Form","description":"Delete a form","operationId":"removeForms","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/forms/{form_id}/field_sets":{"get":{"tags":["Forms::FieldSet"],"summary":"List Field Sets","description":"List field sets for a form","operationId":"listFormsFieldSets","parameters":[{"name":"form_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormsFieldSetAttributes"}},"example":[{"id":142,"public_id":"uOqvKD","form_id":153,"title":"Example Field Set","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":143,"public_id":"OlXgZI","form_id":154,"title":"Example Field Set","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Forms::FieldSet"],"summary":"Create Field Set","description":"Add a new field set","operationId":"createFormsFieldSets","parameters":[{"name":"form_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Field Set","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_field_set":{"type":"object","$ref":"#/components/schemas/FormsFieldSetParameters"}}},"example":{"forms_field_set":{"title":"Example Field Set"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldSetAttributes"},"example":{"id":145,"public_id":"arSZpR","form_id":156,"title":"Example Field Set","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/forms/field_sets/{id}":{"get":{"tags":["Forms::FieldSet"],"summary":"Fetch Field Set","description":"Retrieve a field set","operationId":"getFormsFieldSets","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldSetAttributes"},"example":{"id":144,"public_id":"JktQra","form_id":155,"title":"Example Field Set","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Forms::FieldSet"],"summary":"Update Field Set","description":"Update a field set","operationId":"updateFormsFieldSets","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Field Set","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_field_set":{"type":"object","$ref":"#/components/schemas/FormsFieldSetParametersUpdate"}}},"example":{"forms_field_set":{"title":"Example Field Set"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldSetAttributes"},"example":{"id":147,"public_id":"hYMOjn","form_id":158,"title":"Example Field Set","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Forms::FieldSet"],"summary":"Remove Field Set","description":"Delete a field set","operationId":"removeFormsFieldSets","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/forms/field_sets/{field_set_id}/fields":{"get":{"tags":["Forms::Field"],"summary":"List Fields","description":"List fields for a field set","operationId":"listFormsFields","parameters":[{"name":"field_set_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","sort_order"]}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormsFieldAttributes"}},"example":[{"id":141,"public_id":"CrPZSu","field_set_id":151,"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"},{"id":142,"public_id":"XlnBiR","field_set_id":152,"label":"MyString","field_type":"MyString","allow_multiple":false,"key":"CustomKey","hidden":false,"sort_order":1,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Forms::Field"],"summary":"Create Field","description":"Add a new field","operationId":"createFormsFields","parameters":[{"name":"field_set_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Field","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_field":{"type":"object","$ref":"#/components/schemas/FormsFieldParameters"}}},"example":{"forms_field":{"label":"MyString","field_type":"MyString","allow_multiple":false,"key":"CustomKey","hidden":false}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldAttributes"},"example":{"id":144,"public_id":"RzoDgE","field_set_id":154,"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/forms/fields/{id}":{"get":{"tags":["Forms::Field"],"summary":"Fetch Field","description":"Retrieve a field","operationId":"getFormsFields","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldAttributes"},"example":{"id":143,"public_id":"enmBWo","field_set_id":153,"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Forms::Field"],"summary":"Update Field","description":"Update a field","operationId":"updateFormsFields","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Field","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_field":{"type":"object","$ref":"#/components/schemas/FormsFieldParametersUpdate"}}},"example":{"forms_field":{"label":"Example Field","field_type":"MyString","allow_multiple":false,"key":"CustomKey","hidden":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldAttributes"},"example":{"id":145,"public_id":"XvLIcZ","field_set_id":155,"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Forms::Field"],"summary":"Remove Field","description":"Delete a field","operationId":"removeFormsFields","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/forms/field_sets/{field_set_id}/fields/reorder":{"post":{"tags":["Forms::Field"],"summary":"Reorder Fields","description":"Reorders the fields of a field set.","operationId":"reorderFormsFields","parameters":[{"name":"field_set_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ordered_field_ids":{"type":"array","items":{"type":"string"},"description":"An array of field IDs in the desired order."}}},"example":{"ordered_field_ids":[5,4,3,2,1]}}}},"404":{"description":"Not Found"}},"requestBody":{"description":"Reordering\n\n\nThe reordering endpoint expects an array of IDs in the desired order to be passed to the `ids_in_order` parameter. For example, `{ids_in_order: [1,2,3,4,5]}`.\n","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids_in_order":{"type":"array","items":{"type":"integer"},"description":"An array of field IDs in the desired order."}},"example":{"ids_in_order":[5,4,3,2,1]}},"example":{"ids_in_order":[5,4,3,2,1]}}}}}},"/forms/fields/{field_id}/options":{"get":{"tags":["Forms::Fields::Option"],"summary":"List Options","description":"List options for a field","operationId":"listFormsFieldsOptions","parameters":[{"name":"field_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","sort_order"]}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormsFieldsOptionAttributes"}},"example":[{"id":430,"public_id":"SOxIrU","field_id":146,"label":"Test Label","sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":433,"public_id":"usZlce","field_id":147,"label":"Test Label","sort_order":1,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Forms::Fields::Option"],"summary":"Create Option","description":"Add a new option to a field","operationId":"createFormsFieldsOptions","parameters":[{"name":"field_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Option","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_fields_option":{"type":"object","$ref":"#/components/schemas/FormsFieldsOptionParameters"}}},"example":{"forms_fields_option":{"label":"Test Label"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldsOptionAttributes"},"example":{"id":439,"public_id":"ZCDsAN","field_id":149,"label":"Test Label","sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/forms/fields/options/{id}":{"get":{"tags":["Forms::Fields::Option"],"summary":"Fetch Option","description":"Retrieve a option for a field","operationId":"getFormsFieldsOptions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldsOptionAttributes"},"example":{"id":436,"public_id":"bEavXk","field_id":148,"label":"Test Label","sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Forms::Fields::Option"],"summary":"Update Option","description":"Update a option for a field","operationId":"updateFormsFieldsOptions","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Option","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_fields_option":{"type":"object","$ref":"#/components/schemas/FormsFieldsOptionParametersUpdate"}}},"example":{"forms_fields_option":{"label":"Example Option"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsFieldsOptionAttributes"},"example":{"id":445,"public_id":"BkwumP","field_id":151,"label":"Test Label","sort_order":0,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Forms::Fields::Option"],"summary":"Remove Option","description":"Delete a option for a field","operationId":"removeFormsFieldsOptions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/forms/{form_id}/submissions":{"get":{"tags":["Forms::Submission"],"summary":"List Submissions","description":"List submissions for a form","operationId":"listFormsSubmissions","parameters":[{"name":"form_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormsSubmissionAttributes"}},"example":[{"id":70,"public_id":"SVWQCq","form_id":190,"contact_id":67,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":72,"public_id":"OpMkZx","form_id":194,"contact_id":68,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Forms::Submission"],"summary":"Create Submission","description":"Add a new submission to a form","operationId":"createFormsSubmissions","parameters":[{"name":"form_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Submission","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_submission":{"type":"object","$ref":"#/components/schemas/FormsSubmissionParameters"}}},"example":{"forms_submission":{"contact_id":5}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsSubmissionAttributes"},"example":{"id":76,"public_id":"XJBeoW","form_id":202,"contact_id":70,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/forms/submissions/{id}":{"get":{"tags":["Forms::Submission"],"summary":"Fetch Submission","description":"Retrieve a submission for a form","operationId":"getFormsSubmissions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsSubmissionAttributes"},"example":{"id":74,"public_id":"vXreot","form_id":198,"contact_id":69,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Forms::Submission"],"summary":"Update Submission","description":"Update a submission for a form","operationId":"updateFormsSubmissions","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Submission","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_submission":{"type":"object","$ref":"#/components/schemas/FormsSubmissionParametersUpdate"}}},"example":{"forms_submission":{"contact_id":5}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsSubmissionAttributes"},"example":{"id":80,"public_id":"uHDBPL","form_id":210,"contact_id":72,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Forms::Submission"],"summary":"Remove Submission","description":"Delete a submission for a form","operationId":"removeFormsSubmissions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/forms/submissions/{submission_id}/answers":{"get":{"tags":["Forms::Submissions::Answer"],"summary":"List Answers","description":"List answers for a submission","operationId":"listFormsSubmissionsAnswers","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormsSubmissionsAnswerAttributes"}},"example":[{"id":90,"public_id":"eYyCdk","submission_id":88,"field_id":196,"fields_option_id":579,"entry":"MyText","fields_option_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":93,"public_id":"DwJNUR","submission_id":90,"field_id":202,"fields_option_id":597,"entry":"MyText","fields_option_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Forms::Submissions::Answer"],"summary":"Create Answer","description":"Add a new answer to a submission","operationId":"createFormsSubmissionsAnswers","parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Answer","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_submissions_answer":{"type":"object","$ref":"#/components/schemas/FormsSubmissionsAnswerParameters"}}},"example":{"forms_submissions_answer":{"field_id":20,"fields_option_id":56,"entry":"MyText","fields_option_ids":[]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsSubmissionsAnswerAttributes"},"example":{"id":99,"public_id":"OmoJXl","submission_id":94,"field_id":214,"fields_option_id":633,"entry":"MyText","fields_option_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/forms/submissions/answers/{id}":{"get":{"tags":["Forms::Submissions::Answer"],"summary":"Fetch Answer","description":"Retrieve a answer for a submission","operationId":"getFormsSubmissionsAnswers","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsSubmissionsAnswerAttributes"},"example":{"id":96,"public_id":"uWNnHP","submission_id":92,"field_id":208,"fields_option_id":615,"entry":"MyText","fields_option_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Forms::Submissions::Answer"],"summary":"Update Answer","description":"Update a answer for a submission","operationId":"updateFormsSubmissionsAnswers","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Answer","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forms_submissions_answer":{"type":"object","$ref":"#/components/schemas/FormsSubmissionsAnswerParametersUpdate"}}},"example":{"forms_submissions_answer":{"field_id":123,"fields_option_id":56,"entry":"MyText","fields_option_ids":[]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormsSubmissionsAnswerAttributes"},"example":{"id":105,"public_id":"CuQXAd","submission_id":98,"field_id":226,"fields_option_id":669,"entry":"MyText","fields_option_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Forms::Submissions::Answer"],"summary":"Remove Answer","description":"Delete a answer for a submission","operationId":"removeFormsSubmissionsAnswers","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/form_submissions":{"get":{"tags":["FormSubmission"],"summary":"List Form Submissions","description":"List form submissions. This is a list of all form submissions for the workspace, including the submitted standard and custom fields. Please refer to the `Form` and `Forms::Submission` resources if you would like to submit forms programmatically.","operationId":"listFormSubmissions","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of form submission IDs to filter by.","example":"1,2,3"},"page_id":{"type":"string","description":"A comma-separated list of page IDs to filter by.","example":"32432,5544"},"contact_id":{"type":"string","description":"A comma-separated list of contact IDs to filter by.","example":"1,42"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FormSubmissionAttributes"}},"example":[{"id":2,"public_id":"CoSlPN","contact_id":85,"workspace_id":42000,"page_id":11,"created_at":null,"updated_at":null,"data":{"url":"/contact","first_name":"John","last_name":"Doe","email":"john@example.com"}},{"id":3,"public_id":"KeIAly","contact_id":86,"workspace_id":42000,"page_id":12,"created_at":null,"updated_at":null,"data":{"url":"/contact","first_name":"John","last_name":"Doe","email":"john@example.com"}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/form_submissions/{id}":{"get":{"tags":["FormSubmission"],"summary":"Fetch Form Submission","description":"Retrieve a form submission. This is a record of a form submission, including the submitted standard and custom fields. Please refer to the `Form` and `Forms::Submission` resources if you would like to submit forms programmatically.","operationId":"getFormSubmissions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FormSubmissionAttributes"},"example":{"id":4,"public_id":"WXjTzp","contact_id":87,"workspace_id":42000,"page_id":13,"created_at":null,"updated_at":null,"data":{"url":"/contact","first_name":"John","last_name":"Doe","email":"john@example.com"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/fulfillments":{"get":{"tags":["Fulfillment"],"summary":"List Fulfillments","description":"List all fulfillments for your workspace. You will find detailed information about fulfilling orders is in [our Fulfillments guide](https://developers.myclickfunnels.com/docs/fulfillments).","operationId":"listFulfillments","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FulfillmentAttributes"}},"example":[{"id":2,"public_id":"DhLZfz","workspace_id":42000,"contact_id":94,"status":"fulfilled","tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","location_id":3,"fulfillment_number":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_invoices_line_items":[{"id":2,"public_id":"OYMAYq","fulfillment_id":2,"quantity":1,"invoices_line_item_id":126}]},{"id":3,"public_id":"VyJdGW","workspace_id":42000,"contact_id":96,"status":"fulfilled","tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","location_id":4,"fulfillment_number":3,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_invoices_line_items":[{"id":3,"public_id":"fYmGhF","fulfillment_id":3,"quantity":1,"invoices_line_item_id":9}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Fulfillment"],"summary":"Create Fulfillment","description":"Fulfill an order or a part of an order. More information in [our Fulfillments guide](https://developers.myclickfunnels.com/docs/fulfillments).","operationId":"createFulfillments","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Fulfillment","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fulfillment":{"type":"object","$ref":"#/components/schemas/FulfillmentParameters"}}},"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}]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FulfillmentAttributes"},"example":{"id":5,"public_id":"skKpBz","workspace_id":42000,"contact_id":100,"status":"fulfilled","tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","location_id":6,"fulfillment_number":5,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_invoices_line_items":[{"id":5,"public_id":"ELzmHF","fulfillment_id":5,"quantity":1,"invoices_line_item_id":13}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/fulfillments/{id}":{"get":{"tags":["Fulfillment"],"summary":"Fetch Fulfillment","description":"Retrieve a specific fulfillment in the current workspace","operationId":"getFulfillments","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FulfillmentAttributes"},"example":{"id":4,"public_id":"hBjJrH","workspace_id":42000,"contact_id":98,"status":"fulfilled","tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","location_id":5,"fulfillment_number":4,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_invoices_line_items":[{"id":4,"public_id":"IVZNRO","fulfillment_id":4,"quantity":1,"invoices_line_item_id":11}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Fulfillment"],"summary":"Update Fulfillment","description":"Update a specific fulfillment.","operationId":"updateFulfillments","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Fulfillment","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fulfillment":{"type":"object","$ref":"#/components/schemas/FulfillmentParametersUpdate"}}},"example":{"fulfillment":{"tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","notify_customer":true}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FulfillmentAttributes"},"example":{"id":6,"public_id":"ewrCzq","workspace_id":42000,"contact_id":102,"status":"fulfilled","tracking_url":"https://usps.com/track/1234567890","shipping_provider":"USPS","tracking_code":"1234567890","location_id":7,"fulfillment_number":6,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","included_invoices_line_items":[{"id":6,"public_id":"iUkCru","fulfillment_id":6,"quantity":1,"invoices_line_item_id":15}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Fulfillment"],"summary":"Remove Fulfillment","description":"Remove Fulfillment","operationId":"removeFulfillments","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/fulfillments/{id}/cancel":{"post":{"tags":["Fulfillment"],"summary":"Cancel a Fulfillment","description":"This will cancel a Fulfillment. A Fulfillment can only be cancelled when it\u0026#39;s in a \u0026quot;fulfilled\u0026quot; state. The \u0026quot;cancelled\u0026quot; state is final.","operationId":"cancelFulfillments","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FulfillmentAttributes"},"example":{"id":1,"public_id":"dcbmDy","workspace_id":42000,"contact_id":8,"status":"cancelled","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}]}}}},"404":{"description":"Not Found"},"409":{"description":"Conflict - occurs if product is already cancelled."},"422":{"description":"Unprocessable Entity"}}}},"/workspaces/{workspace_id}/fulfillments/locations":{"get":{"tags":["Fulfillments::Location"],"summary":"List Locations","description":"List Locations","operationId":"listFulfillmentsLocations","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","sort_order"]}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FulfillmentsLocationAttributes"}},"example":[{"id":8,"public_id":"OcTvQz","workspace_id":42000,"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939695@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"}},{"id":9,"public_id":"ZxWBnk","workspace_id":42000,"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939695@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"}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Fulfillments::Location"],"summary":"Create Location","description":"Create Location","operationId":"createFulfillmentsLocations","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Location","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fulfillments_location":{"type":"object","$ref":"#/components/schemas/FulfillmentsLocationParameters"}}},"example":{"fulfillments_location":{"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939677@example.com","phone_number":"(123)-555-4567","archived":false}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FulfillmentsLocationAttributes"},"example":{"id":11,"public_id":"nKBJXf","workspace_id":42000,"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939695@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"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/fulfillments/locations/{id}":{"get":{"tags":["Fulfillments::Location"],"summary":"Fetch Location","description":"Fetch Location","operationId":"getFulfillmentsLocations","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FulfillmentsLocationAttributes"},"example":{"id":10,"public_id":"TfWGdk","workspace_id":42000,"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939695@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"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Fulfillments::Location"],"summary":"Update Location","description":"Update Location","operationId":"updateFulfillmentsLocations","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Location","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fulfillments_location":{"type":"object","$ref":"#/components/schemas/FulfillmentsLocationParametersUpdate"}}},"example":{"fulfillments_location":{"name":"Example Location","address_name":"Example Address","email_address":"myemail@example.com","phone_number":"(123)-555-4567","archived":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FulfillmentsLocationAttributes"},"example":{"id":13,"public_id":"oAyPCr","workspace_id":42000,"name":"Example Location","address_name":"Example Address","email_address":"myemail1754939695@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"}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Fulfillments::Location"],"summary":"Remove Location","description":"Remove Location","operationId":"removeFulfillmentsLocations","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/funnels":{"get":{"tags":["Funnel"],"summary":"List Funnels","description":"List Funnels","operationId":"listFunnels","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of funnel IDs to filter by.","example":"1,42"}}},"style":"deepObject","explode":true},{"$ref":"#/components/parameters/ExpandFunnelFields"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FunnelAttributes"}},"example":[{"id":3,"public_id":"RefvmT","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":4,"public_id":"qFvrak","name":"Example Funnel Tag","color":"#00FF00"}]},{"id":4,"public_id":"Anaptx","workspace_id":42000,"name":"Example Funnel","archived":false,"current_path":"/example-path","live_mode":true,"domain_id":null,"favicon_image_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","tags":[{"id":5,"public_id":"wJMVcO","name":"Example Funnel Tag","color":"#00FF00"}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Funnel"],"summary":"Create Funnel","description":"Create a new funnel in the workspace.\n\nCreating a funnel automatically creates a workflow. You can then add pages to the funnel by creating pages with `funnel.funnel_id` set to the new funnel's ID (see the Create Page endpoint).\n\n**Client flow for building a funnel with pages:**\n1. `POST /api/v2/workspaces/:id/funnels` — creates the funnel (workflow auto-created)\n2. `POST /api/v2/workspaces/:id/pages` with `{ page: { name: \"...\", funnel: { funnel_id: \"\u003cfunnel_id\u003e\" }, markup: \"\u003cPML string\u003e\" } }` — creates each page, auto-links it to the funnel, and applies the markup in one call\n3. `PATCH /api/v2/pages/:id` with `{ page: { markup: \"\u003cPML string\u003e\" } }` — applies or updates visual content (PML markup) on an existing page\n4. Steps 2 and 3 can be combined: passing `markup` in the create call sets the initial visual content without a separate PATCH\n\nThe internal step/workflow wiring is handled automatically — API clients never need to manage workflows or steps directly.\n","operationId":"createFunnel","externalDocs":{"description":"Funnels Skill - build and modify funnel workflows","url":"https://accounts.myclickfunnels.com/.well-known/funnels/skill.md"},"parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"funnel":{"$ref":"#/components/schemas/FunnelParametersCreate"}}},"example":{"funnel":{"name":"Example Funnel","current_path":"/example-funnel","live_mode":true,"tag_ids":[1,2]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelAttributes"},"example":{"id":10,"public_id":"AbCdEf","workspace_id":42000,"name":"Example Funnel","archived":false,"current_path":"/example-funnel","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":[]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - The workspace or record cannot be found."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Name can't be blank","hint":null}}}}}}},"/funnels/{id}":{"get":{"tags":["Funnel"],"summary":"Fetch Funnel","description":"Fetch Funnel","operationId":"getFunnels","parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandFunnelFields"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelAttributes"},"example":{"id":5,"public_id":"SgjNJM","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":6,"public_id":"rMxvpb","name":"Example Funnel Tag","color":"#00FF00"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Funnel"],"summary":"Update Funnel","description":"Update Funnel.\n\nYou can use head_code and footer_code parameters to inject custom code. Use head_code_mode and footer_code_mode to control whether code is appended or replaced.\n","operationId":"updateFunnels","externalDocs":{"description":"Funnels Skill - build and modify funnel workflows","url":"https://accounts.myclickfunnels.com/.well-known/funnels/skill.md"},"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandFunnelFields"}],"requestBody":{"description":"Information about updated fields in Funnel","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"funnel":{"type":"object","$ref":"#/components/schemas/FunnelParametersUpdate"}}},"example":{"funnel":{"name":"Example Funnel","live_mode":true,"head_code":"\u003cscript\u003econsole.log('funnel');\u003c/script\u003e","head_code_mode":"append"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelAttributes"},"example":{"id":8,"public_id":"VeGRjs","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":9,"public_id":"EQkhFg","name":"Example Funnel Tag","color":"#00FF00"}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: Invalid code mode 'invalid'. Must be 'append' or 'replace'.","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/funnels/{id}/structure":{"get":{"tags":["Funnel"],"summary":"Fetch Funnel Structure","description":"A funnel's steps as a single, flat, ordered list — the same top‑to‑bottom flow you see in the funnel builder. Use it to read or visualize how a funnel is laid out.\n\nEach entry in `steps` is one of three kinds:\n\n- **`show_page_step`** — a page. Includes `page` (its `name`, `url`, and the `external` / `sdk_token` flags for externally‑hosted SDK pages) and `show_page_step_id` — the id you hand back as `funnel.show_page_step_id` to swap a page onto this step.\n- **`split_test_step`** — an A/B test: a `variants` list, each with a `weight` and its own `steps`.\n- **`conditional_split_step`** — routing by a saved contact filter: a `branches` list, always `[matched, unmatched]`, each with its own `steps`.\n\nSplits can nest — a split placed inside a branch shows up inside that branch's `steps`.\n\n**Two things to know when reading it:**\n\n1. **Follow the array order, not `sort_order`.** `sort_order` only numbers a step within its own list, so it repeats across branches and after splits — in the example below the top level runs `0, 1, 0, 1`. The array order is the real sequence. (Separately: when you *create* a step, the `sort_order` you send positions it among the funnel's top‑level steps.)\n2. **Branches come back together.** A branch lists only its own steps; afterwards the flow continues at the step right after the split, and every branch ends up there. In the example below, both branches lead on to `Order Form → Thank You`. A split with nothing after it ends the funnel.\n\nThe `200` example below is this funnel:\n\n```text\nEntry\n└─ Conditional Split\n   ├─ matched:     VIP Welcome   → Split Test ( Premium Offer A 50% / Premium Offer B 50% )\n   └─ unmatched: Guest Welcome → Conditional Split ( Returning Customer / New Customer )\n→ Order Form → Thank You          (every path comes back together here)\n```\n\nRelated: the [Pages skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#positioning-a-page-within-a-funnel) (create, position, and swap pages) and the [Funnels skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md) (add split tests and conditional splits). When migrating externally-hosted pages to a new domain, this is the read that inventories them: see [Migrate an External Page Domain](https://accounts.myclickfunnels.com/.well-known/sdk/migrate-external-page-domain/skill.md#2-read-and-recursively-inventory-the-funnel).\n","operationId":"getFunnelStructure","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"funnel":{"type":"object","properties":{"id":{"type":"integer","description":"Funnel ID"},"public_id":{"type":"string","description":"Funnel public ID"},"name":{"type":"string","description":"Funnel name"}}},"steps":{"type":"array","description":"The funnel's visible steps in order (no internal container steps).","items":{"type":"object","description":"A step node. Common fields plus type-specific fields keyed off `step_type`:\n- `show_page_step`: + `show_page_step_id` + `page` object.\n- `conditional_split_step`: + `convergence_step_id` + `branches` array (each branch has a flat `steps` array).\n- `split_test_step`: + `convergence_step_id` + `variants` array (each variant has a `weight` and a flat `steps` array).\n","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"step_type":{"type":"string","example":"show_page_step"},"name":{"type":"string"},"sort_order":{"type":"integer","description":"Position within this step's own container (the top-level sequence, or a single branch/variant) — not globally unique across the flattened list. Walk `steps` in array order to read the visible sequence."},"convergence_step_id":{"type":["integer","null"],"description":"Split steps only. Id of the step where this split's branches/variants reconverge — the first step that runs after the split, which every path continues to (in the example below all paths rejoin at the Order Form, id 696). null when nothing follows the split. The referenced step always appears in this tree."},"show_page_step_id":{"type":"string","description":"show_page_step only — the function public id accepted by `funnel.show_page_step_id` on Create/Update Page."},"page":{"type":["object","null"],"description":"show_page_step only.","properties":{"id":{"type":"integer"},"public_id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"},"external":{"type":"boolean"},"sdk_token":{"type":["string","null"],"description":"Always present; `null` unless `external` is true."}}},"branches":{"type":"array","description":"conditional_split_step only. Always `[matched, unmatched]`; each branch carries its own flat `steps` array.","items":{"type":"object","properties":{"branch":{"type":"string","enum":["matched","unmatched"]},"steps":{"type":"array","items":{"type":"object"}}}}},"variants":{"type":"array","description":"split_test_step only. Each variant carries a `weight` and its own flat `steps` array.","items":{"type":"object","properties":{"weight":{"type":"integer"},"steps":{"type":"array","items":{"type":"object"}}}}}}}}}},"example":{"funnel":{"id":83,"public_id":"MjngvY","name":"Coaching Upsell Funnel"},"steps":[{"id":689,"public_id":"zvbpDJ","step_type":"show_page_step","name":"Entry","sort_order":0,"show_page_step_id":"qelNpj","page":{"id":1395,"public_id":"JXkbke","name":"Entry","url":"https://acme.myclickfunnels.com/entry","external":false,"sdk_token":null}},{"id":691,"public_id":"RvppEv","step_type":"conditional_split_step","name":"Conditional Split Step","sort_order":1,"convergence_step_id":696,"branches":[{"branch":"matched","steps":[{"id":698,"public_id":"mjLGPJ","step_type":"show_page_step","name":"VIP Welcome","sort_order":0,"show_page_step_id":"KvXWoj","page":{"id":1398,"public_id":"eLQBxJ","name":"VIP Welcome","url":"https://acme.myclickfunnels.com/vip-welcome","external":false,"sdk_token":null}},{"id":700,"public_id":"bJYaaJ","step_type":"split_test_step","name":"Split Test Step","sort_order":1,"convergence_step_id":696,"variants":[{"weight":50,"steps":[{"id":705,"public_id":"peWaZj","step_type":"show_page_step","name":"Premium Offer A","sort_order":0,"show_page_step_id":"nedgRv","page":{"id":1399,"public_id":"YZxdvJ","name":"Premium Offer A","url":"https://acme.myclickfunnels.com/premium-offer-a","external":false,"sdk_token":null}}]},{"weight":50,"steps":[{"id":706,"public_id":"GjPaMv","step_type":"show_page_step","name":"Premium Offer B","sort_order":0,"show_page_step_id":"QjqPwJ","page":{"id":1400,"public_id":"eNwqOJ","name":"Premium Offer B","url":"https://acme.myclickfunnels.com/premium-offer-b","external":false,"sdk_token":null}}]}]}]},{"branch":"unmatched","steps":[{"id":707,"public_id":"gvDxwv","step_type":"show_page_step","name":"Guest Welcome","sort_order":0,"show_page_step_id":"mjLnle","page":{"id":1401,"public_id":"JvAxxe","name":"Guest Welcome","url":"https://acme.myclickfunnels.com/guest-welcome","external":false,"sdk_token":null}},{"id":709,"public_id":"zvBmoj","step_type":"conditional_split_step","name":"Conditional Split Step","sort_order":1,"convergence_step_id":696,"branches":[{"branch":"matched","steps":[{"id":714,"public_id":"RJgzge","step_type":"show_page_step","name":"Returning Customer","sort_order":0,"show_page_step_id":"BJZDgv","page":{"id":1402,"public_id":"JMaBdJ","name":"Returning Customer","url":"https://acme.myclickfunnels.com/returning-customer","external":false,"sdk_token":null}}]},{"branch":"unmatched","steps":[{"id":715,"public_id":"MJnGwj","step_type":"show_page_step","name":"New Customer","sort_order":0,"show_page_step_id":"bJYPle","page":{"id":1403,"public_id":"ekMPlj","name":"New Customer","url":"https://acme.myclickfunnels.com/new-customer","external":false,"sdk_token":null}}]}]}]}]},{"id":696,"public_id":"nedpqe","step_type":"show_page_step","name":"Order Form","sort_order":0,"show_page_step_id":"bjQQxj","page":{"id":1396,"public_id":"jdwnWJ","name":"Order Form","url":"https://acme.myclickfunnels.com/order-form","external":false,"sdk_token":null}},{"id":697,"public_id":"QjqpkJ","step_type":"show_page_step","name":"Thank You","sort_order":1,"show_page_step_id":"AvagVJ","page":{"id":1397,"public_id":"eqRWGJ","name":"Thank You","url":"https://acme.myclickfunnels.com/thank-you--16413","external":false,"sdk_token":null}}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/funnels/{funnel_id}/stats":{"get":{"tags":["Funnel"],"summary":"Fetch Funnel Stats","description":"Retrieve detailed statistics for a funnel, including a summary of key metrics\nand optional per-step breakdowns of views, opt-ins, sales, and earnings.\n\nDefaults to a 30-day timerange ending now. Override with `timerange_start` and\n`timerange_end`. Timerange values are automatically clamped: future end dates\nare clamped to now, windows exceeding 90 days are clamped to 90 days, and if\nstart is after end the window resets to 30 days ending at `timerange_end`.\n\nBy default the response includes a `page_public_ids` array. Use\n`expand[]=steps` to receive a `steps` array with per-step metrics instead.\n\nThe metric names in the response are defined in [Metric vocabulary](https://accounts.myclickfunnels.com/.well-known/stats/skill.md#metric-vocabulary) in the [Stats Skill](https://accounts.myclickfunnels.com/.well-known/stats/skill.md), which also walks a [recurring funnel auditor agent](https://accounts.myclickfunnels.com/.well-known/stats/skill.md#example-use-case---recurring-funnel-auditor-agent) built on this endpoint.\n","operationId":"getFunnelStats","externalDocs":{"description":"Stats Skill - funnel stats","url":"https://accounts.myclickfunnels.com/.well-known/stats/skill.md#funnel-stats"},"parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/StatsTimerangeStart"},{"$ref":"#/components/parameters/StatsTimerangeEnd"},{"$ref":"#/components/parameters/ExpandFunnelStatsFields"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelStatsAttributes"},"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,"optins":38,"optins_unique":27},"page_public_ids":["NnAdPE","kJzvQi"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — a timerange parameter is not a real date or time. Unparseable\nvalues and calendar dates that do not exist (2026-02-31) are refused rather than\nsilently answered with a different window.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: timerange_start '2026-13-01' is not a valid date or time. Use an ISO 8601 value, e.g. 2026-09-01T00:00:00Z.","hint":null}}}}}}},"/funnels/{funnel_id}/split_test_steps":{"get":{"tags":["Funnels::SplitTestStep"],"summary":"List Split Test Steps","description":"List all split test steps in a funnel. Each split test wraps an existing page in a\ntwo-branch split and optionally attaches a second page.\n\nSee the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#split-test-steps) for the full split-test surface.\n","operationId":"listFunnelSplitTestSteps","parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"split_test_steps":{"type":"array","items":{"$ref":"#/components/schemas/SplitTestStepAttributes"}}}},"example":{"split_test_steps":[{"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"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Funnels::SplitTestStep"],"summary":"Create Split Test Step","description":"Wrap an existing page in a new split test. Provide one variant to wrap a single page\n(the second branch starts empty and can be attached later via PATCH), or two variants\nto wrap a page and attach a fresh page as the second branch. The API never clones\npages — the second variant's page must not already be used by any funnel step.\n\nSee the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#split-test-steps) for the full split-test surface.\n","operationId":"createFunnelSplitTestStep","externalDocs":{"description":"Funnels Skill - split test steps","url":"https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#split-test-steps"},"parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitTestStepParametersCreate"},"example":{"split_test_step":{"variants":[{"page_id":500,"weight":60},{"page_id":501,"weight":40}],"show_page_step_id":100}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitTestStepAttributes"},"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: split_test_step.variants[0].page_id does not belong to this funnel","hint":null}}}}}}},"/funnels/{funnel_id}/split_test_steps/{id}":{"get":{"tags":["Funnels::SplitTestStep"],"summary":"Fetch Split Test Step","description":"Fetch a single split test step with its variants and weights.","operationId":"getFunnelSplitTestStep","parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitTestStepAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Funnels::SplitTestStep"],"summary":"Update Split Test Step","description":"Update a split test's variants: attach a page to an empty branch, swap an existing\nvariant's page, or adjust the weights. The `variants` array length must equal the\nnumber of branches in the split test (2 for the standard binary case).\n\n- Weight rules: if *any* variant provides `weight`, all variants must provide it and\n  the values must be integers 0..100 summing to 100. If *none* provide weight, weights\n  stay unchanged.\n- Page-id rules per variant:\n  - Equal to current `page_id` → no-op.\n  - Branch currently empty + new `page_id` provided → attach.\n  - Branch currently has a page + new different `page_id` → swap (old step destroyed).\n  - `page_id: null` or blank is rejected (detach is out of scope — use DELETE with\n    `branch` parameter instead).\n- Any page being attached/swapped-in must: (a) be in the same workspace, (b) be a\n  `user_page`, and (c) have no existing `ShowPageStep` anywhere in any funnel.\n","operationId":"updateFunnelSplitTestStep","externalDocs":{"description":"Funnels Skill - split test steps","url":"https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#split-test-steps"},"parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitTestStepParametersUpdate"},"example":{"split_test_step":{"variants":[{"page_id":500,"weight":70},{"page_id":501,"weight":30}]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitTestStepAttributes"},"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: split_test_step.variants[1].page_id is already used by another funnel step","hint":null}}}}}},"delete":{"tags":["Funnels::SplitTestStep"],"summary":"Destroy Split Test Step","description":"Remove a split test from the funnel.\n\n**A 1-branch split test is not a supported state**, so any value of\n`branch` collapses the entire split:\n\n- `DELETE /funnels/{funnel_id}/split_test_steps/{id}` (default `branch=both`)\n  → removes the entire split test, both branches discarded.\n- `DELETE /funnels/{funnel_id}/split_test_steps/{id}?branch=left` → removes\n  the entire split test; the **right** branch's pages are promoted up\n  under the split's parent so they remain attached to the funnel's main\n  workflow.\n- `DELETE /funnels/{funnel_id}/split_test_steps/{id}?branch=right` →\n  removes the entire split test; the **left** branch's pages are\n  promoted up under the split's parent.\n\nSee [Destroying a split test](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#destroying-a-split-test) in the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md) for how the collapse fits into the rest of the split-test surface.\n","operationId":"destroyFunnelSplitTestStep","parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"branch","in":"query","required":false,"description":"Optional branch to remove. One of `left`, `right`, or `both` (default).","schema":{"type":"string","enum":["left","right","both"]}}],"responses":{"204":{"description":"No Content"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/funnels/{funnel_id}/conditional_split_steps":{"get":{"tags":["Funnels::ConditionalSplitStep"],"summary":"List Conditional Split Steps","description":"List all conditional split steps in a funnel. Each entry exposes its `condition`\n(filter_id + is_setup) and 2-entry `branches` array (`[matched, unmatched]`).\n\nPass `expand[]=filter` to include the full RefineFilter object nested under\n`condition.filter` for each step. On the show endpoint (`GET /{id}`) the filter is\nalways included without needing the expand param.\n\nSee the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#conditional-split-steps) for the full conditional-split surface.\n","operationId":"listFunnelConditionalSplitSteps","parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"expand[]","in":"query","required":false,"description":"Pass `filter` to include the full RefineFilter object in `condition.filter` for each step.","schema":{"type":"string","enum":["filter"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"conditional_split_steps":{"type":"array","items":{"$ref":"#/components/schemas/ConditionalSplitStepAttributes"}}}},"example":{"conditional_split_steps":[{"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"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Funnels::ConditionalSplitStep"],"summary":"Create Conditional Split Step","description":"Add a new conditional split step to a funnel. All fields are optional — providing\nnone creates an empty unconfigured split. Provide `condition` to set the contact\nfilter, `branches` to attach pages to one or both branches, and/or\n`show_page_step_id` to position the split in the workflow.\n\nSee the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#conditional-split-steps) for the full surface.\n","operationId":"createFunnelConditionalSplitStep","externalDocs":{"description":"Funnels Skill - conditional split steps","url":"https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#conditional-split-steps"},"parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConditionalSplitStepParametersCreate"},"example":{"conditional_split_step":{"condition":{"filter_id":"AbCdEf"},"branches":[{"page_ids":[600,601,602]},{"page_ids":[603]}],"show_page_step_id":100}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConditionalSplitStepAttributes"},"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: condition.filter_id must be a stable identifier, not a raw numeric id","hint":null}}}}}}},"/funnels/{funnel_id}/conditional_split_steps/{id}":{"get":{"tags":["Funnels::ConditionalSplitStep"],"summary":"Fetch Conditional Split Step","description":"Fetch a single conditional split step with its branches and condition.","operationId":"getFunnelConditionalSplitStep","parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConditionalSplitStepAttributes"},"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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Funnels::ConditionalSplitStep"],"summary":"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- Branches array must have 2 entries (matched, unmatched). Each entry may carry a\n  `page_id` to attach (currently empty branch) or swap (currently populated branch).\n  Any page being attached / swapped-in must be a fresh `user_page` in the same\n  workspace with no existing `ShowPageStep`.\n","operationId":"updateFunnelConditionalSplitStep","externalDocs":{"description":"Funnels Skill - conditional split steps","url":"https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#conditional-split-steps"},"parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConditionalSplitStepParametersUpdate"},"example":{"conditional_split_step":{"condition":{"filter_id":"AbCdEf"},"branches":[{"page_ids":[600,601,602]},{"page_id":603}]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConditionalSplitStepAttributes"},"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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: conditional_split_step.branches[0].page_id is already used by another funnel step","hint":null}}}}}},"delete":{"tags":["Funnels::ConditionalSplitStep"],"summary":"Destroy Conditional Split Step","description":"Remove a conditional split from the funnel.\n\n**A 1-branch conditional split is not a supported state**, so any value\nof `branch` collapses the entire split:\n\n- `DELETE /funnels/{funnel_id}/conditional_split_steps/{id}` (default\n  `branch=both`) → removes the entire conditional split, both branches\n  discarded.\n- `DELETE /funnels/{funnel_id}/conditional_split_steps/{id}?branch=matched`\n  → removes the entire conditional split; the **unmatched** branch's\n  pages are promoted up under the split's parent so they remain\n  attached to the funnel's main workflow.\n- `DELETE /funnels/{funnel_id}/conditional_split_steps/{id}?branch=unmatched`\n  → removes the entire conditional split; the **matched** branch's\n  pages are promoted up under the split's parent.\n\nSee [Destroying a conditional split](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md#destroying-a-conditional-split) in the [Funnels Skill](https://accounts.myclickfunnels.com/.well-known/funnels/skill.md) for how the collapse fits into the rest of the conditional-split surface.\n","operationId":"destroyFunnelConditionalSplitStep","parameters":[{"name":"funnel_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"branch","in":"query","required":false,"description":"Optional branch to remove. One of `matched`, `unmatched`, or `both` (default).","schema":{"type":"string","enum":["matched","unmatched","both"]}}],"responses":{"204":{"description":"No Content"},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/funnels/tags":{"get":{"tags":["Funnels::Tag"],"summary":"List Tags","description":"List Tags","operationId":"listFunnelsTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of funnel tag IDs to filter by.","example":"1,42"},"name":{"type":"string","description":"A comma-separated list of funnel tag names to filter by.","example":"cool-funnel,gold"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FunnelsTagAttributes"}},"example":[{"id":13,"public_id":"ASRFDJ","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"},{"id":14,"public_id":"BOLSTF","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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Funnels::Tag"],"summary":"Create Tag","description":"Create Tag","operationId":"createFunnelsTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"funnels_tag":{"type":"object","$ref":"#/components/schemas/FunnelsTagParameters"}}},"example":{"funnels_tag":{"name":"Example Funnel Tag","color":"#FF5733"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelsTagAttributes"},"example":{"id":16,"public_id":"kWtTdf","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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/funnels/tags/{id}":{"get":{"tags":["Funnels::Tag"],"summary":"Fetch Tag","description":"Fetch Tag","operationId":"getFunnelsTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelsTagAttributes"},"example":{"id":15,"public_id":"JeoWrf","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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Funnels::Tag"],"summary":"Update Tag","description":"Update Tag","operationId":"updateFunnelsTags","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"funnels_tag":{"type":"object","$ref":"#/components/schemas/FunnelsTagParametersUpdate"}}},"example":{"funnels_tag":{"name":"Example Funnel Tag","color":"#FF5733"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunnelsTagAttributes"},"example":{"id":18,"public_id":"tipucD","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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Funnels::Tag"],"summary":"Remove Tag","description":"Remove Tag","operationId":"removeFunnelsTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/images":{"get":{"tags":["Image"],"summary":"List Images","description":"List Images","operationId":"listImages","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ImageAttributes"}},"example":[{"id":106,"public_id":"jzMhsw","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"},{"id":107,"public_id":"TZjQMt","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"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Image"],"summary":"Create Image","description":"Create Image","operationId":"createImages","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Image","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"image":{"type":"object","$ref":"#/components/schemas/ImageParameters"}}},"example":{"image":{"alt_text":"Alt text of the image","name":"Amazing Shot","upload_source_url":"https://image-hosting-x.com/cdn/123"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageAttributes"},"example":{"id":109,"public_id":"mjlqeI","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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/images/{id}":{"get":{"tags":["Image"],"summary":"Fetch Image","description":"Fetch Image","operationId":"getImages","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageAttributes"},"example":{"id":108,"public_id":"liUmdt","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"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Image"],"summary":"Update Image","description":"Update Image","operationId":"updateImages","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Image","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"image":{"type":"object","$ref":"#/components/schemas/ImageParametersUpdate"}}},"example":{"image":{"alt_text":"Alt text of the image","name":"Amazing Shot","upload_source_url":"https://image-hosting-x.com/cdn/123"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageAttributes"},"example":{"id":111,"public_id":"GZazJR","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"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Image"],"summary":"Remove Image","description":"Remove Image","operationId":"removeImages","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/{order_id}/applied_tags":{"get":{"tags":["Orders::AppliedTag"],"summary":"List Applied Tags","description":"List the applied tags for an order","operationId":"listOrdersAppliedTags","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrdersAppliedTagAttributes"}},"example":[{"id":2,"public_id":"lEKehP","order_id":13,"tag_id":16,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":3,"public_id":"OqpYlF","order_id":14,"tag_id":18,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Orders::AppliedTag"],"summary":"Create Applied Tag","description":"Assign a tag to an order by creating an applied tag","operationId":"createOrdersAppliedTags","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Applied Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orders_applied_tag":{"type":"object","$ref":"#/components/schemas/OrdersAppliedTagParameters"}}},"example":{"orders_applied_tag":{"tag_id":4}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersAppliedTagAttributes"},"example":{"id":5,"public_id":"nJDRra","order_id":16,"tag_id":22,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/orders/applied_tags/{id}":{"get":{"tags":["Orders::AppliedTag"],"summary":"Fetch Applied Tag","description":"Retrieve an applied tag for an order","operationId":"getOrdersAppliedTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersAppliedTagAttributes"},"example":{"id":4,"public_id":"HTKRAQ","order_id":15,"tag_id":20,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Orders::AppliedTag"],"summary":"Remove Applied Tag","description":"Remove a tag from an order by deleting an applied tag","operationId":"removeOrdersAppliedTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/orders":{"get":{"tags":["Order"],"summary":"List Orders","description":"List all orders for the current workspace. Please refer to [our Orders Overview guide](https://developers.myclickfunnels.com/docs/orders) for more information about the different types of orders and payment processors. To apply an order filter that already exists in ClickFunnels, pass `stored_filter_id` or `stable_id`, see [Applying existing order filters](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-existing-order-filters) in the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md).","operationId":"listOrders","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"stored_filter_id","in":"query","required":false,"schema":{"type":"string"},"description":"The `id` (integer) or `public_id` (string) of a saved order filter scoped to this workspace. Existing saved filters can be discovered with `GET /api/v2/workspaces/{workspace_id}/refine_filters`; choose an entry whose `filter_class` is `OrdersFilter`. Applies the saved filter's criteria to the results, composed (AND) with any `filter[...]` params.\nReturns 422 if the filter is unknown, invalid, belongs to a different workspace, or is not an order filter. When both `stored_filter_id` and `stable_id` are supplied, `stable_id` takes precedence."},{"name":"stable_id","in":"query","required":false,"schema":{"type":"string"},"description":"A URL-encoded Refine `stable_id` token copied from a filtered ClickFunnels Orders page. Send it as a normally encoded query parameter; do not decode it or concatenate its raw value into a URL. Applies the encoded order-filter criteria to the results, composed (AND) with any `filter[...]` params.\nReturns 422 if the token is malformed, is not an order filter, mixes `and`/`or` across its conditions, or references records outside this workspace. Flat filters and grouped filters using a single conjunction (including tokens copied from the filtered Orders UI) are supported; mixing the two words is rejected whether or not the token groups its criteria, because a flat filter cannot express it. When both selectors are supplied, `stable_id` takes precedence.\nSee [Applying existing order filters](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-existing-order-filters) in the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md) for where to copy this token from and how to send it."},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"contact_id":{"type":"string","description":"A comma-separated list of Contact IDs to filter by.","example":"1,42"},"id":{"type":"string","description":"A comma-separated list of Order IDs to filter by.","example":"1,42"},"order_type":{"type":"string","description":"The order type to filter by.","enum":["subscription-order","one-time-order"],"example":"subscription-order"},"live_mode":{"type":"boolean","description":"Filter by live vs test orders: true for live/production orders, false for test orders.","example":false}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrderAttributes"}},"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,"renewal_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,"deleted_at":null,"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}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — `stored_filter_id` is unknown, invalid, belongs to a different workspace, or is not an order filter; or `stable_id` is malformed, is not an order filter, mixes `and`/`or` across its conditions, or references records outside this workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"stable_id is not a valid serialized filter","hint":null}}}}}},"post":{"tags":["Order"],"summary":"Create External Order","description":"Create a new [external order](https://developers.myclickfunnels.com/docs/orders#external-orders) in the current workspace. This is useful if you process payments outside of ClickFunnels, but still want to make use of ClickFunnels\u0026#39; automations and funnels. You can gain even more functionality by creating invoices for your new orders. It is currently only possible to create invoices with the \u0026#39;external\u0026#39; payment processor type. Other payment processors like \u0026#39;payments_ai\u0026#39; are not yet supported. Refer to the corresponding guide for more information [here](https://developers.myclickfunnels.com/docs/orders#external-orders).","operationId":"createOrders","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Order","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"order":{"type":"object","$ref":"#/components/schemas/OrderParameters"}}},"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"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderAttributes"},"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,"renewal_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,"deleted_at":null,"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}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"}}}},"/orders/{id}":{"get":{"tags":["Order"],"summary":"Fetch Order","description":"Retrieve a specific order in the current workspace. Please refer to [our Orders Overview guide](https://developers.myclickfunnels.com/docs/orders) for more information about the different types of orders and payment processors.","operationId":"getOrders","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderAttributes"},"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,"renewal_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,"deleted_at":null,"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}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Order"],"summary":"Update Order","description":"Update a specific order in the current workspace. [External orders](https://developers.myclickfunnels.com/docs/orders#external-orders) have different updateable fields than orders that have a regular payment processor like Payments AI or Stripe.\n\nUse `trial_end_at` or `renewal_at` to adjust a processor-managed subscription's dates. Both\ntake absolute RFC 3339 timestamps. A change whose exact requested value the processor confirmed\nreturns `200`; an accepted change whose exact requested value ClickFunnels could not confirm\nreturns `202`; a rejected or unapplied change returns `422`. Updates without schedule fields\nreturn `200`.\n\nFor an actual schedule change, on `200` as well as `202` the order in the response will carry\nthe pre-change `trial_end_at` / `renewal_at`: the dates are applied at the payment processor\nrather than stored, and the local columns settle when its sync lands. Keep the pre-request value\nand poll `GET /orders/{id}` with backoff. After `200`, wait for the timestamp you sent, comparing\nparsed instants at whole-second precision rather than timestamp strings. After `202`, wait for\nthe field to differ from its pre-request value, then use the returned value as the effective\nschedule. Choose your own timeout because there is no fixed settlement deadline. If it expires,\nthe outcome is unknown, not failed; do not retry the `PATCH` blindly. A schedule change never\nre-dates an invoice that has already been issued, so confirm it on the order's dates rather than\non an invoice period.\n\nTo stop a subscription from renewing, use `POST /orders/{id}/cancel` (see [Cancel a subscription](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#cancel-a-subscription) in the [Orders Skill](https://accounts.myclickfunnels.com/.well-known/orders/skill.md)).","operationId":"updateOrders","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Order","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"order":{"type":"object","$ref":"#/components/schemas/OrderParametersUpdate"}}},"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"}}}}},"responses":{"200":{"description":"OK - for an ordinary update, the order as stored. For a schedule change, the payment\nprocessor confirmed the `trial_end_at` / `renewal_at` you sent, but the returned order will\nstill show the pre-change values, because the dates live at the processor and the local\ncolumns settle when its sync lands. Poll `GET /orders/{id}` with backoff until the field\nequals the timestamp you sent, comparing parsed instants at whole-second precision rather\nthan timestamp strings. Choose your own timeout because there is no fixed settlement\ndeadline. If it expires, the outcome is unknown, not failed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderAttributes"},"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,"renewal_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,"deleted_at":null,"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}}}},"202":{"description":"Accepted - the payment processor took the schedule change, but ClickFunnels could not confirm\nthe exact value requested. The processor may have returned no schedule value, as on Stripe, or\na different effective value. As on `200`, the returned order will still show the pre-change\n`trial_end_at` / `renewal_at`. Keep that pre-request value and poll `GET /orders/{id}` with\nbackoff until the field differs, then use the returned value as the effective schedule. A\ncaller timeout means the outcome is unknown, not failed; do not retry the `PATCH` blindly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderAttributes"},"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,"renewal_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,"deleted_at":null,"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}}}},"422":{"description":"Unprocessable Entity - the request was understood but not performed. Nothing was changed, locally or at the payment processor, so it is safe to correct the request and retry.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"not_in_trial":{"summary":"trial_end_at sent for a converted subscription, whose trial end has passed","value":{"error":"Request unprocessable: trial_end_at can only be adjusted while the order is in a trial (this order is active)","hint":null}},"not_in_trial_companion_available":{"summary":"trial_end_at sent alone for a pending order that is not yet in a trial","value":{"error":"Request unprocessable: trial_end_at can only be adjusted while the order is in a trial (this order is pending); to end the trial as part of a renewal move, send renewal_at with the same timestamp","hint":null}},"renewal_before_trial_end":{"summary":"renewal_at would bill a contact who is still in a trial","value":{"error":"Request unprocessable: renewal_at (2026-09-05T12:00:00Z) is before the trial ends (2026-09-24T12:00:00Z), which would bill the contact while they are still in a trial. Send trial_end_at in the same request to end the trial at that date too.","hint":null}},"mismatched_pair":{"summary":"Both fields sent at different timestamps","value":{"error":"Request unprocessable: renewal_at and trial_end_at must be the same timestamp when sent together, because the renewal follows the trial end. To land the renewal after the trial ends, send trial_end_at first, re-read the order until it shows the effective new trial end, then send renewal_at in a second request.","hint":null}},"renewal_unsupported":{"summary":"renewal_at sent for a Stripe order","value":{"error":"Request unprocessable: renewal_at cannot be adjusted on a Stripe order; Stripe has no renewal date to move. Move trial_end_at instead while the order is still in a trial.","hint":null}},"not_a_timestamp":{"summary":"A schedule field that is blank or unparseable","value":{"error":"Request unprocessable: trial_end_at must be a valid ISO8601 timestamp carrying a date, a time of day and a UTC offset (RFC 3339), for example 2026-09-11T12:00:00Z","hint":null}},"in_the_past":{"summary":"A schedule field pointing into the past","value":{"error":"Request unprocessable: renewal_at must be in the future","hint":null}},"processor_rejected":{"summary":"The payment processor rejected the change","value":{"error":"Request unprocessable: The payment processor rejected the schedule change: Subscription update rejected","hint":null}},"processor_no_op":{"summary":"The processor reported success but left the value where it was","value":{"error":"Request unprocessable: The payment processor did not apply the change; trial_end_at remains 2026-07-29T20:14:49Z","hint":null}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/{id}/cancel":{"post":{"tags":["Order"],"summary":"Cancel Order","description":"Cancel a subscription order through ClickFunnels' own cancel path (the same path the\nin-app \"Cancel subscription\" flow uses) so the cancelation actually propagates to the\npayment processor (Payments AI/Rebilly or Stripe). A direct `PATCH /orders/{id}` write\nof `service_status: canceled` is a no-op for processor-managed orders, which is why this\naction exists.\n\nOnly Payments AI and Stripe subscription orders can be canceled. Calling this on a\none-time order or an external subscription returns a 422. Please refer to [our Orders\nOverview guide](https://developers.myclickfunnels.com/docs/orders) for more information\nabout the different types of orders and payment processors.\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 the\nrequest body, the accepted `cancel_reason` values per processor, and a [worked example](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#worked-example---cancel-then-confirm)\nthat confirms the scheduled churn.\n","operationId":"cancelOrder","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Optional cancelation parameters. Omit the request body entirely (or send `{\"order\": {}}`) to cancel with defaults.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"order":{"type":"object","$ref":"#/components/schemas/OrderParametersCancel"}}},"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":[]}}}}},"responses":{"200":{"description":"OK - the payment processor accepted the cancellation. The returned order is the latest local snapshot. Processor-populated fields such as `canceled_at`, `cancel_reason`, `cancel_description`, `churned_at`, and the final `service_status` can arrive in a later webhook; poll `GET /orders/{id}` when those fields are not yet populated. The caller-provided `canceled_by` value is persisted before that asynchronous sync and remains stable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderAttributes"},"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,"renewal_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,"deleted_at":null,"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}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found — the order does not exist, or does not belong to a workspace your API key can access.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}},"422":{"description":"Unprocessable Entity. See [Common errors](https://accounts.myclickfunnels.com/.well-known/orders/skill.md#common-errors) in the [Orders Skill](https://accounts.myclickfunnels.com/.well-known/orders/skill.md) for what each of these means and how to resolve it.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"not_a_subscription":{"summary":"Order is not a subscription","value":{"error":"Request unprocessable: Only subscription orders can be canceled","hint":null}},"external_subscription":{"summary":"External subscriptions do not have a supported processor cancel path","value":{"error":"Request unprocessable: External subscription orders cannot be canceled through this endpoint","hint":null}},"invalid_cancel_reason":{"summary":"cancel_reason is not accepted by the order's payment processor","value":{"error":"Request unprocessable: Invalid reason 'definitely-not-a-real-reason'. Valid values: customer_service, low_quality, missing_features, other, switched_service, too_complex, too_expensive, unused","hint":null}},"processor_rejected":{"summary":"The payment processor rejected the cancellation","value":{"error":"Request unprocessable: Rebilly rejected the cancellation","hint":null}}}}}}}}},"/workspaces/{workspace_id}/orders/invoices/restocks":{"get":{"tags":["Orders::Invoices::Restock"],"summary":"List Restocks","description":"List Restocks","operationId":"listRestocks","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","title":"Restocks","description":"Restocks","properties":{"id":{"type":"integer","description":"Restock ID"},"public_id":{"type":["string","null"],"description":"Public Restock ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"contact_id":{"type":"integer","description":"Contact ID"},"status":{"type":"string","enum":["cancelled","restocked"],"description":"Status"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created At Date"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated At Date"},"included_invoices_line_items":{"type":["array","null"],"items":{"type":"object","title":"Included Orders Invoices Line Items","description":"Included Orders Invoices Line Item","properties":{"id":{"type":"integer","description":"Included Orders Line Item ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"fulfillment_id":{"type":"integer","description":"Restock ID"},"quantity":{"type":"integer","description":"Quantity"},"invoices_line_item_id":{"type":"integer","description":"Invoices Line Item"}}},"description":"Included order invoices line items"}},"example":{"id":1,"public_id":"lDUzwt","workspace_id":42,"contact_id":6,"status":"restocked","created_at":"2024-02-07T13:24:59.204Z","updated_at":"2024-02-07T13:24:59.204Z","included_invoices_line_items":[{"id":1,"public_id":"BegDsZ","fulfillment_id":1,"quantity":1,"invoices_line_item_id":2}]}}},"example":[{"id":1,"public_id":"lDUzwt","workspace_id":42,"contact_id":6,"status":"restocked","created_at":"2024-02-07T13:24:59.204Z","updated_at":"2024-02-07T13:24:59.204Z","included_invoices_line_items":[{"id":1,"public_id":"BegDsZ","quantity":1,"invoices_line_item_id":2}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/invoices/restocks/{id}":{"get":{"tags":["Orders::Invoices::Restock"],"summary":"Fetch Restock","description":"Fetch Restock","operationId":"getRestock","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","title":"Restock","description":"Restock","properties":{"id":{"type":"integer","description":"Restock"},"public_id":{"type":["string","null"],"description":"Public Restock ID"},"workspace_id":{"type":"integer","description":"Workspace ID"},"contact_id":{"type":"integer","description":"Contact ID"},"status":{"type":"string","enum":["cancelled","restocked"],"description":"Status"},"created_at":{"type":["string","null"],"format":"date-time","description":"Created At Date"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Updated At Date"},"included_invoices_line_items":{"type":["array","null"],"items":{"type":"object","title":"Included Orders Invoices Line Items","description":"Included Orders Invoices Line Item","properties":{"id":{"type":"integer","description":"Included Orders Line Item ID"},"public_id":{"type":["string","null"],"description":"Public ID"},"fulfillment_id":{"type":"integer","description":"Restock ID"},"quantity":{"type":"integer","description":"Quantity"},"invoices_line_item_id":{"type":"integer","description":"Invoices Line Item"}}},"description":"Included Order Invoices Line Items"}},"example":{"id":1,"public_id":"lDUzwt","workspace_id":42,"contact_id":6,"status":"restocked","created_at":"2024-02-07T13:24:59.204Z","updated_at":"2024-02-07T13:24:59.204Z","included_invoices_line_items":[{"id":1,"public_id":"BegDsZ","fulfillment_id":1,"quantity":1,"invoices_line_item_id":2}]}},"example":{"id":1,"public_id":"lDUzwt","workspace_id":42,"contact_id":6,"status":"restocked","created_at":"2024-02-07T13:24:59.204Z","updated_at":"2024-02-07T13:24:59.204Z","included_invoices_line_items":[{"id":1,"public_id":"BegDsZ","fulfillment_id":1,"quantity":1,"invoices_line_item_id":2}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/{order_id}/invoices":{"get":{"tags":["Orders::Invoice"],"summary":"List Invoices","description":"List invoices for a specific order. Please refer to [our Orders Overview guide](https://developers.myclickfunnels.com/docs/orders/invoices) for more information about the different types of invoices and payment processors.","operationId":"listOrdersInvoices","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"$ref":"#/components/parameters/InvoiceFilter"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrdersInvoiceAttributes"}},"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,"renewal_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,"deleted_at":null,"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"}}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Orders::Invoice"],"summary":"Create External Invoice","description":"Create an invoice for an external order. This is useful if you process payments outside of ClickFunnels, but still want to make use of ClickFunnels\u0026#39; automations and funnels. Refer to the corresponding guide for more information [here](https://developers.myclickfunnels.com/docs/orders#external-orders).","operationId":"createOrdersInvoices","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new external invoice. Only external orders support invoice creation via the API.\nExternal orders are orders where payments are processed outside of ClickFunnels.\n","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orders_invoice":{"type":"object","description":"The invoice parameters. Only external orders support invoice creation via the API.\n","$ref":"#/components/schemas/OrdersInvoiceParameters"}}},"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"}]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersInvoiceAttributes"},"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,"renewal_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,"deleted_at":null,"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"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/orders/invoices/{id}":{"get":{"tags":["Orders::Invoice"],"summary":"Fetch Invoice","description":"Retrieve an invoice for an order. Please refer to [our Orders Overview guide](https://developers.myclickfunnels.com/docs/orders/invoices) for more information about the different types of invoices and payment processors.","operationId":"getOrdersInvoices","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersInvoiceAttributes"},"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,"renewal_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,"deleted_at":null,"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"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Orders::Invoice"],"summary":"Update External Invoice","description":"Update a specific invoice in the current workspace. Currently, only invoices of [external orders](https://developers.myclickfunnels.com/docs/orders#external-orders) can be updated. So, you can\u0026#39;t update invoices of other payment processors, like Payments AI and Stripe.","operationId":"updateOrdersInvoices","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in an external invoice. Only external orders support invoice updates via the API.\nThe `invoice_type` cannot be changed after creation.\n","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orders_invoice":{"type":"object","description":"The invoice parameters. Only external orders support invoice updates via the API.\n","$ref":"#/components/schemas/OrdersInvoiceParametersUpdate"}}},"example":{"orders_invoice":{"status":"paid","paid_at":"2025-01-10T00:00:00.000Z","line_items_attributes":[{"id":682,"amount":"99.00","quantity":2}]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersInvoiceAttributes"},"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,"renewal_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,"deleted_at":null,"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"}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/invoices/{id}/abandon":{"post":{"tags":["Orders::Invoice"],"summary":"Abandon Invoice","description":"Abandon an unpaid, draft, or past-due invoice through ClickFunnels' own abandon path (the\nsame path the in-app \"Abandon invoice\" button uses) so the abandon propagates to the payment\nprocessor and STOPS its autopay retry (dunning) schedule for this invoice.\n\nReach for this when the retries themselves are the problem: an insufficient-funds decline\nwhere the right move is to hold the retry cycle for a few days rather than cancel the\nsubscription or refund the customer. Abandoning affects only this invoice - the order and its\nfuture rebills are untouched.\n\nA direct `PUT /orders/invoices/{id}` write of `status: abandoned` is not an alternative: that\naction is available only for external (self-managed) orders and returns 404 for\nprocessor-managed ones, because an invoice's `status` is a mirror ClickFunnels updates only\nafter the processor confirms the change.\n\nOnly invoices in `unpaid`, `draft`, or `past_due` status can be abandoned. An invoice in any\nother status returns 404 rather than 422, because this API hides records the caller may not\nact on. Please refer to [our Invoices\nguide](https://developers.myclickfunnels.com/docs/orders/invoices) for more information about\nthe different types of invoices and payment processors.","operationId":"abandonOrdersInvoices","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK - the payment processor accepted the abandon and stopped retrying this invoice. The returned invoice is the latest local snapshot and `status` is the status the processor reported back. The example below is trimmed to the fields that carry the transition; the full invoice shape is documented on `GET /orders/invoices/{id}`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersInvoiceAttributes"},"example":{"id":838,"public_id":"WNrMnJ","order_id":22642,"status":"abandoned","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":"2026-01-08T00:00:00.000Z","paid_at":null,"invoice_type":"renewal","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":"payments_ai","eligible_for_fulfillment":false,"line_items":[],"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,"renewal_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,"deleted_at":null,"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":{"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"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found - the invoice does not exist, does not belong to a workspace your API key can access, is not in an abandonable status (`unpaid`, `draft`, `past_due`), or belongs to a deleted order. Fetch the invoice first and check `status` to tell these apart.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"not_abandonable_or_inaccessible":{"summary":"Already paid, or outside the workspaces this key can reach","value":{"error":"Not found","hint":null}},"no_such_invoice":{"summary":"No invoice with that id","value":{"error":"Not found: Record 838 missing","hint":null}}}}}},"422":{"description":"Unprocessable Entity - the payment processor rejected the abandon or did not move the invoice to `abandoned`. The invoice keeps its previous status and its retry schedule; safe to retry.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Invoice abandon status: unpaid","hint":null}}}}}}},"/workspaces/{workspace_id}/orders/invoices":{"get":{"tags":["Orders::Invoice"],"summary":"List Workspace Invoices","description":"List all invoices for a specific workspace. Please refer to the [API documentation](https://developers.myclickfunnels.com/docs/orders/invoices) for more information about the different types of invoices and payment processors.","operationId":"listWorkspaceOrdersInvoices","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"$ref":"#/components/parameters/InvoiceFilter"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrdersInvoiceAttributes"}},"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,"renewal_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,"deleted_at":null,"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"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/{order_id}/transactions":{"get":{"tags":["Orders::Transaction"],"summary":"List Transactions","description":"List transactions for an order","operationId":"listOrdersTransactions","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrdersTransactionAttributes"}},"example":[{"id":2,"public_id":"EzgTHG","order_id":40,"status":"completed","external_type":"sale","external_id":"6b436949b329728434b26662ee95d57a","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},{"id":3,"public_id":"WjodBq","order_id":41,"status":"completed","external_type":"sale","external_id":"a8344a384a200f11c69970cca8cc5f87","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}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/transactions/{id}":{"get":{"tags":["Orders::Transaction"],"summary":"Fetch Transaction","description":"Retrieve a transaction for an order","operationId":"getOrdersTransactions","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersTransactionAttributes"},"example":{"id":4,"public_id":"oaSpKq","order_id":42,"status":"completed","external_type":"sale","external_id":"ac3a48524377eb673c500b3a53a28b36","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}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/orders/transactions/{id}/refund":{"post":{"tags":["Orders::Transaction"],"summary":"Refund Transaction","description":"Refund this charge, in full, through ClickFunnels' own refund path (the same path the in-app\nrefund button uses) so the money actually moves back through the payment processor (Payments\nAI/Rebilly or Stripe).\n\nA refund addresses a transaction because the transaction IS the charge: refundable balance and\nrefund eligibility are tracked per transaction, and the refund is recorded against this one. A\nsubscription order accumulates one charge per renewal and an invoice can carry more than one,\nso neither identifies a single charge to reverse. List an order's charges with `GET\n/orders/{order_id}/transactions` and refund the one you mean - a refundable charge has\n`external_type` `sale` or `capture`, `result: approved`, and `status` `completed` or\n`partially-refunded`.\n\nPartial refunds are deliberately not offered here, so this always refunds the charge's full\noutstanding amount. Writing `status: refunded` onto an invoice is not an alternative: that is\navailable only for external (self-managed) orders, and a local status write moves no money.\n\nPayments AI/Rebilly records the refund synchronously, so the returned transaction already\nreflects it (200). Stripe only initiates the refund and confirms it in a later webhook, so the\nresponse is 202 and the returned transaction can still show its pre-refund `status`; poll `GET\n/orders/transactions/{id}` for the settled state. Please refer to [our Orders Overview\nguide](https://developers.myclickfunnels.com/docs/orders) for more information about the\ndifferent types of orders and payment processors.","operationId":"refundOrdersTransactions","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Optional refund parameters. Omit the body entirely (or send `{\"orders_transaction\": {}}`) to refund with defaults.","required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"orders_transaction":{"$ref":"#/components/schemas/OrdersTransactionParametersRefund"}}},"example":{"orders_transaction":{"reason":"requested_by_customer"}}}}},"responses":{"200":{"description":"OK - the processor refunded the charge in-request (Payments AI/Rebilly), so the returned transaction already reflects it. `status` becomes `refunded`, or `partially-refunded` when earlier refunds left a remaining balance.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersTransactionAttributes"},"example":{"id":4,"public_id":"oaSpKq","order_id":42,"status":"refunded","external_type":"sale","external_id":"ac3a48524377eb673c500b3a53a28b36","amount":"100.00","currency":"USD","reason":"requested_by_customer","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}}}},"202":{"description":"Accepted - the processor accepted the refund but settles it asynchronously (Stripe). It confirms in a later webhook, so the returned transaction can still show its pre-refund `status`; poll `GET /orders/transactions/{id}` until it settles.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersTransactionAttributes"},"example":{"id":4,"public_id":"oaSpKq","order_id":42,"status":"completed","external_type":"sale","external_id":"ac3a48524377eb673c500b3a53a28b36","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}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found - the transaction does not exist, does not belong to a workspace your API key\ncan access, or is not a refundable charge (already refunded, declined, not a sale, on a\ndeleted order, or a payment method that does not support API refunds).\n\nBoth bodies below mean the same thing to a caller: not refundable. Which one you get\ndepends on where the record was hidden, so match on the status rather than the message.\nFetch `GET /orders/{order_id}/transactions` and check `external_type`, `result` and\n`status` to tell the cases apart.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"not_refundable_or_inaccessible":{"summary":"Already refunded, not a charge, or outside the workspaces this key can reach","value":{"error":"Not found","hint":null}},"unknown_declined_or_deleted":{"summary":"No such transaction, a declined charge, or a charge on a deleted order","value":{"error":"Not found: Record 4 missing","hint":null}}}}}},"422":{"description":"Unprocessable Entity - the request was understood but not performed. The charge keeps its previous status and no money moved, so it is safe to correct the request and retry.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"partial_refund_requested":{"summary":"Sent partial: true, or an amount","value":{"error":"Request unprocessable: Partial refunds are not supported via this endpoint (full refund of this charge only)","hint":null}},"invalid_reason":{"summary":"reason is not accepted by this order's payment processor","value":{"error":"Request unprocessable: Invalid reason 'store-credit'. Valid values: duplicate, fraudulent, requested_by_customer","hint":null}},"processor_declined":{"summary":"The payment processor declined the refund","value":{"error":"Request unprocessable: Transaction not found.","hint":null}}}}}}}}},"/orders/line_items/{line_item_id}/changes":{"post":{"tags":["Orders::LineItems::Change"],"summary":"Preview Variant/Price Change","description":"Returns a non-destructive preview of changing the variant and price of a subscription\nline item, including proration math, the next charge amount, and the effective date.\nFollows the same upgrade/downgrade rules as the in-app self-serve flow.\n\nSource allowed `products_price_id` targets from `GET /products/prices/{price_id}/change_options`.\nAfter previewing, call `POST /orders/line_items/{line_item_id}/changes/perform` with the\nsame body to commit. The response envelope is identical between preview and commit and\nonly the `preview` flag flips.\n\nOn commit, the `previous_line_item` block reflects the line item's pre-change state for\n`products_price`, `products_variant`, `original_product`, and `prorated`. Other scalar\nattributes (`created_at`, `updated_at`, `quantity`) reflect the post-commit state on the\nunderlying record.\n\nSee [Step 2 - Preview the change](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md#step-2---preview-the-change) in the [Subscription Changes Skill](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md),\nand [Step 1 - Discover what's allowed](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md#step-1---discover-whats-allowed) for sourcing a legal target.\n","operationId":"previewOrdersLineItemsChange","parameters":[{"$ref":"#/components/parameters/line_item_id"}],"requestBody":{"description":"Variant and price target for the preview","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersLineItemsChangeRequest"},"example":{"orders_line_items_change":{"products_price_id":24,"prorate":true,"effective_time":"now"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersLineItemsChangeResponse"},"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":{},"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":{},"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}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Store. Granted scopes: store:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"The target variant and price combination is not an allowed upgrade or downgrade for this subscription.","hint":null}}}}}}},"/orders/line_items/{line_item_id}/changes/perform":{"post":{"tags":["Orders::LineItems::Change"],"summary":"Change Variant/Price","description":"Commits a variant/price change for a subscription line item. The change must be\nconfigured as an allowed upgrade or downgrade option on the source variant. By default,\nupgrades take effect immediately and are prorated; downgrades take effect at the next\nrenewal and are not prorated. Both behaviours can be overridden via `prorate` and\n`effective_time`.\n\nSource allowed `products_price_id` targets from `GET /products/prices/{price_id}/change_options`,\nand preview the impact via `POST /orders/line_items/{line_item_id}/changes` before\ncommitting here. The response envelope is the same as preview, with `preview: false` —\nthe amount fields and `next_invoice_date` carry the upstream invoice quote snapshotted\njust before the commit was applied.\n\nThe `previous_line_item` block reflects the line item's pre-change state for\n`products_price`, `products_variant`, `original_product`, and `prorated`. Other scalar\nattributes (`created_at`, `updated_at`, `quantity`) reflect the post-commit state on the\nunderlying record.\n\nSee [Step 3 - Commit the change](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md#step-3---commit-the-change) in the [Subscription Changes Skill](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md),\nplus [Eligibility](https://accounts.myclickfunnels.com/.well-known/subscription-changes/skill.md#eligibility) for which orders can be changed this way.\n","operationId":"performOrdersLineItemsChange","parameters":[{"$ref":"#/components/parameters/line_item_id"}],"requestBody":{"description":"Target variant and price plus optional proration and timing overrides","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersLineItemsChangeRequest"},"example":{"orders_line_items_change":{"products_price_id":24,"prorate":true,"effective_time":"now"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersLineItemsChangeResponse"},"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}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Store. Granted scopes: store:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"The target variant and price combination is not an allowed upgrade or downgrade for this subscription.","hint":null}}}}}}},"/workspaces/{workspace_id}/orders/tags":{"get":{"tags":["Orders::Tag"],"summary":"List Tags","description":"List all order tags for your workspace","operationId":"listOrdersTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrdersTagAttributes"}},"example":[{"id":60,"public_id":"EdxIlK","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":61,"public_id":"MqDxON","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Orders::Tag"],"summary":"Create Tag","description":"Add a new order tag to your workspace","operationId":"createOrdersTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orders_tag":{"type":"object","$ref":"#/components/schemas/OrdersTagParameters"}}},"example":{"orders_tag":{"name":"Example Tag","color":"#FF5733"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersTagAttributes"},"example":{"id":63,"public_id":"dfsiRX","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/orders/tags/{id}":{"get":{"tags":["Orders::Tag"],"summary":"Fetch Tag","description":"Retrieve a single order tag","operationId":"getOrdersTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersTagAttributes"},"example":{"id":62,"public_id":"Lfuqxv","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Orders::Tag"],"summary":"Update Tag","description":"Update an order tag","operationId":"updateOrdersTags","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"orders_tag":{"type":"object","$ref":"#/components/schemas/OrdersTagParametersUpdate"}}},"example":{"orders_tag":{"name":"renamed-tag","color":"#FF5733"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrdersTagAttributes"},"example":{"id":65,"public_id":"HGbkFs","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Orders::Tag"],"summary":"Remove Tag","description":"Delete an order tag from your workspace","operationId":"removeOrdersTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/pages":{"get":{"tags":["Page"],"summary":"List Pages","description":"Page offers extra information about ClickFunnels pages, like those that are part of funnels.","operationId":"listPages","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of page IDs to filter by.","example":"1,42"},"theme_id":{"type":"string","description":"A comma-separated list of theme IDs to filter by.","example":"1,42"},"funnel_pages":{"type":"boolean","description":"Only show pages that belong to a funnel as opposed to standalone landing or site pages.","example":true},"funnel_ids":{"type":"string","description":"A comma-separated list of funnel IDs to filter pages by. Returns only pages belonging to the specified funnels.","example":"123,456"}}},"style":"deepObject","explode":true},{"$ref":"#/components/parameters/ExpandPageFields"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PageAttributes"}},"example":[{"id":61,"public_id":"eldUyN","workspace_id":42000,"name":"Great Page","theme_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"funnel_page","custom_html_page":false,"current_path":"/great-page","url":"https://myteam.myclickfunnels.com/funnel-great-page","show_page_step":{"id":100,"public_id":"xYz123","name":"Great Page Step","current_path":"/funnel-great-page","sort_order":0,"products":[]},"funnel":{"id":50,"public_id":"AbC789","name":"Sales Funnel"},"sdk":null,"block_ai_assistant":false,"block_ai_crawler":false,"block_ai_search":false,"description":null,"seo_description":null,"seo_index":false,"seo_title":null},{"id":62,"public_id":"AtcUVH","workspace_id":42000,"name":"Landing Page","theme_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"landing_page","custom_html_page":false,"current_path":"/landing-page","url":"https://myteam.myclickfunnels.com/landing-page","show_page_step":null,"funnel":null,"sdk":null,"block_ai_assistant":false,"block_ai_crawler":false,"block_ai_search":false,"description":null,"seo_description":null,"seo_index":false,"seo_title":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Page"],"summary":"Create Page","description":"Create a new internal page in the workspace. By default, creating a page without references to a funnel or show page step will create a standalone landing page.\n\nYou can optionally attach the page to a funnel by providing either:\n- `funnel.funnel_id`: Creates a new show page step in the specified funnel. When provided without `show_page_step_id`, the page is added as the last step of the funnel, positioned after the currently last page.\n- `funnel.show_page_step_id`: Swaps the referenced step to point at this newly created page. The page previously linked to that step becomes an orphan (kept in the workspace, no longer linked to any step).\n\n**`sort_order`** (optional, top-level): Controls the zero-based position within the funnel when creating with `funnel.funnel_id`. `0` inserts before the first existing step; omit to append at the end. Out-of-bounds values (negative or greater than the current step count) return 422. `sort_order` is ignored when `funnel.show_page_step_id` is used — the swap target's current position is preserved.\n\n**`funnel.after_show_page_step_id`** (optional, with `funnel.funnel_id`): Insert the new step right after the referenced show page step — also places the page inside a split branch. Alternative to `sort_order`. An id that does not resolve to a step in the funnel returns 400.\n\nTo also attach products to the page's checkout step in the same call, pass `show_page_step.product_ids: [...]` (sibling of `funnel`). This is the only way to set products at create time — the legacy `funnel.products` shape is rejected with a 400. Products attachment is **additive** and **all-or-nothing**: any unresolved id fails the whole request and the page is not created.\n\n**Order bumps**: pass `show_page_step.bumps: [{product_id, preheadline}]` (same semantics as `product_ids`) to attach products as order bumps instead of main products, each with its own optional `preheadline` — the line of copy shown above that bump's offer. A product may appear in only one of the two blocks per request; naming it in both returns a 400.\n\n**`external_url` is rejected** — to create an externally-hosted (SDK) page use `POST /api/v2/workspaces/:workspace_id/pages/external`.\n","operationId":"createPage","externalDocs":{"description":"Pages Skill - building a page (PML body)","url":"https://accounts.myclickfunnels.com/.well-known/pages/skill.md#building-a-page"},"parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/ExpandPageFields"}],"requestBody":{"description":"Information about the Page to create","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","$ref":"#/components/schemas/PageParameters"}}},"example":{"page":{"name":"My New Page","current_path":"/my-new-page","theme_id":12345,"description":"A landing page for our new product launch","seo_title":"New Product Launch - My Brand","seo_description":"Discover our latest product offering","seo_index":true,"block_ai_crawler":true,"block_ai_search":false,"block_ai_assistant":false,"funnel":{"funnel_id":"xyz789"},"show_page_step":{"product_ids":["PrdAbc"]},"head_code":"\u003cscript\u003econsole.log('hello');\u003c/script\u003e","head_code_mode":"append","markup":"\u003csection\u003e\n  \u003crow cols=\"1\"\u003e\n    \u003ccolumn\u003e\n      \u003cheadline\u003eWelcome to our page\u003c/headline\u003e\n      \u003csubheadline\u003eStart your journey here\u003c/subheadline\u003e\n    \u003c/column\u003e\n  \u003c/row\u003e\n\u003c/section\u003e\n"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAttributes"},"example":{"id":70,"public_id":"NewPgX","workspace_id":42000,"name":"My New Page","theme_id":12345,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"funnel_page","custom_html_page":false,"current_path":"/my-new-page-xyz123","url":"https://myteam.myclickfunnels.com/my-new-page","show_page_step":{"id":200,"public_id":"StpNew","name":"My New Page","current_path":"/my-new-page","sort_order":0,"products":[]},"funnel":{"id":100,"public_id":"xyz789","name":"Target Funnel"},"sdk":null,"block_ai_assistant":false,"block_ai_crawler":false,"block_ai_search":false,"description":null,"seo_description":null,"seo_index":false,"seo_title":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"invalid_funnel_id":{"summary":"Invalid funnel_id","value":{"error":"Bad request: The funnel with the provided ID cannot be found.","hint":null}},"invalid_show_page_step_id":{"summary":"Invalid show_page_step_id","value":{"error":"Bad request: The step with the provided ID cannot be found.","hint":null}},"invalid_code_mode":{"summary":"Invalid code mode","value":{"error":"Bad request: Invalid code mode 'invalid'. Must be 'append' or 'replace'.","hint":null}},"invalid_markup":{"summary":"Invalid PML markup","value":{"error":"Bad request: Markup is not valid PML: unknown top-level element(s) \u003cfoo\u003e. Top-level elements must be one of: \u003csection\u003e, \u003crow\u003e, \u003ccolumn\u003e, \u003cflex\u003e, \u003cheadline\u003e, \u003csubheadline\u003e, \u003cparagraph\u003e, \u003cimage\u003e, \u003cinput\u003e, \u003cbutton\u003e, \u003clist\u003e, \u003cvideo\u003e, \u003cdivider\u003e, \u003clink\u003e, \u003ccountdown\u003e, \u003caccordion\u003e, \u003ccustomhtml\u003e, \u003cproduct-carousel\u003e, \u003corder-summary\u003e, \u003ccheckout\u003e, \u003cconfirmation\u003e, \u003cproduct-name\u003e, \u003cproduct-description\u003e, \u003cproduct-price\u003e, \u003cproduct-image\u003e, \u003cproduct-link\u003e, \u003csaved-section\u003e. (line 3)","hint":null}},"product_in_both_lists":{"summary":"a product is named as both a main product and an order bump","value":{"error":"Bad request: Product(s) cannot be listed in both product_ids and bumps: PrdBmp","hint":null}},"bumps_entry_without_product_id":{"summary":"a show_page_step.bumps entry is missing its product_id","value":{"error":"Bad request: Every show_page_step.bumps entry requires a product_id.","hint":null}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"name_blank":{"summary":"Name is blank","value":{"error":"Request unprocessable: Name can't be blank","hint":null}},"external_url_rejected":{"summary":"external_url is not allowed on this endpoint","value":{"error":"Request unprocessable: The following fields are not valid on this endpoint: external_url. Use POST /api/v2/workspaces/:workspace_id/pages/external to create externally-hosted (SDK) pages.","hint":null}},"out_of_bounds_sort_order":{"summary":"sort_order out of bounds","value":{"error":"Request unprocessable: sort_order 5 is out of bounds (funnel has 3 step(s)).","hint":null}}}}}}}}},"/workspaces/{workspace_id}/pages/external":{"post":{"tags":["Page"],"summary":"Create External Page","description":"Create an externally-hosted (SDK) page. Unlike internal pages, the visual content lives on your own domain and is registered with ClickFunnels via a lightweight SDK integration.\n\n**Required fields:**\n- `external_url`: The fully-qualified URL where your page is hosted.\n\n**Standalone vs in a funnel:** the `funnel` block is optional.\n- Omit it to create a **standalone** external page: registered with an SDK token and visit tracking enabled, but not a step in any funnel. Place it later by passing its id in a conditional split's `branches[].page_id`, a split test's fresh-variant slot, an update swap (`funnel.show_page_step_id`), or the funnel `attach_page` flow. SDK checkout and form submission require placement and return a `page_not_in_funnel` error until the page is a funnel step.\n- Provide `funnel.funnel_id` OR `funnel.show_page_step_id` to create it inside a funnel in one call.\n\n**Funnel positioning:**\n- `funnel.funnel_id` + optional `sort_order`: Creates a new show page step in the funnel at the specified zero-based position (`0` = first, omit = append at end).\n- `funnel.show_page_step_id`: Swaps the existing step to point at the new external page. The previous page on that step becomes an orphan. `sort_order` is ignored in this case.\n- Positioning params without their funnel target return 422: `sort_order` requires `funnel.funnel_id`, and `funnel.after_show_page_step_id` requires `funnel.funnel_id`.\n\n**Rejected fields** (returns 422 if present): `markup`, `theme_id`, `current_path`, `seo_title`, `seo_description`, `seo_index`, `block_ai_crawler`, `block_ai_search`, `block_ai_assistant`, `head_code`, `footer_code`, `live_data_changes`, `show_page_step.product_ids`, `show_page_step.bumps`. Attach products and order bumps in a follow-up `PATCH /api/v2/pages/:id`.\n\n**SDK onboarding:** The response includes an `sdk` block with a `token` (prefixed `cfp_`). To register the page:\n1. Add `\u003cmeta name=\"cf-page-token\" content=\"\u003ctoken\u003e\"\u003e` to your page's `\u003chead\u003e`.\n2. Include the ClickFunnels SDK script tag on the page.\n\nThe [Create an External Page Skill](https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md) is the end-to-end guide for the page itself. To sell products from that page, see [Add Checkout to an External Page](https://accounts.myclickfunnels.com/.well-known/sdk/add-checkout/skill.md).\n","operationId":"createExternalPage","externalDocs":{"description":"SDK Skill - create an external page","url":"https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md#the-entire-public-surface"},"parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about the external page to create","required":true,"content":{"application/json":{"schema":{"type":"object","required":["page"],"properties":{"page":{"type":"object","required":["external_url"],"properties":{"name":{"type":"string","description":"Page name. Defaults to the URL host if omitted."},"description":{"type":["string","null"],"description":"A short description of the page (max 1000 characters)."},"external_url":{"type":"string","description":"The fully-qualified URL of the externally-hosted page (e.g. `https://acme.example.com/my-page`). Must be unique within the workspace."},"sort_order":{"type":"integer","description":"Optional zero-based position within the funnel when using `funnel.funnel_id` (422 without it). `0` inserts before the first step; omit to append. Ignored when `funnel.show_page_step_id` is used."},"funnel":{"type":"object","description":"Optional funnel association — provide either `funnel_id` or `show_page_step_id`. Omit the whole block to create a standalone external page (no funnel step).","properties":{"funnel_id":{"type":"string","description":"The public ID of the funnel to attach this page to."},"after_show_page_step_id":{"type":["integer","string"],"description":"With `funnel_id`: insert the new step right after this show page step (pass the `show_page_step_id` from GET /funnels/:id/structure; also places the page inside a split branch). Alternative to `sort_order`."},"show_page_step_id":{"type":["integer","string"],"description":"The ID of an existing show page step to swap this page onto."}}}}}}},"example":{"page":{"name":"My External Landing Page","external_url":"https://acme.example.com/my-page","funnel":{"funnel_id":"xyz789"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAttributes"},"example":{"id":71,"public_id":"ExtPgY","workspace_id":42000,"name":"My External Landing Page","description":null,"theme_id":null,"seo_title":null,"seo_description":null,"seo_index":false,"block_ai_crawler":false,"block_ai_search":false,"block_ai_assistant":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"funnel_page","custom_html_page":false,"current_path":null,"url":"https://acme.example.com/my-page","show_page_step":{"id":201,"public_id":"StpExt","name":"My External Landing Page","current_path":null,"sort_order":0,"products":[]},"funnel":{"id":100,"public_id":"xyz789","name":"Target Funnel"},"sdk":{"token":"cfp_abc123def456","external_url":"https://acme.example.com/my-page"}}}}},"400":{"description":"Bad Request — a referenced funnel or step id could not be resolved.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: The funnel or show_page_step with the provided ID cannot be found.","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"missing_external_url":{"summary":"external_url is required","value":{"error":"Request unprocessable: external_url is required for external pages.","hint":null}},"unknown_funnel_keys":{"summary":"funnel block has unsupported keys","value":{"error":"Request unprocessable: page.funnel has unsupported keys: funnelId. Accepted keys: funnel_id, show_page_step_id, after_show_page_step_id.","hint":null}},"positioning_without_target":{"summary":"positioning param without funnel.funnel_id","value":{"error":"Request unprocessable: funnel.after_show_page_step_id requires funnel.funnel_id; omit the funnel block to create a standalone external page.","hint":null}},"rejected_fields":{"summary":"forbidden fields present","value":{"error":"Request unprocessable: The following fields are not valid for external pages: markup, theme_id.","hint":null}},"out_of_bounds_sort_order":{"summary":"sort_order out of bounds","value":{"error":"Request unprocessable: sort_order 5 is out of bounds (funnel has 3 step(s)).","hint":null}},"malformed_external_url":{"summary":"external_url is not a valid URL","value":{"error":"Request unprocessable: Validation failed: URL is not a valid URL (expected something like https://example.com/my-page)","hint":null}},"duplicate_url":{"summary":"external_url already in use","value":{"error":"Request unprocessable: Validation failed: URL is already in use by another external page in this workspace","hint":null}}}}}}}}},"/workspaces/{workspace_id}/pages/custom_html":{"post":{"tags":["Page"],"summary":"Create Custom HTML Page","description":"Create a ClickFunnels-hosted custom HTML page: you supply the complete HTML document and ClickFunnels serves it verbatim at a path on the funnel's domain — no page editor, no PML. Ideal for AI-generated pages: generate the HTML, POST it here, and the page is live as a funnel step.\n\n**Required fields:**\n- `name`: The page name.\n- `custom_html`: The complete HTML document (max 2MB). Served byte-for-byte — include your own CSS/JS inline.\n\n**Making the page work with ClickFunnels (opt-ins, tracking):** the response includes an `sdk` block with a `token` (prefixed `cfp_`). The HTML should contain:\n1. `\u003cmeta name=\"cf-page-token\" content=\"\u003ctoken\u003e\"\u003e` inside `\u003chead\u003e`.\n2. The ClickFunnels SDK script tag (`\u003cscript src=\"https://sdk.\u003croot-domain\u003e/sdk.js\" defer\u003e\u003c/script\u003e`).\n3. Form fields marked with `data-cf-element` attributes (`email`, `first-name`, `last-name`, `name`, `phone`, `custom-attribute:\u003ckey\u003e`) inside a plain `\u003cform\u003e`.\n\nSince the token is minted by this call, either create the page first and then PATCH the HTML with the token inserted, or create with placeholder HTML and swap it. The [Create an External Page Skill](https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md) documents the exact form markup convention (it applies to custom HTML pages too — the only difference is ClickFunnels hosts the file).\n\n**Standalone vs in a funnel:** the `funnel` block is optional and behaves exactly like `POST /pages/external`:\n- Omit it to create a **standalone** page.\n- `funnel.funnel_id` + optional `sort_order` or `funnel.after_show_page_step_id`: create as a step in the funnel.\n- `funnel.show_page_step_id`: swap an existing step onto this page.\n\n**Path:** pass `current_path` (e.g. `/my-landing`) to choose the URL path on the funnel's domain; omitted, the path derives from the name. Change it later via `PATCH /pages/{id}` with `current_path`.\n\n**Limitation:** viewing a custom HTML page does not advance the visitor's funnel run (form submissions do), so run-based view attribution treats un-submitted custom HTML steps as unvisited.\n\n**Rejected fields** (returns 422 if present): `markup`, `theme_id`, `seo_title`, `seo_description`, `seo_index`, `block_ai_crawler`, `block_ai_search`, `block_ai_assistant`, `head_code`, `footer_code`, `custom_css`, `live_data_changes`, `external_url`, `show_page_step.product_ids`, `show_page_step.bumps`.\n","operationId":"createCustomHtmlPage","externalDocs":{"description":"SDK Skill - form markup convention (applies to custom HTML pages)","url":"https://accounts.myclickfunnels.com/.well-known/sdk/create-external-page/skill.md#the-entire-public-surface"},"parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about the custom HTML page to create","required":true,"content":{"application/json":{"schema":{"type":"object","required":["page"],"properties":{"page":{"type":"object","required":["name","custom_html"],"properties":{"name":{"type":"string","description":"Page name."},"description":{"type":["string","null"],"description":"A short description of the page (max 1000 characters)."},"custom_html":{"type":"string","description":"The complete HTML document to serve (max 2MB)."},"current_path":{"type":"string","description":"Optional URL path on the funnel's domain (e.g. `/my-landing`). Derived from the name when omitted."},"sort_order":{"type":"integer","description":"Optional zero-based position within the funnel when using `funnel.funnel_id` (422 without it). `0` inserts before the first step; omit to append. Ignored when `funnel.show_page_step_id` is used."},"funnel":{"type":"object","description":"Optional funnel association — provide either `funnel_id` or `show_page_step_id`. Omit the whole block to create a standalone page.","properties":{"funnel_id":{"type":["integer","string"],"description":"The ID (or public ID) of the funnel to attach this page to."},"after_show_page_step_id":{"type":["integer","string"],"description":"With `funnel_id`: insert the new step right after this show page step. Alternative to `sort_order`."},"show_page_step_id":{"type":["integer","string"],"description":"The ID of an existing show page step to swap this page onto."}}}}}}},"example":{"page":{"name":"AI Landing Page","custom_html":"\u003c!doctype html\u003e\u003chtml\u003e\u003chead\u003e\u003ctitle\u003eHi\u003c/title\u003e\u003c/head\u003e\u003cbody\u003e\u003ch1\u003eHello\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e","current_path":"/ai-landing","funnel":{"funnel_id":"xyz789"}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAttributes"},"example":{"id":72,"public_id":"CstPgZ","workspace_id":42000,"name":"AI Landing Page","description":null,"theme_id":null,"seo_title":null,"seo_description":null,"seo_index":false,"block_ai_crawler":false,"block_ai_search":false,"block_ai_assistant":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"funnel_page","custom_html_page":true,"current_path":"/ai-landing-page-page","url":"https://myteam.myclickfunnels.com/ai-landing","show_page_step":{"id":202,"public_id":"StpCst","name":"AI Landing Page","current_path":"/ai-landing","sort_order":0,"products":[]},"funnel":{"id":100,"public_id":"xyz789","name":"Target Funnel"},"sdk":{"token":"cfp_abc123def456"}}}}},"400":{"description":"Bad Request — a referenced funnel or step id could not be resolved.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: The funnel or show_page_step with the provided ID cannot be found.","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"missing_custom_html":{"summary":"custom_html is required","value":{"error":"Request unprocessable: custom_html is required for custom HTML pages.","hint":null}},"rejected_fields":{"summary":"forbidden fields present","value":{"error":"Request unprocessable: The following fields are not valid for custom HTML pages: markup, external_url.","hint":null}},"too_large":{"summary":"HTML exceeds the 2MB cap","value":{"error":"Request unprocessable: custom_html is too large (max 2MB).","hint":null}},"positioning_without_target":{"summary":"positioning param without funnel.funnel_id","value":{"error":"Request unprocessable: sort_order requires a funnel (provide funnel.funnel_id); omit it to create a standalone custom HTML page.","hint":null}}}}}}}}},"/pages/{id}":{"get":{"tags":["Page"],"summary":"Fetch Page","description":"Page offers extra information about ClickFunnels pages, like those that are part of funnels.","operationId":"getPages","parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandPageFields"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAttributes"},"example":{"id":63,"public_id":"iUMTqF","workspace_id":42000,"name":"Great Page","theme_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"funnel_page","custom_html_page":false,"current_path":"/great-page-canonical","url":"https://myteam.myclickfunnels.com/great-page","show_page_step":{"id":150,"public_id":"StpAbc","name":"Great Page Step","current_path":"/great-page","sort_order":0,"products":[]},"funnel":{"id":75,"public_id":"FnlDef","name":"Great Funnel"},"sdk":null,"block_ai_assistant":false,"block_ai_crawler":false,"block_ai_search":false,"description":null,"seo_description":null,"seo_index":false,"seo_title":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Page"],"summary":"Update Page","description":"Update an existing page. Works for both internal and external (SDK) pages.\n\nField availability depends on the page type — see `PageParametersUpdate` for the full breakdown. Sending an internal-only field on an external page (or `external_url` on an internal page) returns 422 with an explicit list of the rejected field names — never silently ignored.\n\n**`sort_order`** (optional, top-level): Reposition the page within its funnel. Zero-based. Ignored when `funnel.show_page_step_id` is also provided.\n\n**`funnel.show_page_step_id`** (optional): Swap the page onto an existing show page step. The previous page on that step becomes an orphan. Shared by both page types.\n\n**`external_url`** (external pages only): Update the external URL. The SDK token is preserved.\n\n**`show_page_step.product_ids` / `show_page_step.bumps`** (optional, both page types): Append products to the page's checkout step as main products or as order bumps. Both are additive; `bumps` also promotes a product already attached to the step into a bump, which is how an existing attachment becomes one. Each `bumps` entry is `{product_id, preheadline}`, where `preheadline` is the optional copy shown above that bump's offer. Requires the page to be part of a funnel (400 otherwise).\n\n**`markup`** (internal pages only): Replaces the page's entire tree. PML covers only a subset of what the ClickFunnels page editor can build, so if this page could have been created or edited in the editor, stop and get explicit approval from the user first: see [the approval guardrail](https://accounts.myclickfunnels.com/.well-known/page-markup/skill.md#stop-get-approval-before-overwriting-an-existing-page).\n\nTo move externally-hosted pages to a new domain, see [Patch one page at a time](https://accounts.myclickfunnels.com/.well-known/sdk/migrate-external-page-domain/skill.md#4-patch-one-page-at-a-time) in the [Migrate an External Page Domain Skill](https://accounts.myclickfunnels.com/.well-known/sdk/migrate-external-page-domain/skill.md).\n","operationId":"updatePages","externalDocs":{"description":"Pages Skill - building a page (PML body)","url":"https://accounts.myclickfunnels.com/.well-known/pages/skill.md#building-a-page"},"parameters":[{"$ref":"#/components/parameters/id"},{"$ref":"#/components/parameters/ExpandPageFields"}],"requestBody":{"description":"Information about updated fields in Page","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"page":{"type":"object","$ref":"#/components/schemas/PageParametersUpdate"}}},"example":{"page":{"name":"Example Page","description":"Updated page description","seo_title":"Updated SEO Title","seo_description":"Updated meta description","seo_index":true,"block_ai_crawler":true,"block_ai_search":true,"block_ai_assistant":false,"head_code":"\u003cscript\u003econsole.log('updated');\u003c/script\u003e","head_code_mode":"append","markup":"\u003csection\u003e\n  \u003crow cols=\"1\"\u003e\n    \u003ccolumn\u003e\n      \u003cheadline\u003eWelcome to our page\u003c/headline\u003e\n      \u003csubheadline\u003eStart your journey here\u003c/subheadline\u003e\n    \u003c/column\u003e\n  \u003c/row\u003e\n\u003c/section\u003e\n","show_page_step":{"product_ids":["PrdXyz"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageAttributes"},"example":{"id":66,"public_id":"ZkTthQ","workspace_id":42000,"name":"Updated Page","theme_id":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","type":"funnel_page","custom_html_page":false,"current_path":"/updated-page-canonical","url":"https://myteam.myclickfunnels.com/updated-page","show_page_step":{"id":160,"public_id":"StpUpd","name":"Updated Page Step","current_path":"/updated-page","sort_order":0,"products":[]},"funnel":{"id":80,"public_id":"FnlUpd","name":"Updated Funnel"},"sdk":null,"block_ai_assistant":false,"block_ai_crawler":false,"block_ai_search":false,"description":null,"seo_description":null,"seo_index":false,"seo_title":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"invalid_code_mode":{"summary":"Invalid code mode","value":{"error":"Bad request: Invalid code mode 'invalid'. Must be 'append' or 'replace'.","hint":null}},"invalid_markup":{"summary":"Invalid PML markup","value":{"error":"Bad request: Markup is not valid PML: unknown top-level element(s) \u003cfoo\u003e. Top-level elements must be one of: \u003csection\u003e, \u003crow\u003e, \u003ccolumn\u003e, \u003cflex\u003e, \u003cheadline\u003e, \u003csubheadline\u003e, \u003cparagraph\u003e, \u003cimage\u003e, \u003cinput\u003e, \u003cbutton\u003e, \u003clist\u003e, \u003cvideo\u003e, \u003cdivider\u003e, \u003clink\u003e, \u003ccountdown\u003e, \u003caccordion\u003e, \u003ccustomhtml\u003e, \u003cproduct-carousel\u003e, \u003corder-summary\u003e, \u003ccheckout\u003e, \u003cconfirmation\u003e, \u003cproduct-name\u003e, \u003cproduct-description\u003e, \u003cproduct-price\u003e, \u003cproduct-image\u003e, \u003cproduct-link\u003e, \u003csaved-section\u003e. (line 3)","hint":null}},"swap_target_not_found":{"summary":"funnel.show_page_step_id does not resolve","value":{"error":"Bad request: The show_page_step with the provided ID cannot be found.","hint":null}},"product_in_both_lists":{"summary":"a product is named as both a main product and an order bump","value":{"error":"Bad request: Product(s) cannot be listed in both product_ids and bumps: PrdBmp","hint":null}},"bumps_entry_without_product_id":{"summary":"a show_page_step.bumps entry is missing its product_id","value":{"error":"Bad request: Every show_page_step.bumps entry requires a product_id.","hint":null}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"validation_failed":{"summary":"Validation error","value":{"error":"Request unprocessable: Name can't be blank","hint":null}},"internal_only_field_on_external":{"summary":"Internal-only field sent on an external page","value":{"error":"Request unprocessable: The following fields are not valid for external pages: markup, theme_id.","hint":null}},"external_only_field_on_internal":{"summary":"External-only field sent on an internal page","value":{"error":"Request unprocessable: The following fields are not valid for internal pages: external_url.","hint":null}}}}}}}},"delete":{"tags":["Page"],"summary":"Delete Page","description":"Delete a page by ID. Works for both internal and external (SDK) pages.\n\nThe page's show page steps are destroyed first (removing the funnel step slot entirely), then the page itself (including its SDK registration for external pages).\n","operationId":"deletePage","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content — page successfully deleted."},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found — the page does not exist or belongs to a different workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — the page could not be deleted.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: This page is required by the theme and cannot be deleted.","hint":null}}}}}}},"/pages/{id}/custom_html":{"get":{"tags":["Page"],"summary":"Fetch Custom HTML Page Body","description":"Return the stored HTML body of a ClickFunnels-hosted custom HTML page. The body is kept off the standard page payload because it can be large — fetch it only when you need the source (e.g. to modify and PATCH it back via the `custom_html` field). Returns 404 for pages that are not custom HTML pages.\n","operationId":"getPageCustomHtml","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["id","public_id","custom_html"],"properties":{"id":{"type":"integer","description":"Page ID"},"public_id":{"type":"string","description":"The public identifier of the page"},"custom_html":{"type":"string","description":"The complete stored HTML document, exactly as served."}}},"example":{"id":72,"public_id":"CstPgZ","custom_html":"\u003c!doctype html\u003e\u003chtml\u003e\u003chead\u003e\u003ctitle\u003eHi\u003c/title\u003e\u003c/head\u003e\u003cbody\u003e\u003ch1\u003eHello\u003c/h1\u003e\u003c/body\u003e\u003c/html\u003e"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found — the page does not exist, is not accessible, or is not a custom HTML page.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/pages/{id}/products":{"delete":{"tags":["Page"],"summary":"Remove Products from Page","description":"Detach one or more products from the page's show page step. This is the **only** way\nto remove products from a page via the API — the `show_page_step.product_ids` and\n`show_page_step.bumps` fields on `POST/PATCH /api/v2/pages` are\nadditive-only and never remove products.\n\nDetaching is by product id and ignores the bump flag: main products and order bumps\nare removed the same way. Detach-then-re-attach via `show_page_step.product_ids` is\nalso how you turn an order bump back into a main product.\n\nAccepts `product_ids: [...]` in the request body or query string. The batch is\ntransactional — if any id does not resolve to a workspace product, or any id is not\ncurrently attached to the step, no products are detached.\n\nReturns 204 with no body on success.\n\nSee [Manage products on a checkout page](https://accounts.myclickfunnels.com/.well-known/pages/skill.md#manage-products-on-a-checkout-page) in the [Pages Skill](https://accounts.myclickfunnels.com/.well-known/pages/skill.md) for the attach and detach lifecycle.\n","operationId":"removeProductsFromPage","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["product_ids"],"properties":{"product_ids":{"type":"array","items":{"type":"string"},"description":"One or more product public IDs (or numeric IDs) to detach."}}},"example":{"product_ids":["PrdXyz","PrdAbc"]}}}},"responses":{"204":{"description":"No Content — products successfully detached"},"400":{"description":"Bad Request — `product_ids` missing, the page is not part of a funnel, or one or more\nids do not resolve to a workspace product (no products are detached in this case).\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"missing_product_ids":{"summary":"product_ids missing","value":{"error":"Bad request: product_ids is required","hint":null}},"not_a_funnel_page":{"summary":"page is not part of a funnel","value":{"error":"Bad request: Cannot detach products from a page that isn't part of a funnel.","hint":null}},"invalid_product":{"summary":"at least one id does not resolve to a workspace product","value":{"error":"Bad request: Product(s) not found: PrdXyz","hint":null}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found — at least one product is not currently attached to the page's step\n(no products are detached in this case), or the page is not accessible.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Product(s) not attached to this page: PrdXyz","hint":null}}}}}}},"/pages/{page_id}/stats":{"get":{"tags":["Page"],"summary":"Fetch Page Stats","description":"Retrieve statistics for a page, including views, opt-ins, sales, and earnings.\nStats are computed from the page's associated funnel step.\n\n`funnel` and `step` are `null` when the page is not part of a funnel\n(e.g. a standalone page or site page). This endpoint currently only reports\nanalytics for pages reached via a funnel step; page-level analytics for standalone\npages will be exposed in a future release.\n\nDefaults to a 30-day timerange ending now. Override with `timerange_start` and\n`timerange_end`. Timerange values are automatically clamped: future end dates\nare clamped to now, windows exceeding 90 days are clamped to 90 days, and if\nstart is after end the window resets to 30 days ending at `timerange_end`.\n\nThe metric names in the response are defined in [Metric vocabulary](https://accounts.myclickfunnels.com/.well-known/stats/skill.md#metric-vocabulary) in the [Stats Skill](https://accounts.myclickfunnels.com/.well-known/stats/skill.md).\n","operationId":"getPageStats","externalDocs":{"description":"Stats Skill - page stats","url":"https://accounts.myclickfunnels.com/.well-known/stats/skill.md#page-stats"},"parameters":[{"name":"page_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/StatsTimerangeStart"},{"$ref":"#/components/parameters/StatsTimerangeEnd"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PageStatsAttributes"},"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"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — a timerange parameter is not a real date or time. Unparseable\nvalues and calendar dates that do not exist (2026-02-31) are refused rather than\nsilently answered with a different window.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: timerange_start '2026-13-01' is not a valid date or time. Use an ISO 8601 value, e.g. 2026-09-01T00:00:00Z.","hint":null}}}}}}},"/workspaces/{workspace_id}/products":{"get":{"tags":["Product"],"summary":"List Products","description":"List all products for a workspace","operationId":"listProducts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of product IDs to filter by.","example":"1,2,3"},"visible_in_store":{"type":"boolean","description":"Filter products by visibility in the online store.","example":true,"enum":[true,false]},"visible_in_customer_center":{"type":"boolean","description":"Filter products by visibility in the customer center.","example":true,"enum":[true,false]},"archived":{"type":"boolean","description":"Filter products by archived state.","example":true,"enum":[true,false]}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductAttributes"}},"example":[{"id":126,"public_id":"IQGqMi","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":126,"variant_ids":[126],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":126,"name":"Color"}]},{"id":127,"public_id":"eBENtI","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":127,"variant_ids":[127],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":127,"name":"Color"}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Product"],"summary":"Create Product","description":"Add a new product to a workspace","operationId":"createProducts","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Product","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"object","$ref":"#/components/schemas/ProductParameters"}}},"example":{"product":{"name":"Sample Product","current_path":null,"visible_in_store":true,"visible_in_customer_center":true,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"tag_ids":[1,2,3],"variant_properties":[{"id":1,"name":"Size"},{"id":2,"name":"Color"}]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAttributes"},"example":{"id":129,"public_id":"IshNin","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":129,"variant_ids":[129],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":129,"name":"Color"}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/products/{id}":{"get":{"tags":["Product"],"summary":"Fetch Product","description":"Retrieve a product for a workspace","operationId":"getProducts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAttributes"},"example":{"id":128,"public_id":"mDqTeg","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":128,"variant_ids":[128],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":128,"name":"Color"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Product"],"summary":"Update Product","description":"Update a product for a workspace","operationId":"updateProducts","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Product","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"product":{"type":"object","$ref":"#/components/schemas/ProductParametersUpdate"}}},"example":{"product":{"name":"Heavy Duty Steel","current_path":null,"visible_in_store":true,"visible_in_customer_center":true,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"variant_ids":[22],"price_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"tag_ids":[1,2,3],"variant_properties":[{"id":1,"name":"Size"},{"id":2,"name":"Color"}]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAttributes"},"example":{"id":130,"public_id":"SyItmu","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":130,"variant_ids":[130],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":130,"name":"Color"}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/products/{id}/archive":{"post":{"tags":["Product"],"summary":"Archive a Product","description":"This will archive a Product. A product can only be archived if it\u0026#39;s not in the \u0026quot;live\u0026quot; state.","operationId":"archiveProducts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAttributes"},"example":{"id":22,"public_id":"RTWMAd","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":22,"variant_ids":[22],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":22,"name":"Color"}]}}}},"404":{"description":"Not Found"},"409":{"description":"Conflict - occurs if product is already archived."},"422":{"description":"Unprocessable Entity"}}}},"/products/{id}/unarchive":{"post":{"tags":["Product"],"summary":"Unarchive a Product","description":"This will unarchive a Product.","operationId":"unarchiveProducts","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductAttributes"},"example":{"id":22,"public_id":"RTWMAd","workspace_id":42000,"name":"Sample Product","current_path":null,"archived":false,"visible_in_store":true,"visible_in_customer_center":true,"image_id":null,"seo_title":"Buy Sample Product Online","seo_description":"This is a sample product.","seo_image_id":null,"commissionable":true,"image_ids":[],"default_variant_id":22,"variant_ids":[22],"price_ids":[],"tag_ids":[],"redirect_funnel_id":null,"cancellation_funnel_url":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","variant_properties":[{"id":22,"name":"Color"}]}}}},"404":{"description":"Not Found"},"409":{"description":"Conflict - occurs if product is not archived."},"422":{"description":"Unprocessable Entity"}}}},"/workspaces/{workspace_id}/products/collections":{"get":{"tags":["Products::Collection"],"summary":"List Collections","description":"List Collections","operationId":"listProductsCollections","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of collection IDs to filter by.","example":"1,2,3"},"visible_in_store":{"type":"boolean","description":"Filter collections by visibility in the online store.","example":true,"enum":[true,false]},"archived":{"type":"boolean","description":"Filter collections by archived state.","example":true,"enum":[true,false]}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductsCollectionAttributes"}},"example":[{"id":2,"public_id":"gkIDBR","workspace_id":42000,"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","archived":false,"image_id":null,"visible_in_store":true,"current_path":null,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","seo_indexable":null,"social_image_id":null,"created_at":null,"updated_at":null},{"id":3,"public_id":"zObwQt","workspace_id":42000,"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","archived":false,"image_id":null,"visible_in_store":true,"current_path":null,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","seo_indexable":null,"social_image_id":null,"created_at":null,"updated_at":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Products::Collection"],"summary":"Create Collection","description":"Create Collection","operationId":"createProductsCollections","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Collection","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_collection":{"type":"object","$ref":"#/components/schemas/ProductsCollectionParameters"}}},"example":{"products_collection":{"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","image_id":null,"visible_in_store":true,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","social_image_id":null}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsCollectionAttributes"},"example":{"id":5,"public_id":"RxuFTU","workspace_id":42000,"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","archived":false,"image_id":null,"visible_in_store":true,"current_path":null,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","seo_indexable":null,"social_image_id":null,"created_at":null,"updated_at":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/products/collections/{id}":{"get":{"tags":["Products::Collection"],"summary":"Fetch Collection","description":"Fetch Collection","operationId":"getProductsCollections","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsCollectionAttributes"},"example":{"id":4,"public_id":"UWvbNH","workspace_id":42000,"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","archived":false,"image_id":null,"visible_in_store":true,"current_path":null,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","seo_indexable":null,"social_image_id":null,"created_at":null,"updated_at":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Products::Collection"],"summary":"Update Collection","description":"Update Collection","operationId":"updateProductsCollections","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Collection","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_collection":{"type":"object","$ref":"#/components/schemas/ProductsCollectionParametersUpdate"}}},"example":{"products_collection":{"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","image_id":null,"visible_in_store":true,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","social_image_id":null}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsCollectionAttributes"},"example":{"id":7,"public_id":"PypQDE","workspace_id":42000,"name":"Example Collection","description":"Example Description","collection_type":"manual","product_ids":[],"sort_method":"manually","archived":false,"image_id":null,"visible_in_store":true,"current_path":null,"seo_title":"Example SEO Title","seo_description":"Example SEO Description","seo_indexable":null,"social_image_id":null,"created_at":null,"updated_at":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/products/{product_id}/prices":{"get":{"tags":["Products::Price"],"summary":"List Prices","description":"List all prices for a given product. This will include all prices for all variants of the product. You can also filter by variant_id to get prices for a specific variant.","operationId":"listProductsPrices","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of price IDs to filter by.","example":"1,2,3"},"variant_id":{"type":"string","description":"A comma-separated list of variant IDs to filter by.","example":"1,2,3"},"visible":{"type":"boolean","description":"Filter prices by visibility in the online store.","example":true,"enum":[true,false]},"archived":{"type":"boolean","description":"Filter prices by archived state.","example":true,"enum":[true,false]}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductsPriceAttributes"}},"example":[{"id":75,"public_id":"pLYvIn","variant_id":76,"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":null,"interval":null,"trial_interval":null,"trial_duration":null,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":null,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":76,"public_id":"eOSRMy","variant_id":77,"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":null,"interval":null,"trial_interval":null,"trial_duration":null,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":null,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/products/prices/{id}":{"get":{"tags":["Products::Price"],"summary":"Fetch Price","description":"Retrieve a single price","operationId":"getProductsPrices","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsPriceAttributes"},"example":{"id":77,"public_id":"UGpQZc","variant_id":78,"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":null,"interval":null,"trial_interval":null,"trial_duration":null,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":null,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Products::Price"],"summary":"Update Price","description":"Update a single price","operationId":"updateProductsPrices","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Price","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_price":{"type":"object","$ref":"#/components/schemas/ProductsPriceParametersUpdate"}}},"example":{"products_price":{"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":1,"interval":"months","trial_interval":"days","trial_duration":14,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":1,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsPriceAttributes"},"example":{"id":78,"public_id":"lbeLiS","variant_id":79,"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":null,"interval":null,"trial_interval":null,"trial_duration":null,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":null,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/products/{product_id}/variants":{"get":{"tags":["Products::Variant"],"summary":"List Variants","description":"List variants for a product","operationId":"listProductsVariants","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of variant IDs to filter by.","example":"1,2,3"},"visible":{"type":"boolean","description":"Filter variants by visibility in the online store.","example":true,"enum":[true,false]},"archived":{"type":"boolean","description":"Filter variants by archived state.","example":true,"enum":[true,false]},"fulfillment_required":{"type":"boolean","description":"Filter variants by fulfillment required state.","example":true,"enum":[true,false]}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductsVariantAttributes"}},"example":[{"id":80,"public_id":"TMYhZe","product_id":135,"name":"Intelligent Paper Bench variant 0648","description":"Tempora aut at necessitatibus.","sku":"bDhKDtQsJbGalOey","product_type":"physical","properties_value_ids":[null],"out_of_stock_sales":null,"weight":"17.0","weight_unit":"lb","height":"28.0","width":"703.0","length":"43.0","dimensions_unit":"inches","quantity":0,"tag_ids":[216],"tax_category_id":null,"asset_ids":[904],"has_access_to_all_valid_assets":false,"included_courses":[{"id":310,"course_id":42,"full_access":true,"included_section_ids":[301,302]}],"included_space_groups":[{"id":190,"communities_space_group_id":8,"spaces_mode":"all","included_space_ids":[]}],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"price_ids":[],"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[],"created_at":"2025-08-11T19:15:04.339Z","updated_at":"2025-08-11T19:15:04.339Z","default":false,"properties_values":[{"property_id":80,"value":"Red"}],"created_by_platform_application":null},{"id":81,"public_id":"bkPQjv","product_id":136,"name":"Small Concrete Chair variant 6ee6","description":"Est debitis velit voluptas.","sku":"Qf87oVPv71pM6QDa","product_type":"physical","properties_value_ids":[null],"out_of_stock_sales":null,"weight":"80.0","weight_unit":"lb","height":"53.0","width":"712.0","length":"51.0","dimensions_unit":"inches","quantity":0,"tag_ids":[218],"tax_category_id":null,"asset_ids":[],"has_access_to_all_valid_assets":true,"included_courses":[],"included_space_groups":[],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"price_ids":[],"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[],"created_at":"2025-08-11T19:15:04.359Z","updated_at":"2025-08-11T19:15:04.359Z","default":false,"properties_values":[{"property_id":81,"value":"Red"}],"created_by_platform_application":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Products::Variant"],"summary":"Create Variant","description":"Create a new variant for a product","operationId":"createProductsVariants","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Variant","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_variant":{"type":"object","$ref":"#/components/schemas/ProductsVariantParameters"}}},"example":{"products_variant":{"name":"Small Aluminum Gloves variant 393f","description":"Dolore provident unde quas.","sku":"LxbnGP0kqyqzQDTK","product_type":"physical","out_of_stock_sales":true,"weight":"24.0","weight_unit":"lb","height":"96.0","width":"418.0","length":"66.0","dimensions_unit":"inches","tax_category_id":null,"taxable":null,"track_quantity":false,"archived":false,"visible":true,"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[],"properties_values":[]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsVariantAttributes"},"example":{"id":83,"public_id":"wbMmJc","product_id":138,"name":"Sleek Copper Coat variant da19","description":"Qui maiores voluptas rerum.","sku":"3XCTSoc6kjVOUj1c","product_type":"physical","properties_value_ids":[null],"out_of_stock_sales":null,"weight":"43.0","weight_unit":"lb","height":"34.0","width":"543.0","length":"93.0","dimensions_unit":"inches","quantity":0,"tag_ids":[222],"tax_category_id":null,"asset_ids":[904],"has_access_to_all_valid_assets":false,"included_courses":[{"id":311,"course_id":42,"full_access":true,"included_section_ids":[301,302]}],"included_space_groups":[{"id":191,"communities_space_group_id":8,"spaces_mode":"all","included_space_ids":[]}],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"price_ids":[],"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[],"created_at":"2025-08-11T19:15:04.428Z","updated_at":"2025-08-11T19:15:04.428Z","default":false,"properties_values":[{"property_id":83,"value":"Red"}],"created_by_platform_application":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/products/prices/{price_id}/change_options":{"get":{"tags":["Products::Prices::ChangeOption"],"summary":"List Upgrade/Downgrade Options","description":"Returns the allowed upgrade and downgrade target variants for a price, grouped by\ntarget variant. Each group lists the prices on the target variant that a subscription\nusing this source price may switch to. Use this to render dynamic upgrade pricing\npages, or to source target `products_price_id` values for the line item change\nendpoints: `POST /orders/line_items/{line_item_id}/changes` (preview) and\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)\nfor the response shape and how to treat an empty result.\n","operationId":"listProductsPricesChangeOptions","parameters":[{"name":"price_id","in":"path","required":true,"description":"The source price for which to look up allowed upgrade/downgrade targets.\nAccepts either the integer database id or the obfuscated `public_id` string.\n","schema":{"oneOf":[{"type":"integer"},{"type":"string"}]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsPricesChangeOptionsResponse"},"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}]}}]}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"$ref":"#/components/responses/WorkspaceGrantForbidden"},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/products/variants/{id}":{"get":{"tags":["Products::Variant"],"summary":"Fetch Variant","description":"Retrieve a single variant","operationId":"getProductsVariants","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsVariantAttributes"},"example":{"id":82,"public_id":"EwUjhH","product_id":137,"name":"Heavy Duty Aluminum Table variant d514","description":"Et dolorem voluptatem modi.","sku":"iz6gZfAANGMsBvcM","product_type":"physical","properties_value_ids":[null],"out_of_stock_sales":null,"weight":"95.0","weight_unit":"lb","height":"50.0","width":"858.0","length":"33.0","dimensions_unit":"inches","quantity":0,"tag_ids":[220],"tax_category_id":null,"asset_ids":[904],"has_access_to_all_valid_assets":false,"included_courses":[{"id":312,"course_id":42,"full_access":false,"included_section_ids":[301]}],"included_space_groups":[{"id":192,"communities_space_group_id":8,"spaces_mode":"all","included_space_ids":[]}],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"price_ids":[],"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[],"created_at":"2025-08-11T19:15:04.395Z","updated_at":"2025-08-11T19:15:04.395Z","default":false,"properties_values":[{"property_id":82,"value":"Red"}],"created_by_platform_application":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Products::Variant"],"summary":"Update Variant","description":"Update a single variant","operationId":"updateProductsVariants","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Variant","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_variant":{"type":"object","$ref":"#/components/schemas/ProductsVariantParametersUpdate"}}},"example":{"products_variant":{"name":"Heavy Duty Steel variant","description":"Dolore provident unde quas.","sku":"LxbnGP0kqyqzQDTK","product_type":"physical","out_of_stock_sales":true,"weight":"24.0","weight_unit":"lb","height":"96.0","width":"418.0","length":"66.0","dimensions_unit":"inches","tax_category_id":null,"taxable":null,"track_quantity":false,"archived":false,"visible":true,"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsVariantAttributes"},"example":{"id":85,"public_id":"QWtFxE","product_id":140,"name":"Awesome Concrete Bag variant d60e","description":"Minus alias nemo non.","sku":"77ITJ9D2nZKZntcC","product_type":"physical","properties_value_ids":[null],"out_of_stock_sales":null,"weight":"78.0","weight_unit":"lb","height":"99.0","width":"532.0","length":"94.0","dimensions_unit":"inches","quantity":0,"tag_ids":[226],"tax_category_id":null,"asset_ids":[904],"has_access_to_all_valid_assets":false,"included_courses":[{"id":313,"course_id":42,"full_access":false,"included_section_ids":[301]}],"included_space_groups":[],"taxable":null,"track_quantity":false,"archived":false,"visible":true,"price_ids":[],"fulfillment_required":false,"country_of_manufacture_id":null,"image_ids":[],"fulfillments_location_ids":[],"created_at":"2025-08-11T19:15:04.494Z","updated_at":"2025-08-11T19:15:04.494Z","default":false,"properties_values":[{"property_id":85,"value":"Red"}],"created_by_platform_application":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/products/variants/{variant_id}/prices":{"post":{"tags":["Products::Price"],"summary":"Create Price","description":"Create a new price for a given variant.\nNote that you must set a `variant_id` in the path.\n","operationId":"createProductsPrices","parameters":[{"name":"variant_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Price","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_price":{"type":"object","$ref":"#/components/schemas/ProductsPriceParameters"}}},"examples":{"one_time":{"summary":"A one-off price","value":{"products_price":{"name":"Example Price","amount":"100.00","cost":"0.00","payment_type":"one_time","visible":true}}},"subscription":{"summary":"A subscription billed every 3 months","value":{"products_price":{"name":"Quarterly Membership","amount":"144.00","payment_type":"subscription","interval":"months","interval_count":3,"visible":true}}},"subscription_with_trial":{"summary":"A monthly subscription with a 14-day free trial","value":{"products_price":{"name":"Monthly With Trial","amount":"97.00","payment_type":"subscription","interval":"months","interval_count":1,"trial_interval":"days","trial_duration":14,"trial_amount":"0.00","visible":true}}},"payment_plan":{"summary":"A payment plan of 4 monthly installments","value":{"products_price":{"name":"Four Easy Payments","amount":"50.00","payment_type":"payment_plan","interval":"months","interval_count":1,"duration":4,"visible":true}}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsPriceAttributes"},"example":{"id":14,"public_id":"WpEGzF","variant_id":14,"name":"Example Price","amount":"100.00","cost":"0.00","currency":"USD","duration":null,"interval":null,"trial_interval":null,"trial_duration":null,"trial_amount":"0.00","setup_amount":null,"self_cancel":true,"self_upgrade":true,"self_downgrade":true,"self_reactivate":true,"interval_count":null,"payment_type":"one_time","visible":true,"compare_at_amount":null,"key":null,"archived":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"422":{"description":"Unprocessable Entity - validation failed","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"singular_interval":{"summary":"interval given in the singular","value":{"error":"Request unprocessable: Interval is not included in the list","hint":null}}}}}}}}},"/workspaces/{workspace_id}/products/tags":{"get":{"tags":["Products::Tag"],"summary":"List Tags","description":"List tags for a product","operationId":"listProductsTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of tag IDs to filter by.","example":"1,2,3"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ProductsTagAttributes"}},"example":[{"id":233,"public_id":"NHwBZW","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":234,"public_id":"HkUfqm","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Products::Tag"],"summary":"Create Tag","description":"Add a new tag to a product","operationId":"createProductsTags","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_tag":{"type":"object","$ref":"#/components/schemas/ProductsTagParameters"}}},"example":{"products_tag":{"name":"Example Tag","color":"#FF5733"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsTagAttributes"},"example":{"id":236,"public_id":"mvKHhi","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/products/tags/{id}":{"get":{"tags":["Products::Tag"],"summary":"Fetch Tag","description":"Retrieve a tag for a product","operationId":"getProductsTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsTagAttributes"},"example":{"id":235,"public_id":"vUSJqN","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Products::Tag"],"summary":"Update Tag","description":"Update a tag for a product","operationId":"updateProductsTags","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Tag","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"products_tag":{"type":"object","$ref":"#/components/schemas/ProductsTagParametersUpdate"}}},"example":{"products_tag":{"name":"Example Product Tag","color":"#FF5733"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductsTagAttributes"},"example":{"id":238,"public_id":"VrjPvD","workspace_id":42000,"name":"Example Tag","color":"#00FF00","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Products::Tag"],"summary":"Remove Tag","description":"Delete a tag for a product","operationId":"removeProductsTags","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/refine_filters":{"get":{"tags":["RefineFilter"],"summary":"List Refine Filters","description":"List saved filters in a workspace, ordered by id ascending. `after` is the switch between two modes. For backwards compatibility, omitting it returns the complete registry in one payload with no `Pagination-Next` header. Sending it returns bounded pages. For that bounded walk, pass `after=0` on the first request, then pass each `Pagination-Next` value on the next request until the header is absent, which marks the last page. `after=0` is the opt-in itself rather than a row id (real ids start at 1), and it means \"start at the beginning\" in whichever direction `sort_order` asks for, so it also bootstraps a `sort_order=desc` walk. An `after` value that is neither `0` nor a `Pagination-Next` cursor is not a real position and pages nothing. Results can include every filter class saved in the workspace, not only the ones this API authors; inspect `filter_class` before using the `id` or `public_id` as a resource's `stored_filter_id`. Treat returned order filters as read-only here and edit them in the ClickFunnels Orders UI. Create and update operations on this public endpoint author contact filters only. See [Applying existing order filters](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-existing-order-filters) in the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md) for passing an order filter to the orders list.","operationId":"listWorkspaceRefineFilters","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[name]=value`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"name":{"type":"string","description":"Exact-match filter on the saved filter's name (unique per workspace), to resolve a saved filter by name instead of id.","example":"VIP newsletter audience"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"refine_filters":{"type":"array","items":{"$ref":"#/components/schemas/RefineFilterAttributes"}}}},"example":{"refine_filters":[{"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"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["RefineFilter"],"summary":"Create Refine Filter","description":"Create a new contact RefineFilter in the workspace. This endpoint does not create order filters.\nThe `criteria` array must contain at\nleast one entry. Criteria are validated against the\n[safe-condition whitelist](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist) —\nunsupported attributes/clauses return 422 with a pointer to the dev community.\nSee the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md)\nfor the full reference (attributes, clauses, worked examples).\n","operationId":"createWorkspaceRefineFilter","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineFilterParametersCreate"},"example":{"refine_filter":{"name":"VIP newsletter audience","filter_class":"ContactsFilter","conjunction":"and","criteria":[{"attribute":"tags.id","clause":"in","value":["tag-pub-id-1","tag-pub-id-2"]},{"attribute":"purchased_products.id","clause":"equals","value":"prod-pub-id"},{"attribute":"created_at","clause":"gte","value":"2026-01-01T00:00:00Z"}]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineFilterAttributes"},"example":{"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","tag-pub-id-2"]},{"attribute":"purchased_products.id","clause":"equals","value":"prod-pub-id"},{"attribute":"created_at","clause":"gte","value":"2026-01-01"}],"created_at":"2026-04-01T12:00:00.000Z","updated_at":"2026-04-01T12:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"criteria must contain at least one entry","hint":null}}}},"429":{"$ref":"#/components/responses/FilteredQueryConcurrency"},"503":{"$ref":"#/components/responses/FilteredQueryBudget"}}}},"/refine_filters/{id}":{"get":{"tags":["RefineFilter"],"summary":"Fetch Refine Filter","description":"Fetch a single saved filter by its public id. Inspect `filter_class` before applying it to contacts or orders. Treat order filters as read-only here and edit them in the ClickFunnels Orders UI; create and update operations on this public endpoint author contact filters only.","operationId":"getRefineFilter","parameters":[{"name":"id","in":"path","required":true,"description":"Public id of the RefineFilter (e.g. `AbCdEf`).","schema":{"type":"string"}},{"name":"results","in":"query","required":false,"style":"deepObject","explode":true,"description":"Return projected matches inline. Pass `true` for ids only; omit for the filter definition alone.","schema":{"type":["object","boolean"],"properties":{"fields":{"type":"string","description":"Comma-separated fields to project. Defaults to `id`.","example":"id,email_address"},"limit":{"type":"integer","description":"Caller-set row limit. Defaults to 500."},"max_bytes":{"type":"integer","description":"Caller-set row byte budget. Defaults to 3072 and is capped at 4194304."},"after":{"type":"string","description":"Positive-integer cursor from `results.next_after`."},"count":{"type":"boolean","default":false,"description":"Include the bounded total count. May require another filter evaluation."}}}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineFilterAttributes"},"example":{"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"]},{"attribute":"created_at","clause":"gte","value":"2026-01-01"}],"created_at":"2026-04-01T12:00:00.000Z","updated_at":"2026-04-01T12:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden — the token does not grant read access to this filter, or `results` was\nrequested for a filter whose matching records belong to a category the token was not\ngranted (a saved filter may select contacts or orders, and the projection is authorized\nagainst whichever it selects).\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"This access token's scopes do not grant read access to Store, so it cannot read this filter's matching records. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — invalid result projection or filter state","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Unknown results.fields for contact: favourite_colour","hint":null}}}},"429":{"$ref":"#/components/responses/FilteredQueryConcurrency"},"503":{"$ref":"#/components/responses/FilteredQueryBudget"}}},"patch":{"tags":["RefineFilter"],"summary":"Update Refine Filter","description":"Update an existing RefineFilter. All fields are optional — only provided fields are\nupdated. When `criteria` is supplied it replaces the entire criteria set (must contain\nat least one entry). 422 covers shape errors and\n[safe-condition policy](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#safe-condition-whitelist) violations.\n","operationId":"updateRefineFilter","parameters":[{"name":"id","in":"path","required":true,"description":"Public id of the RefineFilter to update.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineFilterParametersUpdate"},"example":{"refine_filter":{"conjunction":"and","criteria":[{"attribute":"tags.id","clause":"in","value":["tag-pub-id-1"]},{"attribute":"created_at","clause":"gte","value":"2026-01-01"}]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineFilterAttributes"},"example":{"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"]},{"attribute":"created_at","clause":"gte","value":"2026-01-01"}],"created_at":"2026-04-01T12:00:00.000Z","updated_at":"2026-04-02T09:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden -- the token does not grant WRITE access to Contacts. This endpoint authors\ncontact filters only, whatever the loaded filter currently is, so it is authorized\nagainst Contacts rather than against the stored filter's own category.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"This access token's scopes do not grant write access to Contacts. Granted scopes: store:write.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"criteria must contain at least one entry","hint":null}}}},"429":{"$ref":"#/components/responses/FilteredQueryConcurrency"},"503":{"$ref":"#/components/responses/FilteredQueryBudget"}}},"delete":{"tags":["RefineFilter"],"summary":"Destroy Refine Filter","description":"Delete a RefineFilter. Note that deleting a filter that is currently attached to a\nconditional split step or other surface will leave those surfaces without a filter\n(`condition.filter_id` will remain but the filter record will no longer exist).\nDetach the filter from all consumers before deleting.\nSee [Applying filters to consumers](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md#applying-filters-to-consumers) in the [Refine Filters Skill](https://accounts.myclickfunnels.com/.well-known/refine-filters/skill.md) for the surfaces that hold a filter id.\n","operationId":"destroyRefineFilter","parameters":[{"name":"id","in":"path","required":true,"description":"Public id of the RefineFilter to delete.","schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"503":{"description":"Service Unavailable -- a transient dependency was unavailable; retry the request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Service unavailable: Transient service issue: Please try again shortly.","hint":null}}}}}}},"/workspaces/{workspace_id}/sales/pipelines":{"get":{"tags":["Sales::Pipeline"],"summary":"List Pipelines","description":"List Pipelines","operationId":"listSalesPipelines","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of pipeline IDs to filter by.","example":"1,42"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SalesPipelineAttributes"}},"example":[{"id":5,"public_id":"zbeuIi","workspace_id":42000,"name":"Example Pipeline","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"stages":[{"id":46,"public_id":"sjARSr","workspace_id":6,"pipeline_id":5,"name":"Example Stage","sort_order":12,"close_probability":20.0,"opportunity_ids":[25,26],"total_value":0,"weighted_value":0.0},{"id":47,"public_id":"EqRVKx","workspace_id":6,"pipeline_id":5,"name":"Example Stage","sort_order":13,"close_probability":20.0,"opportunity_ids":[27,28],"total_value":0,"weighted_value":0.0}]},{"id":6,"public_id":"jweGuo","workspace_id":42000,"name":"Example Pipeline","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"stages":[{"id":48,"public_id":"IuhMTS","workspace_id":7,"pipeline_id":6,"name":"Example Stage","sort_order":14,"close_probability":20.0,"opportunity_ids":[29,30],"total_value":0,"weighted_value":0.0},{"id":49,"public_id":"ypXweP","workspace_id":7,"pipeline_id":6,"name":"Example Stage","sort_order":15,"close_probability":20.0,"opportunity_ids":[31,32],"total_value":0,"weighted_value":0.0}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Sales::Pipeline"],"summary":"Create Pipeline","description":"Create Pipeline","operationId":"createSalesPipelines","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Pipeline","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_pipeline":{"type":"object","$ref":"#/components/schemas/SalesPipelineParameters"}}},"example":{"sales_pipeline":{"name":"Example Pipeline","stages_attributes":[{"name":"New Leads","close_probability":20},{"name":"Closed Won","close_probability":100}]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesPipelineAttributes"},"example":{"id":8,"public_id":"WCoLcG","workspace_id":42000,"name":"Example Pipeline","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"stages":[{"id":52,"public_id":"ZJntBy","workspace_id":10,"pipeline_id":8,"name":"Example Stage","sort_order":18,"close_probability":20.0,"opportunity_ids":[37,38],"total_value":0,"weighted_value":0.0},{"id":53,"public_id":"KBhPxe","workspace_id":10,"pipeline_id":8,"name":"Example Stage","sort_order":19,"close_probability":20.0,"opportunity_ids":[39,40],"total_value":0,"weighted_value":0.0}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/sales/pipelines/{id}":{"get":{"tags":["Sales::Pipeline"],"summary":"Fetch Pipeline","description":"Fetch Pipeline","operationId":"getSalesPipelines","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesPipelineAttributes"},"example":{"id":7,"public_id":"thGBgk","workspace_id":42000,"name":"Example Pipeline","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"stages":[{"id":50,"public_id":"iTRzlA","workspace_id":9,"pipeline_id":7,"name":"Example Stage","sort_order":16,"close_probability":20.0,"opportunity_ids":[33,34],"total_value":0,"weighted_value":0.0},{"id":51,"public_id":"RuYgxI","workspace_id":9,"pipeline_id":7,"name":"Example Stage","sort_order":17,"close_probability":20.0,"opportunity_ids":[35,36],"total_value":0,"weighted_value":0.0}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Sales::Pipeline"],"summary":"Update Pipeline","description":"Update Pipeline","operationId":"updateSalesPipelines","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Pipeline","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_pipeline":{"type":"object","$ref":"#/components/schemas/SalesPipelineParametersUpdate"}}},"example":{"sales_pipeline":{"name":"Example Pipeline"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesPipelineAttributes"},"example":{"id":10,"public_id":"SPTdGI","workspace_id":42000,"name":"Example Pipeline","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"stages":[{"id":56,"public_id":"jnTgEi","workspace_id":12,"pipeline_id":10,"name":"Example Stage","sort_order":22,"close_probability":20.0,"opportunity_ids":[45,46],"total_value":0,"weighted_value":0.0},{"id":57,"public_id":"RQbqGf","workspace_id":12,"pipeline_id":10,"name":"Example Stage","sort_order":23,"close_probability":20.0,"opportunity_ids":[47,48],"total_value":0,"weighted_value":0.0}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Sales::Pipeline"],"summary":"Remove Pipeline","description":"Delete a pipeline and its stages. The pipeline must be empty: if any opportunities remain in its stages the request is rejected with 422, so delete those opportunities or move them to another pipeline first.","operationId":"removeSalesPipelines","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Pipeline must be empty before it can be deleted. Delete its opportunities (DELETE /api/v2/sales/opportunities/{id}) or move them to another pipeline (PATCH /api/v2/sales/opportunities/{id} with a pipelines_stage_id from the target pipeline), then retry.","hint":null}}}}}}},"/sales/pipelines/{pipeline_id}/stages":{"get":{"tags":["Sales::Pipelines::Stage"],"summary":"List Stages","description":"List Stages","operationId":"listSalesPipelinesStages","parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","sort_order"]}},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of stage IDs to filter by (within the scope of the pipeline).","example":"1,42"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SalesPipelinesStageAttributes"}},"example":[{"id":66,"public_id":"fJDyLu","workspace_id":17,"pipeline_id":14,"name":"Example Stage","sort_order":32,"close_probability":20.0,"opportunity_ids":[65,66],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"weighted_value":0.0},{"id":69,"public_id":"TpgUQq","workspace_id":18,"pipeline_id":15,"name":"Example Stage","sort_order":35,"close_probability":20.0,"opportunity_ids":[71,72],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"weighted_value":0.0}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Sales::Pipelines::Stage"],"summary":"Create Stage","description":"Create Stage","operationId":"createSalesPipelinesStages","parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Stage","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_pipelines_stage":{"type":"object","$ref":"#/components/schemas/SalesPipelinesStageParameters"}}},"example":{"sales_pipelines_stage":{"name":"Example Stage","sort_order":5,"close_probability":20.0}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesPipelinesStageAttributes"},"example":{"id":75,"public_id":"hDurGw","workspace_id":20,"pipeline_id":17,"name":"Example Stage","sort_order":41,"close_probability":20.0,"opportunity_ids":[83,84],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"weighted_value":0.0}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/sales/pipelines/stages/{id}":{"get":{"tags":["Sales::Pipelines::Stage"],"summary":"Fetch Stage","description":"Fetch Stage","operationId":"getSalesPipelinesStages","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesPipelinesStageAttributes"},"example":{"id":72,"public_id":"RApgVt","workspace_id":19,"pipeline_id":16,"name":"Example Stage","sort_order":38,"close_probability":20.0,"opportunity_ids":[77,78],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"weighted_value":0.0}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Sales::Pipelines::Stage"],"summary":"Update Stage","description":"Update Stage","operationId":"updateSalesPipelinesStages","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Stage","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_pipelines_stage":{"type":"object","$ref":"#/components/schemas/SalesPipelinesStageParametersUpdate"}}},"example":{"sales_pipelines_stage":{"name":"Example Stage","sort_order":5,"close_probability":20}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesPipelinesStageAttributes"},"example":{"id":81,"public_id":"jFSCAf","workspace_id":22,"pipeline_id":19,"name":"Example Stage","sort_order":47,"close_probability":20.0,"opportunity_ids":[95,96],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","total_value":0,"weighted_value":0.0}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Sales::Pipelines::Stage"],"summary":"Remove Stage","description":"Remove Stage","operationId":"removeSalesPipelinesStages","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/sales/opportunities":{"get":{"tags":["Sales::Opportunity"],"summary":"List Opportunities","description":"List Opportunities","operationId":"listSalesOpportunities","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"name":"sort_property","in":"query","description":"Sort property of a list response. The default is id and thus the created_at order.\nIf you sort by other properties, we additionally sort by id implicitly as a secondary sort property, so that you can rely on the sort order to be deterministic even if the main sort property ends up with the same values.\n","required":false,"schema":{"type":"string","enum":["id","updated_at","sort_order"]}},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of opportunity IDs to filter by.","example":"1,42"},"pipeline_id":{"type":"string","description":"A comma-separated list of pipeline IDs to filter by.","example":"1,42"},"pipelines_stage_id":{"type":"string","description":"A comma-separated list of pipelines stage IDs to filter by.","example":"1,42"},"primary_contact_id":{"type":"string","description":"A comma-separated list of primary contact IDs to filter by.","example":"1,42"},"assignee_id":{"type":"string","description":"A comma-separated list of assignee memberships IDs to filter by.","example":"1,42"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SalesOpportunityAttributes"}},"example":[{"id":121,"public_id":"btWsEF","name":"Example Opportunity","workspace_id":42000,"pipeline_id":null,"pipelines_stage_id":93,"primary_contact_id":230,"value":"100.0","sort_order":0,"closed_at":"2025-01-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","pipeline":{"id":23,"public_id":"HitAmN","name":"Example Pipeline"},"pipelines_stage":{"id":93,"public_id":"hDwypl","name":"Example Stage"},"primary_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,"deleted_at":null,"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"}}},"assignee_id":null,"notes":[{"id":242,"public_id":"yYtAjP","content":"Example note","created_by_id":270,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":243,"public_id":"CvSOcu","content":"Example note","created_by_id":271,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]},{"id":128,"public_id":"GbjyKd","name":"Example Opportunity","workspace_id":42000,"pipeline_id":null,"pipelines_stage_id":96,"primary_contact_id":237,"value":"100.0","sort_order":1,"closed_at":"2025-01-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","pipeline":{"id":24,"public_id":"mtrsfR","name":"Example Pipeline"},"pipelines_stage":{"id":96,"public_id":"tdzsUR","name":"Example Stage"},"primary_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,"deleted_at":null,"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"}}},"assignee_id":null,"notes":[{"id":256,"public_id":"ljeBRN","content":"Example note","created_by_id":284,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":257,"public_id":"KAeTQr","content":"Example note","created_by_id":285,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Sales::Opportunity"],"summary":"Create Opportunity","description":"Create Opportunity","operationId":"createSalesOpportunities","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Opportunity","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_opportunity":{"type":"object","$ref":"#/components/schemas/SalesOpportunityParameters"}}},"example":{"sales_opportunity":{"name":"Example Opportunity","pipelines_stage_id":42,"primary_contact_id":26,"value":"100.0","closed_at":"2025-01-01T00:00:00.000Z","assignee_id":42}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOpportunityAttributes"},"example":{"id":142,"public_id":"ErgUxn","name":"Example Opportunity","workspace_id":42000,"pipeline_id":null,"pipelines_stage_id":102,"primary_contact_id":251,"value":"100.0","sort_order":0,"closed_at":"2025-01-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","pipeline":{"id":26,"public_id":"klSaQR","name":"Example Pipeline"},"pipelines_stage":{"id":102,"public_id":"ZeQGtn","name":"Example Stage"},"primary_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,"deleted_at":null,"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"}}},"assignee_id":null,"notes":[{"id":284,"public_id":"weRPKo","content":"Example note","created_by_id":312,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":285,"public_id":"WaGtCQ","content":"Example note","created_by_id":313,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/sales/opportunities/{id}":{"get":{"tags":["Sales::Opportunity"],"summary":"Fetch Opportunity","description":"Fetch Opportunity","operationId":"getSalesOpportunities","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOpportunityAttributes"},"example":{"id":135,"public_id":"wyMSmr","name":"Example Opportunity","workspace_id":42000,"pipeline_id":null,"pipelines_stage_id":99,"primary_contact_id":244,"value":"100.0","sort_order":0,"closed_at":"2025-01-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","pipeline":{"id":25,"public_id":"sWhAUF","name":"Example Pipeline"},"pipelines_stage":{"id":99,"public_id":"lBFCsR","name":"Example Stage"},"primary_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,"deleted_at":null,"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"}}},"assignee_id":null,"notes":[{"id":270,"public_id":"okUbaV","content":"Example note","created_by_id":298,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":271,"public_id":"rxOKWC","content":"Example note","created_by_id":299,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Sales::Opportunity"],"summary":"Update Opportunity","description":"Update Opportunity","operationId":"updateSalesOpportunities","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Opportunity","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_opportunity":{"type":"object","$ref":"#/components/schemas/SalesOpportunityParametersUpdate"}}},"example":{"sales_opportunity":{"name":"Example Opportunity","pipelines_stage_id":123,"primary_contact_id":123,"value":"100.0","closed_at":"2025-01-01T00:00:00.000Z","assignee_id":42}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOpportunityAttributes"},"example":{"id":156,"public_id":"eJQgIk","name":"Example Opportunity","workspace_id":42000,"pipeline_id":null,"pipelines_stage_id":108,"primary_contact_id":265,"value":"100.0","sort_order":0,"closed_at":"2025-01-01T00:00:00.000Z","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","pipeline":{"id":28,"public_id":"pkaWNV","name":"Example Pipeline"},"pipelines_stage":{"id":108,"public_id":"HBTcXq","name":"Example Stage"},"primary_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,"deleted_at":null,"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"}}},"assignee_id":null,"notes":[{"id":312,"public_id":"MrjuLR","content":"Example note","created_by_id":340,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":313,"public_id":"HlkFNB","content":"Example note","created_by_id":341,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Sales::Opportunity"],"summary":"Remove Opportunity","description":"Remove Opportunity","operationId":"removeSalesOpportunities","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/sales/opportunities/{opportunity_id}/notes":{"get":{"tags":["Sales::Opportunities::Note"],"summary":"List Notes","description":"List Notes","operationId":"listSalesOpportunitiesNotes","parameters":[{"name":"opportunity_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by available properties in query params, like this: `api/v2/resources?filter[id]=value\u0026filter[another_property]=value1,value2`. Check our Filtering guide for examples and all about filtering [here](https://developers.myclickfunnels.com/docs/filtering).\n","required":false,"schema":{"type":"object","properties":{"id":{"type":"string","description":"A comma-separated list of note IDs to filter by (within the scope of the opportunity).","example":"1,42"},"created_by_id":{"type":"string","description":"A comma-separated list of memberships IDs to filter by.","example":"1,42"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SalesOpportunitiesNoteAttributes"}},"example":[{"id":370,"public_id":"qenzYJ","opportunity_id":184,"content":"Example note","created_by_id":398,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":385,"public_id":"lmPuLs","opportunity_id":191,"content":"Example note","created_by_id":413,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Sales::Opportunities::Note"],"summary":"Create Note","description":"Create Note","operationId":"createSalesOpportunitiesNotes","parameters":[{"name":"opportunity_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Note","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_opportunities_note":{"type":"object","$ref":"#/components/schemas/SalesOpportunitiesNoteParameters"}}},"example":{"sales_opportunities_note":{"content":"Example note","created_by_id":42}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOpportunitiesNoteAttributes"},"example":{"id":415,"public_id":"iDXPLk","opportunity_id":205,"content":"Example note","created_by_id":443,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/sales/opportunities/notes/{id}":{"get":{"tags":["Sales::Opportunities::Note"],"summary":"Fetch Note","description":"Fetch Note","operationId":"getSalesOpportunitiesNotes","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOpportunitiesNoteAttributes"},"example":{"id":400,"public_id":"rNdsgj","opportunity_id":198,"content":"Example note","created_by_id":428,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Sales::Opportunities::Note"],"summary":"Update Note","description":"Update Note","operationId":"updateSalesOpportunitiesNotes","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Note","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sales_opportunities_note":{"type":"object","$ref":"#/components/schemas/SalesOpportunitiesNoteParametersUpdate"}}},"example":{"sales_opportunities_note":{"content":"Example Note","created_by_id":42}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SalesOpportunitiesNoteAttributes"},"example":{"id":445,"public_id":"sLzcfJ","opportunity_id":219,"content":"Example note","created_by_id":473,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Sales::Opportunities::Note"],"summary":"Remove Note","description":"Remove Note","operationId":"removeSalesOpportunitiesNotes","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/shipping/profiles/{profile_id}/location_groups":{"get":{"tags":["Shipping::LocationGroup"],"summary":"List Location Groups","description":"List location groups for a profile","operationId":"listShippingLocationGroups","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShippingLocationGroupAttributes"}},"example":[{"id":4,"public_id":"KAvVmw","profile_id":5,"name":"Example Location Group","fulfillments_location_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":5,"public_id":"sgMxHj","profile_id":6,"name":"Example Location Group","fulfillments_location_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/shipping/location_groups/{id}":{"get":{"tags":["Shipping::LocationGroup"],"summary":"Fetch Location Group","description":"Retrieve a location group for a profile","operationId":"getShippingLocationGroups","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingLocationGroupAttributes"},"example":{"id":6,"public_id":"MmiBXH","profile_id":7,"name":"Example Location Group","fulfillments_location_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/shipping/packages":{"get":{"tags":["Shipping::Package"],"summary":"List Packages","description":"List packages for a workspace","operationId":"listShippingPackages","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShippingPackageAttributes"}},"example":[{"id":2,"public_id":"HVNCpb","package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","token":null,"carrier":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":3,"public_id":"yPrxfQ","package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","token":null,"carrier":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Shipping::Package"],"summary":"Create Package","description":"Add a new package to a workspace","operationId":"createShippingPackages","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Package","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_package":{"type":"object","$ref":"#/components/schemas/ShippingPackageParameters"}}},"example":{"shipping_package":{"package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","carrier":null}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingPackageAttributes"},"example":{"id":5,"public_id":"ybLWXM","package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","token":null,"carrier":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/shipping/packages/{id}":{"get":{"tags":["Shipping::Package"],"summary":"Fetch Package","description":"Retrieve a package for a workspace","operationId":"getShippingPackages","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingPackageAttributes"},"example":{"id":4,"public_id":"XwHOCQ","package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","token":null,"carrier":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Shipping::Package"],"summary":"Update Package","description":"Update a package for a workspace","operationId":"updateShippingPackages","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Package","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_package":{"type":"object","$ref":"#/components/schemas/ShippingPackageParametersUpdate"}}},"example":{"shipping_package":{"package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","carrier":null}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingPackageAttributes"},"example":{"id":7,"public_id":"NsGJSg","package_type":"box","height":"4.0","width":"2.0","length":"2.0","distance_unit":"in","empty_weight":null,"weight":"0.0","weight_unit":"lb","default_package":false,"name":"Example Package","token":null,"carrier":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Shipping::Package"],"summary":"Remove Package","description":"Delete a package for a workspace","operationId":"removeShippingPackages","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/shipping/profiles":{"get":{"tags":["Shipping::Profile"],"summary":"List Profiles","description":"List shipping profiles for a workspace","operationId":"listShippingProfiles","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShippingProfileAttributes"}},"example":[{"id":14,"public_id":"JdqHSV","name":"Example Shipping Profile","variant_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":15,"public_id":"yKimcL","name":"Example Shipping Profile","variant_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Shipping::Profile"],"summary":"Create Profile","description":"Add a new shipping profile to a workspace","operationId":"createShippingProfiles","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Profile","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_profile":{"type":"object","$ref":"#/components/schemas/ShippingProfileParameters"}}},"example":{"shipping_profile":{"name":"Example Shipping Profile","variant_ids":[]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingProfileAttributes"},"example":{"id":17,"public_id":"wNmEyr","name":"Example Shipping Profile","variant_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/shipping/profiles/{id}":{"get":{"tags":["Shipping::Profile"],"summary":"Fetch Profile","description":"Retrieve a shipping profile for a workspace","operationId":"getShippingProfiles","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingProfileAttributes"},"example":{"id":16,"public_id":"KXZDCa","name":"Example Shipping Profile","variant_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Shipping::Profile"],"summary":"Update Profile","description":"Update a shipping profile for a workspace","operationId":"updateShippingProfiles","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Profile","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_profile":{"type":"object","$ref":"#/components/schemas/ShippingProfileParametersUpdate"}}},"example":{"shipping_profile":{"name":"Example Shipping","variant_ids":[]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingProfileAttributes"},"example":{"id":19,"public_id":"BIKTCq","name":"Example Shipping Profile","variant_ids":[],"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Shipping::Profile"],"summary":"Remove Profile","description":"Delete a shipping profile for a workspace","operationId":"removeShippingProfiles","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/shipping/zones/{zone_id}/rates":{"get":{"tags":["Shipping::Rate"],"summary":"List Rates","description":"List shipping rates for a zone","operationId":"listShippingRates","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShippingRateAttributes"}},"example":[{"id":2,"public_id":"EQcBiN","zone_id":3,"description":"Example Shipping Rates Name","provider_name":"Riley Bode","price":"10.00","price_currency":"USD","rates_name_id":3,"live_rates_provider":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":3,"public_id":"YqAsmi","zone_id":4,"description":"Example Shipping Rates Name","provider_name":"Mr. Lynelle Runte","price":"10.00","price_currency":"USD","rates_name_id":4,"live_rates_provider":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Shipping::Rate"],"summary":"Create Rate","description":"Add a new shipping rate to a zone","operationId":"createShippingRates","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Rate","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_rate":{"type":"object","$ref":"#/components/schemas/ShippingRateParameters"}}},"example":{"shipping_rate":{"provider_name":"Tammera Kihn DO","price":"10.00","price_currency":"USD","rates_name_id":1,"live_rates_provider":null}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingRateAttributes"},"example":{"id":5,"public_id":"OLYIDm","zone_id":6,"description":"Example Shipping Rates Name","provider_name":"Darleen Carroll","price":"10.00","price_currency":"USD","rates_name_id":6,"live_rates_provider":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/shipping/rates/{id}":{"get":{"tags":["Shipping::Rate"],"summary":"Fetch Rate","description":"Retrieve a shipping rate for a zone","operationId":"getShippingRates","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingRateAttributes"},"example":{"id":4,"public_id":"TGMgAZ","zone_id":5,"description":"Example Shipping Rates Name","provider_name":"Iraida Cummerata Sr.","price":"10.00","price_currency":"USD","rates_name_id":5,"live_rates_provider":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Shipping::Rate"],"summary":"Update Rate","description":"Update a shipping rate for a zone","operationId":"updateShippingRates","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Rate","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_rate":{"type":"object","$ref":"#/components/schemas/ShippingRateParametersUpdate"}}},"example":{"shipping_rate":{"provider_name":"Tammera Kihn DO","price":"10.00","price_currency":"USD","rates_name_id":1,"live_rates_provider":null}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingRateAttributes"},"example":{"id":7,"public_id":"jgYIbw","zone_id":8,"description":"Example Shipping Rates Name","provider_name":"The Hon. Demetrius Kreiger","price":"10.00","price_currency":"USD","rates_name_id":8,"live_rates_provider":null,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Shipping::Rate"],"summary":"Remove Rate","description":"Delete a shipping rate for a zone","operationId":"removeShippingRates","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/shipping/location_groups/{location_group_id}/zones":{"get":{"tags":["Shipping::Zone"],"summary":"List Zones","description":"List zones for a location group","operationId":"listShippingZones","parameters":[{"name":"location_group_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShippingZoneAttributes"}},"example":[{"id":12,"public_id":"JEXAoc","location_group_id":22,"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[],"country_ids":[],"includes_rest_of_world":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":null},{"id":13,"public_id":"Wrbnmx","location_group_id":23,"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,4851],"country_ids":[],"includes_rest_of_world":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Shipping::Zone"],"summary":"Create Zone","description":"Add a new zone to a location group","operationId":"createShippingZones","parameters":[{"name":"location_group_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Zone","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_zone":{"type":"object","$ref":"#/components/schemas/ShippingZoneParameters"}}},"example":{"shipping_zone":{"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[],"country_ids":[],"includes_rest_of_world":false}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingZoneAttributes"},"example":{"id":15,"public_id":"tIdLWR","location_group_id":25,"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,4851],"country_ids":[],"includes_rest_of_world":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/shipping/zones/{id}":{"get":{"tags":["Shipping::Zone"],"summary":"Fetch Zone","description":"Retrieve a zone for a location group","operationId":"getShippingZones","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingZoneAttributes"},"example":{"id":14,"public_id":"ngoLYB","location_group_id":24,"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[],"country_ids":[],"includes_rest_of_world":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Shipping::Zone"],"summary":"Update Zone","description":"Update a zone for a location group","operationId":"updateShippingZones","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Zone","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_zone":{"type":"object","$ref":"#/components/schemas/ShippingZoneParametersUpdate"}}},"example":{"shipping_zone":{"name":"Rory Metz","address_filter_id":null,"region_ids":[],"country_ids":[],"includes_rest_of_world":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingZoneAttributes"},"example":{"id":17,"public_id":"snbPrH","location_group_id":27,"name":"Example Shipping Zone","address_filter_id":null,"region_ids":[1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,4851],"country_ids":[],"includes_rest_of_world":false,"created_at":"2025-01-01T00:00:00.000Z","updated_at":null}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Shipping::Zone"],"summary":"Remove Zone","description":"Delete a zone for a location group","operationId":"removeShippingZones","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/shipping/rates/names":{"get":{"tags":["Shipping::Rates::Name"],"summary":"List Names","description":"List rate names for a shipping profile","operationId":"listShippingRatesNames","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ShippingRatesNameAttributes"}},"example":[{"id":12,"public_id":"tnZCWH","workspace_id":42000,"name":"Example Shipping Rates Name","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"},{"id":13,"public_id":"TXNZFQ","workspace_id":42000,"name":"Example Shipping Rates Name","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Shipping::Rates::Name"],"summary":"Create Name","description":"Add a new rate name to a shipping profile","operationId":"createShippingRatesNames","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Name","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_rates_name":{"type":"object","$ref":"#/components/schemas/ShippingRatesNameParameters"}}},"example":{"shipping_rates_name":{"name":"Example Shipping Rates Name"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingRatesNameAttributes"},"example":{"id":15,"public_id":"sihAmw","workspace_id":42000,"name":"Example Shipping Rates Name","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/shipping/rates/names/{id}":{"get":{"tags":["Shipping::Rates::Name"],"summary":"Fetch Name","description":"Retrieve a rate name for a shipping profile","operationId":"getShippingRatesNames","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingRatesNameAttributes"},"example":{"id":14,"public_id":"kLumcW","workspace_id":42000,"name":"Example Shipping Rates Name","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Shipping::Rates::Name"],"summary":"Update Name","description":"Update a rate name for a shipping profile","operationId":"updateShippingRatesNames","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Name","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shipping_rates_name":{"type":"object","$ref":"#/components/schemas/ShippingRatesNameParametersUpdate"}}},"example":{"shipping_rates_name":{"name":"Example Shipping"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShippingRatesNameAttributes"},"example":{"id":17,"public_id":"vgxZie","workspace_id":42000,"name":"Example Shipping Rates Name","created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Shipping::Rates::Name"],"summary":"Remove Name","description":"Delete a rate name for a shipping profile","operationId":"removeShippingRatesNames","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/stores":{"get":{"tags":["Store"],"summary":"List Stores","description":"List Stores","operationId":"listStores","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StoreAttributes"}},"example":[{"id":2,"public_id":"QAPwuI","name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft","created_at":null,"updated_at":null,"workspace_id":42000},{"id":3,"public_id":"ZnVywX","name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft","created_at":null,"updated_at":null,"workspace_id":42000}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Store"],"summary":"Create Store","description":"Create Store","operationId":"createStores","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Store","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"store":{"type":"object","$ref":"#/components/schemas/StoreParameters"}}},"example":{"store":{"name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreAttributes"},"example":{"id":5,"public_id":"TxdbiC","name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft","created_at":null,"updated_at":null,"workspace_id":42000}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/stores/{id}":{"get":{"tags":["Store"],"summary":"Fetch Store","description":"Fetch Store","operationId":"getStores","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreAttributes"},"example":{"id":4,"public_id":"xUHtvh","name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft","created_at":null,"updated_at":null,"workspace_id":42000}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Store"],"summary":"Update Store","description":"Update Store","operationId":"updateStores","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Store","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"store":{"type":"object","$ref":"#/components/schemas/StoreParametersUpdate"}}},"example":{"store":{"name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreAttributes"},"example":{"id":7,"public_id":"SLxmql","name":"Example Store","current_path":"/example-store","seo_title":"Example Store","seo_description":"Example Store","seo_indexable":true,"social_image_id":null,"status":"draft","created_at":null,"updated_at":null,"workspace_id":42000}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Store"],"summary":"Remove Store","description":"Remove Store","operationId":"removeStores","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/styles":{"get":{"tags":["Style"],"summary":"List Styles","description":"List Styles","operationId":"listStyles","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StyleAttributes"}},"example":[{"id":8,"public_id":"IBWTyX","workspace_id":42000,"theme_id":3,"name":"Example Style","created_at":null,"updated_at":null},{"id":11,"public_id":"PuvzwN","workspace_id":42000,"theme_id":4,"name":"Example Style","created_at":null,"updated_at":null}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/themes":{"get":{"tags":["Theme"],"summary":"List Themes","description":"List of all themes available in the workspace","operationId":"listThemes","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ThemeAttributes"}},"example":[{"id":12,"public_id":"tVQNHx","workspace_id":42000,"name":"Original Name","custom_name":"Custom Name","current_style_id":33,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","styles":[{"id":33,"name":"Example Style"},{"id":34,"name":"Example Style"}],"template_pages":{}},{"id":13,"public_id":"uthadi","workspace_id":42000,"name":"Original Name","custom_name":"Custom Name","current_style_id":35,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","styles":[{"id":35,"name":"Example Style"},{"id":36,"name":"Example Style"}],"template_pages":{}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/themes/{id}":{"get":{"tags":["Theme"],"summary":"Fetch Theme","description":"Retrieve a theme","operationId":"getThemes","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeAttributes"},"example":{"id":14,"public_id":"tJuxnr","workspace_id":42000,"name":"Original Name","custom_name":"Custom Name","current_style_id":37,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","styles":[{"id":37,"name":"Example Style"},{"id":38,"name":"Example Style"}],"template_pages":{}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Theme"],"summary":"Update Theme","description":"Update a theme","operationId":"updateThemes","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Theme","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"theme":{"type":"object","$ref":"#/components/schemas/ThemeParametersUpdate"}}},"example":{"theme":{"custom_name":"Custom Name","current_style_id":5,"template_pages":{"home_template_page":"RcHPAt","not_found_template_page":"Bd2kQ9"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThemeAttributes"},"example":{"id":15,"public_id":"yBbsLE","workspace_id":42000,"name":"Original Name","custom_name":"Custom Name","current_style_id":39,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","styles":[{"id":39,"name":"Example Style"},{"id":40,"name":"Example Style"}],"template_pages":{}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/themes/{id}/set_default":{"post":{"tags":["Theme"],"summary":"Set Default Theme","description":"This will set the specified theme as the default theme for the current workspace.","operationId":"set_defaultThemes","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"404":{"description":"Not Found"},"204":{"description":"No Content"},"422":{"description":"Unprocessable Entity"}}}},"/workspaces/{workspace_id}/webhooks/incoming/external_purchase_endpoints":{"get":{"tags":["Webhooks::Incoming::ExternalPurchaseEndpoint"],"summary":"List Incoming External Purchase Endpoints","description":"List the endpoints that receive purchases from external commerce providers for a workspace.","operationId":"listWebhooksIncomingExternalPurchaseEndpoints","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by `id`, `provider` or `live_mode`, like this: `?filter[provider]=whop\u0026filter[live_mode]=true`. All about filtering [here](https://developers.myclickfunnels.com/docs/filtering).","required":false,"style":"deepObject","explode":true,"schema":{"type":"object","properties":{"id":{"type":"string"},"provider":{"type":"string"},"live_mode":{"type":"string"}}}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEndpointAttributes"}},"example":[{"id":81,"public_id":"WpEndP","workspace_id":42000,"name":"Whop purchases","provider":"whop","live_mode":false,"suppress_order_system_emails":true,"url":"https://example.myclickfunnels.com/webhooks/incoming/external_purchases_webhooks/WpEndP","webhook_secret_last_four":"kLm9","provider_metadata":{"whop":{}},"created_at":"2026-08-26T12:00:00.000Z","updated_at":"2026-08-26T12:05:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant read access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Webhooks. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The workspace does not exist or is outside the API key's accessible workspaces.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}}}},"post":{"tags":["Webhooks::Incoming::ExternalPurchaseEndpoint"],"summary":"Create Incoming External Purchase Endpoint","description":"Create an endpoint for one external commerce provider. Where ClickFunnels generates the\nsigning secret, it is returned as `webhook_secret` in this response only, so save it\nimmediately: later reads return just `webhook_secret_last_four`. Where the provider issues\nits own signing secret, the endpoint is created without one and you `PATCH` it in\nafterwards.\n\nNot every provider is available to every workspace: creating an endpoint for one a\nworkspace has not been granted returns 403.\n","operationId":"createWebhooksIncomingExternalPurchaseEndpoints","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Incoming external purchase endpoint settings.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"webhooks_incoming_external_purchases_endpoint":{"type":"object","$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEndpointParameters"}},"required":["webhooks_incoming_external_purchases_endpoint"]},"example":{"webhooks_incoming_external_purchases_endpoint":{"name":"ClickBank purchases","provider":"clickbank","live_mode":true,"suppress_order_system_emails":false}}}}},"responses":{"201":{"description":"Created. This is the only response that includes the full `webhook_secret`, and only when ClickFunnels generated it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEndpointCreatedAttributes"},"example":{"id":82,"public_id":"CbEndP","workspace_id":42000,"name":"ClickBank purchases","provider":"clickbank","live_mode":true,"suppress_order_system_emails":false,"url":"https://example.myclickfunnels.com/webhooks/incoming/external_purchases_webhooks/CbEndP","webhook_secret_last_four":"f0ac","provider_metadata":{"clickbank":{}},"webhook_secret":"8d5aa2a2d13b4a48be2be8649853f0ac","created_at":"2026-08-26T12:00:00.000Z","updated_at":"2026-08-26T12:00:00.000Z"}}}},"400":{"description":"The JSON body is invalid or the required wrapper is missing.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: param is missing or the value is empty: webhooks_incoming_external_purchases_endpoint","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant write access to Webhooks, or the provider is not enabled for this workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"missing_scope":{"summary":"The token cannot write Webhooks","value":{"error":"Forbidden: This access token's scopes do not grant write access to Webhooks. Granted scopes: webhooks:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}},"provider_not_enabled":{"summary":"The provider is not enabled for this workspace","value":{"error":"Whop is not enabled for this workspace","hint":null}}}}}},"404":{"description":"The workspace does not exist or is outside the API key's accessible workspaces.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}},"422":{"description":"Endpoint validation failed.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Name can't be blank","hint":null}}}}}}},"/webhooks/incoming/external_purchase_endpoints/{id}":{"get":{"tags":["Webhooks::Incoming::ExternalPurchaseEndpoint"],"summary":"Fetch Incoming External Purchase Endpoint","description":"Retrieve one incoming external purchase endpoint. Only the last four characters of its signing secret are returned.","operationId":"getWebhooksIncomingExternalPurchaseEndpoints","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEndpointAttributes"},"example":{"id":81,"public_id":"WpEndP","workspace_id":42000,"name":"Whop purchases","provider":"whop","live_mode":false,"suppress_order_system_emails":true,"url":"https://example.myclickfunnels.com/webhooks/incoming/external_purchases_webhooks/WpEndP","webhook_secret_last_four":"kLm9","provider_metadata":{"whop":{}},"created_at":"2026-08-26T12:00:00.000Z","updated_at":"2026-08-26T12:05:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant read access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Webhooks. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The endpoint does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}}}},"put":{"tags":["Webhooks::Incoming::ExternalPurchaseEndpoint"],"summary":"Update Incoming External Purchase Endpoint","description":"Update the endpoint name or ClickFunnels email-suppression setting. Provider and live/test mode are immutable. For a Whop endpoint this is also where its `ws_` signing secret is set: create the webhook in Whop's dashboard pointing at this endpoint's `url`, then pass the secret Whop showed you. A blank value is ignored, so an unrelated update can never clear a working secret.","operationId":"updateWebhooksIncomingExternalPurchaseEndpoints","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Mutable incoming external purchase endpoint settings.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"webhooks_incoming_external_purchases_endpoint":{"type":"object","$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEndpointParametersUpdate"}},"required":["webhooks_incoming_external_purchases_endpoint"]},"example":{"webhooks_incoming_external_purchases_endpoint":{"name":"Whop purchases - accounting","suppress_order_system_emails":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEndpointAttributes"},"example":{"id":81,"public_id":"WpEndP","workspace_id":42000,"name":"Whop purchases - accounting","provider":"whop","live_mode":false,"suppress_order_system_emails":false,"url":"https://example.myclickfunnels.com/webhooks/incoming/external_purchases_webhooks/WpEndP","webhook_secret_last_four":"kLm9","provider_metadata":{"whop":{}},"created_at":"2026-08-26T12:00:00.000Z","updated_at":"2026-08-26T12:15:00.000Z"}}}},"400":{"description":"The JSON body is invalid or the required wrapper is missing.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: param is missing or the value is empty: webhooks_incoming_external_purchases_endpoint","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant write access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Webhooks. Granted scopes: webhooks:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The endpoint does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}},"422":{"description":"Endpoint validation failed.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"name_blank":{"summary":"The endpoint name is missing.","value":{"error":"Request unprocessable: Name can't be blank","hint":null}},"not_a_whop_signing_secret":{"summary":"The pasted Whop secret is not a ws_ signing secret.","value":{"error":"Request unprocessable: Secret must be the ws_ signing secret Whop showed when the webhook was created","hint":null}}}}}}}},"delete":{"tags":["Webhooks::Incoming::ExternalPurchaseEndpoint"],"summary":"Remove Incoming External Purchase Endpoint","description":"Delete an endpoint that has no retained events. Endpoints with event history cannot be\ndeleted. For Whop, the webhook lives in the merchant's own Whop dashboard, so it stays\nuntouched here and must be removed from the Whop dashboard by its owner.\n","operationId":"removeWebhooksIncomingExternalPurchaseEndpoints","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant write access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Webhooks. Granted scopes: webhooks:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The endpoint does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}},"422":{"description":"The endpoint has retained event history, which must be preserved.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Endpoints with events cannot be deleted because their history must be retained","hint":null}}}}}}},"/webhooks/incoming/external_purchase_endpoints/{endpoint_id}/events":{"get":{"tags":["Webhooks::Incoming::ExternalPurchaseEvent"],"summary":"List Incoming External Purchase Events","description":"List the raw events received by one incoming external purchase endpoint. Events can\nexist without a ClickFunnels order; in that case `order_id` is null. Read a single event\nto get its raw `payload`.\n","operationId":"listWebhooksIncomingExternalPurchaseEvents","parameters":[{"name":"endpoint_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer ID or obfuscated public ID of the incoming external purchase endpoint."},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","description":"Filter by `id`, `event_type` or `processing_status`, like this: `?filter[event_type]=payment.succeeded\u0026filter[processing_status]=success`. All about filtering [here](https://developers.myclickfunnels.com/docs/filtering).","required":false,"style":"deepObject","explode":true,"schema":{"type":"object","properties":{"id":{"type":"string"},"event_type":{"type":"string"},"processing_status":{"type":"string"}}}}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEventAttributes"}},"example":[{"id":301,"public_id":"WhEvtA","workspace_id":42000,"external_purchase_endpoint_id":81,"order_id":null,"event_type":"membership.activated","external_event_id":"evt_abc123","processed_at":null,"processing_status":null,"processing_errors":null,"created_at":"2026-08-26T12:30:00.000Z","updated_at":"2026-08-26T12:30:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant read access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Webhooks. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The endpoint does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}}}}},"/webhooks/incoming/external_purchase_events/{id}":{"get":{"tags":["Webhooks::Incoming::ExternalPurchaseEvent"],"summary":"Fetch Incoming External Purchase Event","description":"Retrieve one raw external purchase event, its raw `payload` and its processing outcome.","operationId":"getWebhooksIncomingExternalPurchaseEvents","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseEventAttributes"},"example":{"id":301,"public_id":"WhEvtA","workspace_id":42000,"external_purchase_endpoint_id":81,"order_id":null,"event_type":"membership.activated","external_event_id":"evt_abc123","payload":{"id":"evt_abc123","type":"membership.activated","data":{"status":"active"}},"processed_at":null,"processing_status":null,"processing_errors":null,"created_at":"2026-08-26T12:30:00.000Z","updated_at":"2026-08-26T12:30:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant read access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Webhooks. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The event does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}}}}},"/webhooks/incoming/external_purchase_endpoints/{external_purchases_endpoint_id}/product_mappings":{"get":{"tags":["Webhooks::Incoming::ExternalPurchaseProductMapping"],"summary":"List Incoming External Purchase Product Mappings","description":"List the external product, plan, or SKU mappings configured for one incoming external purchase endpoint.","operationId":"listWebhooksIncomingExternalPurchaseProductMappings","parameters":[{"name":"external_purchases_endpoint_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer ID or obfuscated public ID of the incoming external purchase endpoint."},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseProductMappingAttributes"}},"example":[{"id":201,"public_id":"PrMapA","external_purchase_endpoint_id":81,"external_product_sku":"plan_monthly","clickfunnels_product":{"id":401,"public_id":"CfProd","name":"Membership"},"clickfunnels_variant":{"id":501,"public_id":"CfVari","name":"Default"},"clickfunnels_price":{"id":601,"public_id":"CfPric","name":"Monthly","currency":"USD","payment_type":"subscription","amount":"29.00"},"created_at":"2026-08-26T12:10:00.000Z","updated_at":"2026-08-26T12:10:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant read access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Webhooks. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The endpoint does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}}}},"post":{"tags":["Webhooks::Incoming::ExternalPurchaseProductMapping"],"summary":"Create Incoming External Purchase Product Mapping","description":"Map one provider product, plan, or SKU identifier to a ClickFunnels variant and\nprice. Both ClickFunnels catalog records must belong to the endpoint's workspace\nand to the same product. `external_product_sku` is the identifier the provider reports for\nwhat was bought, which is not always its product id: the item number for ClickBank, the\nproduct id for CopeCart, the plan id for Whop.\n","operationId":"createWebhooksIncomingExternalPurchaseProductMappings","parameters":[{"name":"external_purchases_endpoint_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer ID or obfuscated public ID of the incoming external purchase endpoint."}],"requestBody":{"description":"External identifier and ClickFunnels catalog records to map.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"external_purchase_product_mapping":{"type":"object","$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseProductMappingParameters"}},"required":["external_purchase_product_mapping"]},"example":{"external_purchase_product_mapping":{"external_product_sku":"plan_monthly","products_variant_id":"CfVari","products_price_id":"CfPric"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseProductMappingAttributes"},"example":{"id":201,"public_id":"PrMapA","external_purchase_endpoint_id":81,"external_product_sku":"plan_monthly","clickfunnels_product":{"id":401,"public_id":"CfProd","name":"Membership"},"clickfunnels_variant":{"id":501,"public_id":"CfVari","name":"Default"},"clickfunnels_price":{"id":601,"public_id":"CfPric","name":"Monthly","currency":"USD","payment_type":"subscription","amount":"29.00"},"created_at":"2026-08-26T12:10:00.000Z","updated_at":"2026-08-26T12:10:00.000Z"}}}},"400":{"description":"The JSON body is invalid or the required wrapper is missing.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: param is missing or the value is empty: external_purchase_product_mapping","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant write access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Webhooks. Granted scopes: webhooks:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The endpoint or selected ClickFunnels catalog record does not exist in this workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}},"422":{"description":"Mapping validation failed, including a duplicate external identifier or a price and variant from different products.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: External product sku has already been taken","hint":null}}}}}}},"/webhooks/incoming/external_purchase_product_mappings/{id}":{"get":{"tags":["Webhooks::Incoming::ExternalPurchaseProductMapping"],"summary":"Fetch Incoming External Purchase Product Mapping","description":"Retrieve one external purchase product mapping and its ClickFunnels product, variant, and price labels.","operationId":"getWebhooksIncomingExternalPurchaseProductMappings","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseProductMappingAttributes"},"example":{"id":201,"public_id":"PrMapA","external_purchase_endpoint_id":81,"external_product_sku":"plan_monthly","clickfunnels_product":{"id":401,"public_id":"CfProd","name":"Membership"},"clickfunnels_variant":{"id":501,"public_id":"CfVari","name":"Default"},"clickfunnels_price":{"id":601,"public_id":"CfPric","name":"Monthly","currency":"USD","payment_type":"subscription","amount":"29.00"},"created_at":"2026-08-26T12:10:00.000Z","updated_at":"2026-08-26T12:10:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant read access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant read access to Webhooks. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The mapping does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}}}},"put":{"tags":["Webhooks::Incoming::ExternalPurchaseProductMapping"],"summary":"Update Incoming External Purchase Product Mapping","description":"Update the external identifier, ClickFunnels variant, or ClickFunnels price for a mapping.","operationId":"updateWebhooksIncomingExternalPurchaseProductMappings","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Mutable mapping fields.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"external_purchase_product_mapping":{"type":"object","$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseProductMappingParametersUpdate"}},"required":["external_purchase_product_mapping"]},"example":{"external_purchase_product_mapping":{"external_product_sku":"plan_annual","products_variant_id":"CfVari","products_price_id":"CfPric"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksIncomingExternalPurchaseProductMappingAttributes"},"example":{"id":201,"public_id":"PrMapA","external_purchase_endpoint_id":81,"external_product_sku":"plan_annual","clickfunnels_product":{"id":401,"public_id":"CfProd","name":"Membership"},"clickfunnels_variant":{"id":501,"public_id":"CfVari","name":"Default"},"clickfunnels_price":{"id":601,"public_id":"CfPric","name":"Annual","currency":"USD","payment_type":"subscription","amount":"290.00"},"created_at":"2026-08-26T12:10:00.000Z","updated_at":"2026-08-26T12:20:00.000Z"}}}},"400":{"description":"The JSON body is invalid or the required wrapper is missing.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: param is missing or the value is empty: external_purchase_product_mapping","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant write access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Webhooks. Granted scopes: webhooks:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The mapping or selected ClickFunnels catalog record does not exist in this workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}},"422":{"description":"Mapping validation failed, including a duplicate external identifier or a price and variant from different products.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Products variant must belong to the same product as the price","hint":null}}}}}},"delete":{"tags":["Webhooks::Incoming::ExternalPurchaseProductMapping"],"summary":"Remove Incoming External Purchase Product Mapping","description":"Delete an external purchase product mapping. This does not delete its ClickFunnels product, variant, or price.","operationId":"removeWebhooksIncomingExternalPurchaseProductMappings","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"The access token does not grant write access to Webhooks.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Forbidden: This access token's scopes do not grant write access to Webhooks. Granted scopes: webhooks:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}},"404":{"description":"The mapping does not exist or belongs to an inaccessible workspace.","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found","hint":null}}}}}}},"/workspaces/{workspace_id}/webhooks/outgoing/endpoints":{"get":{"tags":["Webhooks::Outgoing::Endpoint"],"summary":"List Endpoints","description":"List webhook endpoints for a workspace","operationId":"listWebhooksOutgoingEndpoints","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhooksOutgoingEndpointAttributes"}},"example":[{"id":2,"public_id":"oFinTJ","workspace_id":42000,"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","page_ids":[],"funnel_ids":[],"webhook_secret_last_four":"c3d4"},{"id":3,"public_id":"KlIDGN","workspace_id":42000,"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","page_ids":[],"funnel_ids":[],"webhook_secret_last_four":"c3d4"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Webhooks::Outgoing::Endpoint"],"summary":"Create Endpoint","description":"Add a new webhook endpoint to a workspace","operationId":"createWebhooksOutgoingEndpoints","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"description":"Information about a new Endpoint","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"webhooks_outgoing_endpoint":{"type":"object","$ref":"#/components/schemas/WebhooksOutgoingEndpointParameters"}}},"example":{"webhooks_outgoing_endpoint":{"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"page_ids":[],"funnel_ids":[]}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksOutgoingEndpointCreatedAttributes"},"example":{"id":5,"public_id":"GrVNvI","workspace_id":42000,"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","page_ids":[],"funnel_ids":[],"webhook_secret_last_four":"c3d4","webhook_secret":"3f9a1c7e5b2d4e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0dc3d4"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/webhooks/outgoing/endpoints/{id}":{"get":{"tags":["Webhooks::Outgoing::Endpoint"],"summary":"Fetch Endpoint","description":"Retrieve a webhook endpoint for a workspace","operationId":"getWebhooksOutgoingEndpoints","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksOutgoingEndpointAttributes"},"example":{"id":4,"public_id":"yGJgsb","workspace_id":42000,"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","page_ids":[],"funnel_ids":[],"webhook_secret_last_four":"c3d4"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"put":{"tags":["Webhooks::Outgoing::Endpoint"],"summary":"Update Endpoint","description":"Update a webhook endpoint for a workspace","operationId":"updateWebhooksOutgoingEndpoints","parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"description":"Information about updated fields in Endpoint","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"webhooks_outgoing_endpoint":{"type":"object","$ref":"#/components/schemas/WebhooksOutgoingEndpointParametersUpdate"}}},"example":{"webhooks_outgoing_endpoint":{"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"page_ids":[],"funnel_ids":[]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksOutgoingEndpointAttributes"},"example":{"id":7,"public_id":"esoAND","workspace_id":42000,"url":"https://example.com/some-endpoint-url","name":"Example Endpoint","event_type_ids":["contact.identified","one-time-order.completed"],"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","updated_at":"2025-01-01T00:00:00.000Z","page_ids":[],"funnel_ids":[],"webhook_secret_last_four":"c3d4"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Bad request: HTTP body must be valid JSON","hint":null}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"delete":{"tags":["Webhooks::Outgoing::Endpoint"],"summary":"Remove Endpoint","description":"Delete a webhook endpoint for a workspace","operationId":"removeWebhooksOutgoingEndpoints","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/webhooks/outgoing/events":{"get":{"tags":["Webhooks::Outgoing::Event"],"summary":"List Events","description":"List webhook events for a workspace","operationId":"listWebhooksOutgoingEvents","parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhooksOutgoingEventAttributes"}},"example":[{"id":2,"public_id":"wBbfEk","workspace_id":42000,"uuid":"60df598e94fdd1d53f202bbc1e05fa38","event_type_id":"contact.identified","subject_id":356,"subject_type":"Contact","data":{"id":246579500,"tags":[],"uuid":"3783f37654f74bd2c088c2ffef1ce685","fb_url":null,"anonymous":0,"last_name":null,"public_id":"YYEXRWP","time_zone":null,"created_at":"2024-04-24T09:23:56.649Z","first_name":"Bobby","updated_at":"2024-04-24T09:23:56.871Z","twitter_url":null,"website_url":null,"linkedin_url":null,"phone_number":null,"workspace_id":152039,"email_address":"bobby@fuzzy.com","instagram_url":null,"unsubscribed_at":null,"custom_attributes":{"preference":"always yes"},"last_notification_email_sent_at":null},"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","page":{"id":70,"public_id":"RNqczn","name":"Great Page"},"funnel":{"id":12,"public_id":"NYHMbx","name":"Example Funnel"}},{"id":3,"public_id":"PjwvXK","workspace_id":42000,"uuid":"da366f422fda0814504d5d99ea43c873","event_type_id":"contact.identified","subject_id":357,"subject_type":"Contact","data":{"id":246579500,"tags":[],"uuid":"3783f37654f74bd2c088c2ffef1ce685","fb_url":null,"anonymous":0,"last_name":null,"public_id":"YYEXRWP","time_zone":null,"created_at":"2024-04-24T09:23:56.649Z","first_name":"Bobby","updated_at":"2024-04-24T09:23:56.871Z","twitter_url":null,"website_url":null,"linkedin_url":null,"phone_number":null,"workspace_id":152039,"email_address":"bobby@fuzzy.com","instagram_url":null,"unsubscribed_at":null,"custom_attributes":{"preference":"always yes"},"last_notification_email_sent_at":null},"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","page":{"id":71,"public_id":"btqSVe","name":"Great Page"},"funnel":{"id":13,"public_id":"RdPbtf","name":"Example Funnel"}}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string","description":"Not found - This usually happens when you try to access a record that does not exist in your account. It can also happen when the provided parent record is missing, e.g. you have put in a non-existent Workspaces parent ID."},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/webhooks/outgoing/event_types":{"get":{"tags":["Webhooks::Outgoing::EventType"],"summary":"List Event Types","description":"Returns the complete, authoritative catalog of webhook event types that a webhook endpoint can subscribe to.\nEach entry's `id` field is the exact dotted/slashed string key (e.g. `contact.updated`, `order.completed`, `orders/invoice.paid`)\nto supply verbatim in the `event_type_ids` array when creating or updating a webhook endpoint.\nFetch this list instead of guessing event type identifiers or consulting an external reference — this is the canonical source.\nThis endpoint is global (not scoped to a workspace) and requires a valid API token.\n","operationId":"listWebhooksOutgoingEventTypes","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebhooksOutgoingEventTypeAttributes"}},"example":[{"id":"contact.created","topic":"contact"},{"id":"contact.updated","topic":"contact"},{"id":"contact.identified","topic":"contact"},{"id":"order.completed","topic":"order"},{"id":"orders/invoice.paid","topic":"orders/invoice"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}}}}},"/webhooks/outgoing/events/{id}":{"get":{"tags":["Webhooks::Outgoing::Event"],"summary":"Fetch Event","description":"Retrieve an webhook event for a workspace","operationId":"getWebhooksOutgoingEvents","parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksOutgoingEventAttributes"},"example":{"id":4,"public_id":"IsYPBy","workspace_id":42000,"uuid":"db367bc0feec4c1a09c8d7cfa708143c","event_type_id":"contact.identified","subject_id":358,"subject_type":"Contact","data":{"id":246579500,"tags":[],"uuid":"3783f37654f74bd2c088c2ffef1ce685","fb_url":null,"anonymous":0,"last_name":null,"public_id":"YYEXRWP","time_zone":null,"created_at":"2024-04-24T09:23:56.649Z","first_name":"Bobby","updated_at":"2024-04-24T09:23:56.871Z","twitter_url":null,"website_url":null,"linkedin_url":null,"phone_number":null,"workspace_id":152039,"email_address":"bobby@fuzzy.com","instagram_url":null,"unsubscribed_at":null,"custom_attributes":{"preference":"always yes"},"last_notification_email_sent_at":null},"api_version":2,"created_at":"2025-01-01T00:00:00.000Z","page":{"id":72,"public_id":"xTkhut","name":"Great Page"},"funnel":{"id":14,"public_id":"WUKmDS","name":"Example Funnel"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workspaces/{workspace_id}/workflows":{"get":{"tags":["Workflow"],"summary":"List Workflows","description":"List the standalone automation workflows for a workspace. Supports cursor\npagination and sort.\n","operationId":"listWorkflows","externalDocs":{"description":"Workflows Skill - build and configure automations via the API","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowAttributes"}},"example":[{"id":101,"public_id":"WfAbCd","workspace_id":5001,"name":"New Lead Nurture","status":"live","disabled":false,"archived":false,"run_type":"asynchronous","active_runs_count":12,"completed_runs_count":340,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-10T00:00:00.000Z"},{"id":102,"public_id":"WfEfGh","workspace_id":5001,"name":"Post-Purchase Upsell","status":"draft","disabled":true,"archived":false,"run_type":"asynchronous","active_runs_count":0,"completed_runs_count":0,"created_at":"2025-06-05T00:00:00.000Z","updated_at":"2025-06-05T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Workflow"],"summary":"Create Workflow","description":"Create a new standalone automation workflow. New workflows are created in the\n`draft` state (disabled). Add triggers and steps, then call `POST /workflows/{id}/enable`\nto make it live.\n","operationId":"createWorkflow","externalDocs":{"description":"Workflows Skill - creating a workflow","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#creating-a-workflow"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workspace_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowParametersCreate"},"example":{"workflow":{"name":"New Lead Nurture"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowAttributes"},"example":{"id":103,"public_id":"WfIjKl","workspace_id":5001,"name":"New Lead Nurture","status":"draft","disabled":true,"archived":false,"run_type":"asynchronous","active_runs_count":0,"completed_runs_count":0,"created_at":"2025-06-18T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden - the access token's scopes do not cover this request","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Name can't be blank","hint":null}}}}}}},"/workflows/{id}":{"get":{"tags":["Workflow"],"summary":"Fetch Workflow","description":"Retrieve a single workflow by its integer id or obfuscated public_id.\n","operationId":"getWorkflow","externalDocs":{"description":"Workflows Skill - build and configure automations via the API","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowAttributes"},"example":{"id":101,"public_id":"WfAbCd","workspace_id":5001,"name":"New Lead Nurture","status":"live","disabled":false,"archived":false,"run_type":"asynchronous","active_runs_count":12,"completed_runs_count":340,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-10T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Workflow"],"summary":"Update Workflow","description":"Update a workflow's `name` or `archived` flag. `run_type` is server-controlled\nand cannot be changed.\n","operationId":"updateWorkflow","externalDocs":{"description":"Workflows Skill - lifecycle (draft, live, archived)","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#lifecycle-read-this-first"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowParametersUpdate"},"example":{"workflow":{"name":"Updated Nurture Sequence","archived":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowAttributes"},"example":{"id":101,"public_id":"WfAbCd","workspace_id":5001,"name":"Updated Nurture Sequence","status":"live","disabled":false,"archived":false,"run_type":"asynchronous","active_runs_count":12,"completed_runs_count":340,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Name can't be blank","hint":null}}}}}},"delete":{"tags":["Workflow"],"summary":"Delete Workflow","description":"Permanently delete a workflow and all its associated triggers, steps, and run records.\n","operationId":"deleteWorkflow","externalDocs":{"description":"Workflows Skill - lifecycle (draft, live, archived)","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#lifecycle-read-this-first"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workflows/{id}/structure":{"get":{"tags":["Workflow"],"summary":"Fetch Workflow Structure","description":"Returns the workflow's complete tree in a single call: the workflow header,\nits active triggers (summary shape), and the ordered list of visible steps with\nbranching inlined. Internal container nodes are spliced out.\n\nSplit steps carry their child branches or variants directly in the response:\n- `conditional_split_step`: `branches` — always `[{branch: \"matched\", steps: [...]}, {branch: \"unmatched\", steps: [...]}]`\n- `split_test_step`: `variants` — each entry has `weight` and `steps`.\n\nWalk the `steps` array in order to follow execution flow. `sort_order` is\ncontainer-local and is not globally unique across the tree.\n","operationId":"getWorkflowStructure","externalDocs":{"description":"Workflows Skill - reading the structure","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#reading-the-structure"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowStructureAttributes"},"example":{"workflow":{"id":101,"public_id":"WfAbCd","name":"New Lead Nurture","status":"live","disabled":false,"archived":false,"run_type":"asynchronous"},"triggers":[{"id":11,"public_id":"TrXxYy","event_type_key":"$contact.tag_applied","active":true,"allow_anonymous_contacts":false}],"steps":[{"id":201,"public_id":"StEm01","step_type":"send_email_step","name":"Send Email","sort_order":0,"state":"active","step_type_settings":{"send_email_step":{"subject":"Welcome!","preheadline":"We're glad you're here.","template_id":3001,"from_address_id":4001,"reply_to_address_id":null}}},{"id":202,"public_id":"StDl02","step_type":"delay_step","name":"Wait 3 Days","sort_order":1,"state":"active","step_type_settings":{"delay_step":{"delay_type":"relative","duration":3,"interval":"days","time_zone":null,"use_contact_time_zone":false,"use_execution_window":false,"day_of_week":null,"date_of_month":null,"start_time":null,"end_time":null,"execution_window_days":[]}}},{"id":203,"public_id":"StCs03","step_type":"conditional_split_step","name":"VIP Check","sort_order":2,"state":"active","convergence_step_id":null,"step_type_settings":{"conditional_split_step":{"condition":{"filter_id":6001,"is_setup":true}}},"branches":[{"branch":"matched","steps":[{"id":205,"public_id":"StTg05","step_type":"contact_tag_step","name":"Tag VIP","sort_order":0,"state":"active","step_type_settings":{"contact_tag_step":{"action":"Add Tags","contacts_tag_ids":[7001]}}}]},{"branch":"unmatched","steps":[]}]}]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workflows/{id}/enable":{"post":{"tags":["Workflow"],"summary":"Enable Workflow","description":"Enable a workflow so it can accept new runs. The workflow must have at least one\nactive trigger — otherwise returns 422. Returns the updated workflow.\n","operationId":"enableWorkflow","externalDocs":{"description":"Workflows Skill - enabling, disabling","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowAttributes"},"example":{"id":101,"public_id":"WfAbCd","workspace_id":5001,"name":"New Lead Nurture","status":"live","disabled":false,"archived":false,"run_type":"asynchronous","active_runs_count":0,"completed_runs_count":0,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: A workflow cannot be enabled without at least one active trigger.","hint":null}}}}}}},"/workflows/{id}/disable":{"post":{"tags":["Workflow"],"summary":"Disable Workflow","description":"Disable a workflow, stopping new runs from being started. In-progress runs\nare canceled. Returns the updated workflow.\n","operationId":"disableWorkflow","externalDocs":{"description":"Workflows Skill - enabling, disabling","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#enabling-disabling"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowAttributes"},"example":{"id":101,"public_id":"WfAbCd","workspace_id":5001,"name":"New Lead Nurture","status":"draft","disabled":true,"archived":false,"run_type":"asynchronous","active_runs_count":0,"completed_runs_count":340,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workflows/{workflow_id}/triggers":{"get":{"tags":["Workflows::Trigger"],"summary":"List Triggers","description":"List all triggers attached to a workflow.\n","operationId":"listWorkflowTriggers","externalDocs":{"description":"Workflows Skill - triggers","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer id or obfuscated public_id of the workflow."},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowsTriggerAttributes"}},"example":[{"id":11,"public_id":"TrXxYy","workflow_id":101,"event_type_key":"$contact.tag_applied","event_type_name":"Contact tag applied","active":true,"allow_anonymous_contacts":false,"subscription_cancelation_reason":null,"contacts_tag_id":7001,"funnel_id":null,"page_id":null,"product_id":null,"cancellation_product_id":null,"product_variant_id":null,"cancellation_product_variant_id":null,"subscription_variant_to_id":null,"sales_pipelines_id":null,"current_sales_pipelines_stage_id":null,"appointments_calendar_id":null,"appointments_event_type_id":null,"course_id":null,"courses_lesson_id":null,"courses_section_id":null,"community_id":null,"communities_space_id":null,"communities_space_group_id":null,"emails_broadcasts_id":null,"calendar_event_id":null,"survey_workflow_id":null,"workflows_step_id":null,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Workflows::Trigger"],"summary":"Create Trigger","description":"Add a new trigger to a workflow. The `event_type_key` must be a valid workflow\ntrigger event key — an invalid value returns 422. All condition FK fields accept\nthe integer id or obfuscated `public_id` of a referenced resource in the same\nworkspace/team scope.\n","operationId":"createWorkflowTrigger","externalDocs":{"description":"Workflows Skill - triggers","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer id or obfuscated public_id of the workflow."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsTriggerParametersCreate"},"example":{"workflows_trigger":{"event_type_key":"$contact.tag_applied","active":true,"contacts_tag_id":7001}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsTriggerAttributes"},"example":{"id":12,"public_id":"TrMnOp","workflow_id":101,"event_type_key":"$contact.tag_applied","event_type_name":"Contact tag applied","active":true,"allow_anonymous_contacts":false,"subscription_cancelation_reason":null,"contacts_tag_id":7001,"funnel_id":null,"page_id":null,"product_id":null,"cancellation_product_id":null,"product_variant_id":null,"cancellation_product_variant_id":null,"subscription_variant_to_id":null,"sales_pipelines_id":null,"current_sales_pipelines_stage_id":null,"appointments_calendar_id":null,"appointments_event_type_id":null,"course_id":null,"courses_lesson_id":null,"courses_section_id":null,"community_id":null,"communities_space_id":null,"communities_space_group_id":null,"emails_broadcasts_id":null,"calendar_event_id":null,"survey_workflow_id":null,"workflows_step_id":null,"created_at":"2025-06-18T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: event_type_key '$bad.event' is not a valid workflow trigger event.","hint":null}}}}}}},"/workflows/triggers/{id}":{"get":{"tags":["Workflows::Trigger"],"summary":"Fetch Trigger","description":"Retrieve a single workflow trigger.\n","operationId":"getWorkflowTrigger","externalDocs":{"description":"Workflows Skill - triggers","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsTriggerAttributes"},"example":{"id":11,"public_id":"TrXxYy","workflow_id":101,"event_type_key":"$contact.tag_applied","event_type_name":"Contact tag applied","active":true,"allow_anonymous_contacts":false,"subscription_cancelation_reason":null,"contacts_tag_id":7001,"funnel_id":null,"page_id":null,"product_id":null,"cancellation_product_id":null,"product_variant_id":null,"cancellation_product_variant_id":null,"subscription_variant_to_id":null,"sales_pipelines_id":null,"current_sales_pipelines_stage_id":null,"appointments_calendar_id":null,"appointments_event_type_id":null,"course_id":null,"courses_lesson_id":null,"courses_section_id":null,"community_id":null,"communities_space_id":null,"communities_space_group_id":null,"emails_broadcasts_id":null,"calendar_event_id":null,"survey_workflow_id":null,"workflows_step_id":null,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Workflows::Trigger"],"summary":"Update Trigger","description":"Update an existing workflow trigger. All fields optional. An invalid `event_type_key`\nreturns 422.\n","operationId":"updateWorkflowTrigger","externalDocs":{"description":"Workflows Skill - triggers","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsTriggerParametersUpdate"},"example":{"workflows_trigger":{"active":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsTriggerAttributes"},"example":{"id":11,"public_id":"TrXxYy","workflow_id":101,"event_type_key":"$contact.tag_applied","event_type_name":"Contact tag applied","active":false,"allow_anonymous_contacts":false,"subscription_cancelation_reason":null,"contacts_tag_id":7001,"funnel_id":null,"page_id":null,"product_id":null,"cancellation_product_id":null,"product_variant_id":null,"cancellation_product_variant_id":null,"subscription_variant_to_id":null,"sales_pipelines_id":null,"current_sales_pipelines_stage_id":null,"appointments_calendar_id":null,"appointments_event_type_id":null,"course_id":null,"courses_lesson_id":null,"courses_section_id":null,"community_id":null,"communities_space_id":null,"communities_space_group_id":null,"emails_broadcasts_id":null,"calendar_event_id":null,"survey_workflow_id":null,"workflows_step_id":null,"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: event_type_key '$bad.event' is not a valid workflow trigger event.","hint":null}}}}}},"delete":{"tags":["Workflows::Trigger"],"summary":"Delete Trigger","description":"Delete a trigger from a workflow.\n","operationId":"deleteWorkflowTrigger","externalDocs":{"description":"Workflows Skill - triggers","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#triggers"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workflows/{workflow_id}/steps":{"get":{"tags":["Workflows::Step"],"summary":"List Steps","description":"List all visible (displayable) steps for a workflow using standard collection\nsorting. Internal container nodes are not included. `sort_order` is\ncontainer-local and not globally unique; use `GET /workflows/{id}/structure`\nwhen clients need execution order.\n","operationId":"listWorkflowSteps","externalDocs":{"description":"Workflows Skill - steps","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer id or obfuscated public_id of the workflow."},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowsStepAttributes"}},"example":[{"id":201,"public_id":"StEm01","workflow_id":101,"step_type":"send_email_step","name":"Send Email","sort_order":0,"state":"active","parent_step_id":null,"branch":null,"convergence_step_id":null,"step_type_settings":{"send_email_step":{"subject":"Welcome!","preheadline":"We're glad you're here.","template_id":3001,"from_address_id":4001,"reply_to_address_id":null}},"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"},{"id":202,"public_id":"StDl02","workflow_id":101,"step_type":"delay_step","name":"Wait 3 Days","sort_order":1,"state":"active","parent_step_id":null,"branch":null,"convergence_step_id":null,"step_type_settings":{"delay_step":{"delay_type":"relative","duration":3,"interval":"days","time_zone":null,"use_contact_time_zone":false,"use_execution_window":false,"day_of_week":null,"date_of_month":null,"start_time":null,"end_time":null,"execution_window_days":[]}},"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"post":{"tags":["Workflows::Step"],"summary":"Create Step","description":"Add a new step to a workflow. `step_type_settings` must contain exactly one key\nnaming the step type.\n\n**Placement:** omit `parent_step_id` to append to the trunk sequence. Set\n`parent_step_id` + `branch` to place inside a split branch. Use `position` (0-based)\nor `after_step_id` to control order within a container.\n\nFor `split_test_step`: provide `variants` with exactly 2 entries whose `weight`\nvalues sum to 100. For `conditional_split_step`: optionally provide\n`condition.filter_id` (integer id or obfuscated RefineFilter public_id).\n\nA `send_email_step` requires a complete business mailing address in the\nworkspace's email settings. Configure it first with\n`PUT /workspaces/{workspace_id}/emails/settings`; an incomplete address returns 422.\n","operationId":"createWorkflowStep","externalDocs":{"description":"Workflows Skill - steps and branching","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer id or obfuscated public_id of the workflow."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsStepParametersCreate"},"example":{"workflows_step":{"name":"Send Welcome Email","step_type_settings":{"send_email_step":{"subject":"Welcome!","template_id":"TmPl01","from_address_id":"FrAd01"}}}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsStepAttributes"},"example":{"id":206,"public_id":"StNw06","workflow_id":101,"step_type":"contact_tag_step","name":"Apply Tag","sort_order":2,"state":"active","parent_step_id":null,"branch":null,"convergence_step_id":null,"step_type_settings":{"contact_tag_step":{"action":"Add Tags","contacts_tag_ids":[7002]}},"created_at":"2025-06-18T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"invalid_step_type_settings":{"summary":"Invalid step settings map","value":{"error":"Request unprocessable: step_type_settings must contain exactly one step-class key.","hint":null}},"incomplete_business_address":{"summary":"Missing business mailing address for a send-email step","value":{"error":"Request unprocessable: A complete business mailing address is required to create marketing emails. Set it first via the email settings endpoint (GET/PUT /api/v2/workspaces/:workspace_id/emails/settings), providing a name and address, then try again.","hint":null}}}}}}}}},"/workflows/steps/{id}":{"get":{"tags":["Workflows::Step"],"summary":"Fetch Step","description":"Retrieve a single workflow step.\n","operationId":"getWorkflowStep","externalDocs":{"description":"Workflows Skill - steps","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsStepAttributes"},"example":{"id":201,"public_id":"StEm01","workflow_id":101,"step_type":"send_email_step","name":"Send Email","sort_order":0,"state":"active","parent_step_id":null,"branch":null,"convergence_step_id":null,"step_type_settings":{"send_email_step":{"subject":"Welcome!","preheadline":"We're glad you're here.","template_id":3001,"from_address_id":4001,"reply_to_address_id":null}},"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-01T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}},"patch":{"tags":["Workflows::Step"],"summary":"Update Step","description":"Update a workflow step's `name`, `step_type_settings`, and/or placement.\nMoving split steps (`conditional_split_step`, `split_test_step`) is not supported\nand returns 422. A `send_email_step`'s `template_id` is create-only and cannot be\nchanged here (returns 422) — edit the email in place with `html_body`/`text_body`, or\ncreate a new step to use a different template.\n","operationId":"updateWorkflowStep","externalDocs":{"description":"Workflows Skill - steps and branching","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsStepParametersUpdate"},"example":{"workflows_step":{"step_type_settings":{"delay_step":{"delay_type":"relative","duration":7,"interval":"days"}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsStepAttributes"},"example":{"id":202,"public_id":"StDl02","workflow_id":101,"step_type":"delay_step","name":"Wait 7 Days","sort_order":1,"state":"active","parent_step_id":null,"branch":null,"convergence_step_id":null,"step_type_settings":{"delay_step":{"delay_type":"relative","duration":7,"interval":"days","time_zone":null,"use_contact_time_zone":false,"use_execution_window":false,"day_of_week":null,"date_of_month":null,"start_time":null,"end_time":null,"execution_window_days":[]}},"created_at":"2025-06-01T00:00:00.000Z","updated_at":"2025-06-18T00:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: send_email_step template_id cannot be changed after creation. Send html_body/text_body to edit this step's email, or create a new step to use a different template.","hint":null}}}}}},"delete":{"tags":["Workflows::Step"],"summary":"Delete Step","description":"Delete a step from a workflow. Split steps and their branch contents are removed\nrecursively.\n","operationId":"deleteWorkflowStep","externalDocs":{"description":"Workflows Skill - steps and branching","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#steps"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}},"/workflows/steps/{step_id}/stats":{"get":{"tags":["Workflows::Step"],"summary":"Fetch Workflow Step Stats","description":"\u003e **Closed Beta** — not yet enabled for all workspaces (403 otherwise). Request access at https://developers.myclickfunnels.com/page/code-support.\n\nStats for one workflow step — the numbers the workflow builder shows under it. Every step\ntype reports `contacts`: how many are at the step right now and how many left it inside\nthe window. A `send_email_step` also reports `email`: engagement and attributed revenue\nfor the email it sends. For every other step type `email` is `null`, so a delay or tag\nstep never reads as an email that performed badly.\n\n`contacts.are_here` is current occupancy — runs whose current step is this one — and is\nthe one number that does not follow `timerange`. `contacts.were_here` counts contacts who\nleft the step inside the window, once per pass through it.\n\nUnlike a broadcast, a workflow step has no audience and no send window: it keeps\nsending for as long as the workflow runs and contacts keep reaching it. So there is\nnothing to report as queued or in progress, and the numbers are always for a window\nyou choose. Defaults to a 30-day window ending now. Override with `timerange_start`\nand `timerange_end`. Values are clamped: a future end date is clamped to now, a window\nover 90 days is clamped to 90 days, and a start after the end resets to 30 days ending\nat `timerange_end`. Read `timerange` back from the response for the window actually used.\n\n`sends` counts a contact once per pass through the step, so a looping workflow makes it\nlarger than `recipients`. Rates are whole percentages rounded to the nearest integer — a\nshare under 0.5% reads 0 next to a non-zero count, and the counts are authoritative.\n`open_rate`, `click_rate`, `bounce_rate` and `unsubscribe_rate` divide by `recipients`;\n`click_to_open_rate` divides unique clicks by unique opens. The workflow builder's\npercentages under a step divide by `sends` instead, so for a step that sent to a contact\nmore than once the app shows a lower rate than this endpoint does for the same window;\nthe counts are the same on both. Numerator and denominator are\neach counted inside the window on their own: an open inside the window counts even when\nthe send it answers happened before the window. So a rate can exceed 100 when few new\nsends meet many opens of older emails, and it is 0 whenever its denominator is 0, however\nmany opens there were. A step whose email last sent before the window reports zero\n`sends` and `recipients` while opens and clicks inside it still count. To compare like\nwith like, widen the window to cover the sends you care about.\n\nRevenue is attributed when the buyer's last tracked source within 30 days was a click on\none of the email's links. Each attributed order contributes its **first** paid invoice,\nand only when that invoice was issued inside the window: renewals never count, and an\norder whose first payment predates the window contributes nothing even if a renewal was\npaid inside it. Only live-mode orders paid in the workspace currency are counted. Note\nthe engagement counts do include test-mode sends, so the revenue-per-X figures divide\nlive-only money by counts that may include test traffic.\n\nThe broadcast equivalent is `GET /emails/broadcasts/{broadcast_id}/stats`. Its\n`performance` and `revenue` blocks share this vocabulary at the top level, with\n`delivered` in place of `sends`/`recipients`/`failed`, and it takes no timerange — a\nbroadcast reports on its own send window.\n","operationId":"getWorkflowStepStats","externalDocs":{"description":"Workflows Skill - step stats","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#step-stats"},"parameters":[{"name":"step_id","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/StatsTimerangeStart"},{"$ref":"#/components/parameters/StatsTimerangeEnd"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsStepStatsAttributes"},"examples":{"send_email_step":{"summary":"A step that sends an email","value":{"step":{"id":42,"public_id":"RBxAQx","name":"Welcome email","step_type":"send_email_step"},"workflow":{"id":7,"public_id":"zmXVGz","name":"New lead nurture"},"currency":"USD","timerange":{"from":"2026-08-05T00:00:00Z","to":"2026-09-04T00:00:00Z"},"contacts":{"are_here":12,"were_here":1240},"email":{"performance":{"sends":1240,"recipients":1180,"failed":4,"bounced":21,"opened":890,"unique_opens":604,"clicked":173,"unique_clicks":148,"unsubscribed":9,"spam_complaints":2,"open_rate":51,"click_rate":13,"click_to_open_rate":25,"bounce_rate":2,"unsubscribe_rate":1},"revenue":{"total":"3480.00","orders_count":24,"per_recipient":"2.95","per_unique_open":"5.76","per_unique_click":"23.51"}}}},"delay_step":{"summary":"A step that sends no email","value":{"step":{"id":43,"public_id":"QpLmNz","name":"Wait 2 days","step_type":"delay_step"},"workflow":{"id":7,"public_id":"zmXVGz","name":"New lead nurture"},"currency":"USD","timerange":{"from":"2026-08-05T00:00:00Z","to":"2026-09-04T00:00:00Z"},"contacts":{"are_here":57,"were_here":1183},"email":null}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden — either the workspace is not enabled for this Closed Beta endpoint, or the\ntoken's scopes don't grant read access to workflows. Neither is retryable; the message\nsays which, and for the beta, how to request access and what still works without it.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"examples":{"closed_beta":{"summary":"The workspace is not enabled for the beta","value":{"error":"Forbidden: Workflow step stats are in Closed Beta and are not enabled for this workspace. Retrying will not change that. Request access at https://developers.myclickfunnels.com/page/code-support. The step itself is still readable at GET /api/v2/workflows/steps/:id, and a broadcast's engagement at GET /api/v2/emails/broadcasts/:id/stats.","hint":null}},"missing_scope":{"summary":"The token lacks read access to workflows","value":{"error":"Forbidden: This access token's scopes do not grant read access to Workflows. Granted scopes: contacts:read.","hint":"Scopes are granted per category as \u003ccategory\u003e:read or \u003ccategory\u003e:write; the `scope` parameter of WWW-Authenticate names the one this request needed. Grantable scopes: https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource"}}}}}},"404":{"description":"Not Found — step not found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity — a timerange parameter is not a real date or time. Unparseable\nvalues and calendar dates that do not exist (2026-02-31) are refused rather than\nsilently answered with a different window.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: timerange_start '2026-13-01' is not a valid date or time. Use an ISO 8601 value, e.g. 2026-09-01T00:00:00Z.","hint":null}}}},"503":{"description":"Service Unavailable — a stats query exceeded the database timeout, or a dependency was\nbriefly unavailable. Retryable; narrowing the timerange makes the query cheaper.\n","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Service unavailable: Transient service issue: Please try again shortly.","hint":null}}}}}}},"/workflows/{workflow_id}/runs":{"get":{"tags":["Workflows::Run"],"summary":"List Runs","description":"List automation runs for a workflow. Supports filtering by `contact_id` and `status`.\nOnly standard automation runs are returned (survey runs excluded).\n","operationId":"listWorkflowRuns","externalDocs":{"description":"Workflows Skill - runs, manual enrollment","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#runs---manual-enrollment"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer id or obfuscated public_id of the workflow."},{"$ref":"#/components/parameters/after"},{"$ref":"#/components/parameters/sort_order"},{"$ref":"#/components/parameters/sort_property"},{"name":"filter","in":"query","required":false,"description":"Filter runs by `contact_id` (integer id or obfuscated public_id of the contact) and/or\n`status` (`active`, `paused`, `completed`, or `canceled`).\nAn invalid `status` value returns 422.\n","schema":{"type":"object","properties":{"contact_id":{"$ref":"#/components/schemas/IntegerOrPublicId","description":"Contact id or public_id to filter runs by.","example":"CtAbcd"},"status":{"type":"string","enum":["active","paused","completed","canceled"],"description":"Filter by derived run status.","example":"completed"}}},"style":"deepObject","explode":true}],"responses":{"200":{"description":"OK","headers":{"Pagination-Next":{"$ref":"#/components/headers/PaginationNext"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowsRunAttributes"}},"example":[{"id":501,"public_id":"RnXxYz","workflow_id":101,"contact_id":9001,"current_step_id":null,"event_id":null,"type":null,"status":"completed","skip_communication":false,"completed_at":"2025-06-02T10:30:00.000Z","paused_at":null,"created_at":"2025-06-01T09:00:00.000Z","updated_at":"2025-06-02T10:30:00.000Z"},{"id":502,"public_id":"RnQrSt","workflow_id":101,"contact_id":9002,"current_step_id":202,"event_id":null,"type":null,"status":"paused","skip_communication":false,"completed_at":null,"paused_at":"2025-06-15T08:00:00.000Z","created_at":"2025-06-15T07:55:00.000Z","updated_at":"2025-06-15T08:00:00.000Z"}]}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: status must be one of: active, paused, completed, canceled","hint":null}}}}}},"post":{"tags":["Workflows::Run"],"summary":"Enroll Contact (Create Run)","description":"Manually enroll a contact into a workflow, starting a new run immediately.\nThe workflow must be enabled (`status: live`) — an unenabled workflow returns 422.\nThe contact must belong to the same workspace.\n\nSome step types are skipped at enrollment rather than executed — notably page\n(`show_page_step`) and internal sequence/plumbing steps, which only make sense\ninside a funnel. This list is non-exhaustive; standalone automations run the\naction and split steps documented under Workflows::Step.\n","operationId":"createWorkflowRun","externalDocs":{"description":"Workflows Skill - runs, manual enrollment","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#runs---manual-enrollment"},"security":[{"BearerAuth":[]}],"parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"},"description":"Integer id or obfuscated public_id of the workflow."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsRunParametersCreate"},"example":{"run":{"contact_id":"CtAbcd","skip_communication":false}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsRunAttributes"},"example":{"id":503,"public_id":"RnUvWx","workflow_id":101,"contact_id":9001,"current_step_id":201,"event_id":null,"type":null,"status":"active","skip_communication":false,"completed_at":null,"paused_at":null,"created_at":"2025-06-18T12:00:00.000Z","updated_at":"2025-06-18T12:00:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Request unprocessable: Workflow is not enabled; enable it before starting a run.","hint":null}}}}}}},"/workflows/runs/{id}":{"get":{"tags":["Workflows::Run"],"summary":"Fetch Run","description":"Retrieve a single workflow run by its id or obfuscated public_id.\n","operationId":"getWorkflowRun","externalDocs":{"description":"Workflows Skill - runs, manual enrollment","url":"https://accounts.myclickfunnels.com/.well-known/workflows/skill.md#runs---manual-enrollment"},"security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowsRunAttributes"},"example":{"id":501,"public_id":"RnXxYz","workflow_id":101,"contact_id":9001,"current_step_id":null,"event_id":null,"type":null,"status":"completed","skip_communication":false,"completed_at":"2025-06-02T10:30:00.000Z","paused_at":null,"created_at":"2025-06-01T09:00:00.000Z","updated_at":"2025-06-02T10:30:00.000Z"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"API key missing or invalid","hint":"Send the token as `Authorization: Bearer \u003ctoken\u003e`. Create one under Account \u003e Team \u003e Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown."}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"You are not authorized to perform this action.","hint":null}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"type":"object","required":["error","hint"],"properties":{"error":{"type":"string"},"hint":{"type":["string","null"],"description":"The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer."}}},"example":{"error":"Not found: Record missing","hint":null}}}}}}}}}