Connecting to the ClickFunnels API

Two ways to connect your OverSkill app to ClickFunnels — an API key for your own workspace, or OAuth 2.0 for letting other ClickFunnels users connect their own accounts.

Building an OverSkill app that talks to ClickFunnels — reading contacts, watching for new orders, syncing courses, anything that needs live ClickFunnels data? Your app connects using the ClickFunnels API. There are two ways to do it, and which one you need depends on who's using your app.

Which method do I need?

Use an API key if your app only ever talks to your own ClickFunnels workspace — for example, an internal tool, a dashboard for your own funnels, or an automation that only you use.

Use OAuth 2.0 if your app is a real product that other ClickFunnels users will connect their own account to — like the Connect ClickFunnels button you see in tools like Zapier. Each of your users authorizes your app separately, and your app never sees their password.

Either way, your app needs to know the workspace subdomain and workspace ID it's talking to — every ClickFunnels API call is made against that specific subdomain, there's no shared/generic API host. How you get those values differs by method: with an API key, you store the subdomain + workspace ID yourself as env vars (Method 1, Step 2 below). With OAuth 2.0, those values come back automatically per connected user during the token exchange — you don't set them manually (see Method 2).

Method 1 — API key (your own workspace)

This is the faster path if you're only ever connecting to one ClickFunnels account: yours.

Step 1 — Create a platform application in ClickFunnels

  1. In ClickFunnels, go to Teams List → Your Team → Team Settings → Developer Portal
  2. Click Add new platform application
  3. Fill in a name (e.g. My OverSkill App) and click Create platform application
  4. Copy the API access token shown on the platform application's page — this is your API key

Full ClickFunnels walkthrough with screenshots →

⚠️ API keys are issued per ClickFunnels team, not per workspace. The key gives access to every workspace that belongs to that team, and any admin on the team can see it. Keep it out of anywhere public.

Step 2 — Find your workspace ID and subdomain

You'll need both of these alongside the key:

  • Workspace subdomain — visible in your ClickFunnels workspace URL: https://your-workspace.myclickfunnels.com → the subdomain is your-workspace

  • Workspace ID — the easiest way to get this is from your workspace dashboard URL in ClickFunnels: the value right after the last / (e.g. https://accounts.myclickfunnels.com/account/workspaces/jWMWXZ → the ID is jWMWXZ). This is an obfuscated ID — a random string, not a plain number — and it works exactly the same as the numeric ID when you store it and use it in API calls.

Alternative: you can also get the numeric workspace ID by calling the Workspaces List endpoint with your new key (GET /api/v2/teams/{team_id}/workspaces on accounts.myclickfunnels.com). Not necessary if you already grabbed the obfuscated ID from the URL above — either one works the same.

Step 3 — Store it in your OverSkill app

Add these in your app's Settings → Environment Variables panel — never paste your API key into chat with the AI, even to ask it to store it for you.

  1. Click Add Variable
  2. Variable Name: CLICKFUNNELS_API_KEY → paste your key into the Value field → check Mark as secret → save
  3. Click Add Variable again → Variable Name: CLICKFUNNELS_SUBDOMAIN → Value: your-workspace (not secret) → save
  4. Click Add Variable again → Variable Name: CLICKFUNNELS_WORKSPACE_ID → Value: your workspace ID from Step 2 (not secret) → save

Marking the API key as secret keeps it masked in the UI and available only server-side (env.CLICKFUNNELS_API_KEY in your Worker code) — it's never exposed to the browser or visible in chat. The subdomain and workspace ID aren't sensitive, so they stay unmasked. Once they're set, ask the AI to build whatever you need — e.g. look up a ClickFunnels contact by email or create a fulfillment when an order comes in — it reads the three variables you just added.

Every API request your app makes must go to https://{your-subdomain}.myclickfunnels.com/api/v2/... — that's why the subdomain gets stored, not just the key.

Method 2 — OAuth 2.0 (letting other users connect their own ClickFunnels account)

Use this if people who use your app have their own ClickFunnels accounts and need to connect them individually — your app operates on their data, not yours.

Step 1 — Create a platform application and enable public access

  1. Same as above: Team Settings → Developer Portal → Add new platform application
  2. Open the platform application and click Enable public application
  3. Copy the Client ID and Client Secret shown there
  4. Set the Redirect URI to the callback URL your app will use to receive the connection (e.g. https://your-app.overskill.app/clickfunnels/callback) — this must match exactly, including trailing slashes

Full ClickFunnels OAuth 2.0 guide →

Step 2 — Store the client credentials

Same as Method 1 — add these in your app's Settings → Environment Variables panel, not in chat:

  1. Click Add Variable → Variable Name: CLICKFUNNELS_CLIENT_ID → paste the Client ID into Value → save (not secret — this one is safe to expose)
  2. Click Add Variable again → Variable Name: CLICKFUNNELS_CLIENT_SECRET → paste the Client Secret into Value → check Mark as secret → save

Step 3 — Build the connect flow

Ask the AI to build the flow — it follows the standard OAuth pattern:

  1. Your app shows a Connect ClickFunnels button linking to ClickFunnels' authorize URL (with your client_id + redirect_uri)
  2. The user logs into ClickFunnels and authorizes your app
  3. ClickFunnels redirects back to your app's callback URL with a code
  4. Your app exchanges that code (plus your client ID + secret) for an access token — this happens server-side, never in the browser

The token exchange response includes the connecting user's workspace_id, workspace_name, and workspace_urlstore all of these for that user, since ClickFunnels API calls always need the right subdomain for the account making the request. If your app supports more than one connected user, store the token + workspace subdomain + workspace ID per user, not as one shared value.

Heads-up: ClickFunnels access tokens currently don't expire, and there's no refresh flow. A token stops working only if the user disconnects/uninstalls your app from their ClickFunnels account — your app should handle that gracefully (show a reconnect prompt) rather than assume tokens expire on a schedule.

Making API calls (either method)

Once you have a token (API key or OAuth access token) and the workspace subdomain, requests look the same either way:

curl 'https://{subdomain}.myclickfunnels.com/api/v2/workspaces/{workspace_id}/contacts' \
  --header 'Authorization: Bearer YOUR_TOKEN' \
  --header 'User-Agent: YourAppName'

Two things ClickFunnels requires on every request:

  • A User-Agent header identifying your app — requests without one are rejected
  • The correct workspace subdomain as the host — not a generic API domain

Was this helpful?

Thanks for the signal — it helps us improve the docs.

More in Integrations

Connecting Slack to your app

Post messages to channels, send DMs, react to events — Slack as your app's notification system.

Connecting Stripe for payments

Process payments through your own Stripe account instead of OverSkill's built-in checkout.

Sending emails from your app

Welcome notes, order confirmations, weekly summaries — your app can send emails. No setup required.

Still need help?

If this didn't answer your question, our team is one click away.