Files
2026-04-11 09:45:12 -05:00

5.3 KiB

ClickFunnels Routing Reference

App name: clickfunnels Base URL proxied: {subdomain}.myclickfunnels.com

The router automatically handles the subdomain from your OAuth connection.

API Path Pattern

/clickfunnels/api/v2/{resource}

Required Headers

THe User-Agent header is required to avoid Cloudflare blocks:

User-Agent: Maton/1.0

Common Endpoints

Teams

List Teams

GET /clickfunnels/api/v2/teams

Get Team

GET /clickfunnels/api/v2/teams/{team_id}

Workspaces

List Workspaces

GET /clickfunnels/api/v2/teams/{team_id}/workspaces

Get Workspace

GET /clickfunnels/api/v2/workspaces/{workspace_id}

Contacts

List Contacts

GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts

Get Contact

GET /clickfunnels/api/v2/contacts/{contact_id}

Create Contact

POST /clickfunnels/api/v2/workspaces/{workspace_id}/contacts
Content-Type: application/json

{
  "contact": {
    "email_address": "user@example.com",
    "first_name": "John",
    "last_name": "Doe"
  }
}

Update Contact

PUT /clickfunnels/api/v2/contacts/{contact_id}
Content-Type: application/json

{
  "contact": {
    "first_name": "Updated"
  }
}

Delete Contact

DELETE /clickfunnels/api/v2/contacts/{contact_id}

Upsert Contact

POST /clickfunnels/api/v2/workspaces/{workspace_id}/contacts/upsert

Products

List Products

GET /clickfunnels/api/v2/workspaces/{workspace_id}/products

Get Product

GET /clickfunnels/api/v2/products/{product_id}

Create Product

POST /clickfunnels/api/v2/workspaces/{workspace_id}/products
Content-Type: application/json

{
  "product": {
    "name": "New Product",
    "visible_in_store": true
  }
}

Archive/Unarchive Product

POST /clickfunnels/api/v2/products/{product_id}/archive
POST /clickfunnels/api/v2/products/{product_id}/unarchive

Orders

List Orders

GET /clickfunnels/api/v2/workspaces/{workspace_id}/orders

Get Order

GET /clickfunnels/api/v2/orders/{order_id}

Fulfillments

List Fulfillments

GET /clickfunnels/api/v2/workspaces/{workspace_id}/fulfillments

Create Fulfillment

POST /clickfunnels/api/v2/workspaces/{workspace_id}/fulfillments

Cancel Fulfillment

POST /clickfunnels/api/v2/fulfillments/{fulfillment_id}/cancel

Courses & Enrollments

List Courses

GET /clickfunnels/api/v2/workspaces/{workspace_id}/courses

List Enrollments

GET /clickfunnels/api/v2/courses/{course_id}/enrollments

Create Enrollment

POST /clickfunnels/api/v2/courses/{course_id}/enrollments

Forms & Submissions

List Forms

GET /clickfunnels/api/v2/workspaces/{workspace_id}/forms

List Submissions

GET /clickfunnels/api/v2/forms/{form_id}/submissions

Webhooks

List Webhook Endpoints

GET /clickfunnels/api/v2/workspaces/{workspace_id}/webhooks/outgoing/endpoints

Create Webhook Endpoint

POST /clickfunnels/api/v2/workspaces/{workspace_id}/webhooks/outgoing/endpoints
Content-Type: application/json

{
  "webhooks_outgoing_endpoint": {
    "url": "https://example.com/webhook",
    "name": "My Webhook",
    "event_type_ids": ["contact.created"]
  }
}

Delete Webhook Endpoint

DELETE /clickfunnels/api/v2/webhooks/outgoing/endpoints/{endpoint_id}

Images

List Images

GET /clickfunnels/api/v2/workspaces/{workspace_id}/images

Upload Image via URL

POST /clickfunnels/api/v2/workspaces/{workspace_id}/images
Content-Type: application/json

{
  "image": {
    "upload_source_url": "https://example.com/image.png"
  }
}

Pagination

Cursor-based pagination with 20 items per page:

# First page
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts

# Next page (use ID from Pagination-Next header)
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?after=1087091674

Response headers:

  • Pagination-Next: ID of last item
  • Link: Full URL for next page

Filtering

# Single filter
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?filter[email_address]=user@example.com

# Multiple values (OR)
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?filter[email_address]=a@example.com,b@example.com

# Multiple filters (AND)
GET /clickfunnels/api/v2/workspaces/{workspace_id}/contacts?filter[email_address]=user@example.com&filter[id]=123

Notes

  • Subdomain is automatically determined from your OAuth connection
  • IDs are integers; each resource also has a public_id string
  • Request bodies use nested keys: {"contact": {...}}, {"product": {...}}
  • List endpoints: use workspaces/{id}/{resource} pattern
  • Single resource: use /{resource}/{id} pattern (no workspace prefix)
  • Delete operations return HTTP 204 with empty body
  • Max 20 items per page, use after parameter for pagination

Resources