ClickFunnels Contacts::Events::Note API
Notes in a contact's Activity tab, with full CRUD.
Notes in a contact's Activity tab, with full CRUD.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/clickfunnels:clickfunnels-contacts-events-note-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: ClickFunnels Contacts::Events::Note 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.
### For AI agents
This 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.
Three things it does not describe, each one request away:
- MCP server: 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.
- Skill guides, also as an Agent Skills index: 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 covers when to use ClickFunnels at all, how to get credentials, and how to behave around rate limits.
- Protected resource metadata (RFC 9728) and authorization server metadata (RFC 8414): the scope vocabulary and the OAuth endpoints. Dynamic client registration is for MCP clients only.
On ClickFunnels-owned API hosts (`myclickfunnels.com` and its subdomains), the 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. Requests sent through a customer''s custom domain keep the Bearer challenge but omit those discovery pointers.'
license:
name: MIT
url: https://opensource.org/licenses/MIT
version: 2.0.0
servers:
- url: https://{subdomain}.myclickfunnels.com/api/v2
description: ClickFunnels API
variables:
subdomain:
default: myworkspace
security:
- BearerAuth: []
- OAuth2: []
tags:
- name: Contacts::Events::Note
description: Notes in a contact's Activity tab, with full CRUD.
paths:
/contacts/{contact_id}/events/notes:
get:
tags:
- Contacts::Events::Note
description: Read only contact notes from the Activity tab, including API, UI and workflow notes. Ordered by created_at then id with the standard row-id cursor and sort_order. sort_property is not supported. Note ids are also event ids. MessageHub conversations are excluded. Numeric and public IDs are accepted.
summary: List Contact Activity Notes
operationId: listContactsEventsNotes
parameters:
- name: contact_id
in: path
required: true
schema:
type: string
- $ref: '#/components/parameters/after'
- $ref: '#/components/parameters/per_page'
- $ref: '#/components/parameters/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/ContactsEventsNoteAttributes'
example:
- id: 912345679
public_id: GhIjKl
contact_id: 123
content: Called about the refund; promised a callback on Friday.
created_by_id: 456
occurred_at: '2026-10-12T14:03:00.000Z'
created_at: '2026-10-13T09:15:22.000Z'
updated_at: '2026-10-13T09:15:22.000Z'
'400':
description: Bad Request - the notes list takes no filter.
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
example:
error: 'Bad request: Filter provided, but filtering is currently not available for this resource'
hint: null
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer.'
example:
error: API key missing or invalid
hint: 'Send the token as `Authorization: Bearer <token>`. Create one under Account > Team > Platform Applications (a workspace API key), or obtain one with OAuth 2.1; both use the same scopes. See https://developers.myclickfunnels.com/docs/authentication, or append .md to that URL for markdown.'
'404':
description: Not Found
content:
application/json:
schema:
type: object
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
'403':
$ref: '#/components/responses/WorkspaceGrantForbidden'
'422':
description: Unprocessable Entity. The `per_page` value must be a positive integer.
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
example:
error: sort_property is not supported for contact events
hint: null
post:
tags:
- Contacts::Events::Note
summary: Create Contact Activity Note
operationId: createContactsEventsNotes
description: Save a note synchronously in the contact's Activity tab with content and optional occurred_at. Attributed to the token's current membership and shown via API in Activity. Missing or blank content and an unparsable occurred_at return 422. No outgoing webhooks are emitted.
parameters:
- name: contact_id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- contacts_events_note
properties:
contacts_events_note:
$ref: '#/components/schemas/ContactsEventsNoteParameters'
example:
contacts_events_note:
content: Called about the refund; promised a callback on Friday.
occurred_at: '2026-10-12T14:03:00.000Z'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/ContactsEventsNoteAttributes'
example:
id: 912345679
public_id: GhIjKl
contact_id: 123
content: Called about the refund; promised a callback on Friday.
created_by_id: 456
occurred_at: '2026-10-12T14:03:00.000Z'
created_at: '2026-10-13T09:15:22.000Z'
updated_at: '2026-10-13T09:15:22.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer.'
example:
error: API key missing or invalid
hint: 'Send the token as `Authorization: Bearer <token>`. Create one under Account > Team > Platform Applications (a workspace API key), or obtain one 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
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
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
example:
error: Content can't be blank
hint: null
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to authenticate, which 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
/contacts/events/notes/{id}:
get:
tags:
- Contacts::Events::Note
summary: Fetch Contact Activity Note
operationId: getContactsEventsNotes
description: Read a contact note. Other event types and inaccessible events return 404. Numeric and public IDs are accepted.
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ContactsEventsNoteAttributes'
example:
id: 912345679
public_id: GhIjKl
contact_id: 123
content: Called about the refund; promised a callback on Friday.
created_by_id: 456
occurred_at: '2026-10-12T14:03:00.000Z'
created_at: '2026-10-13T09:15:22.000Z'
updated_at: '2026-10-13T09:15:22.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer.'
example:
error: API key missing or invalid
hint: 'Send the token as `Authorization: Bearer <token>`. Create one under Account > Team > Platform Applications (a workspace API key), or obtain one 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
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
put:
tags:
- Contacts::Events::Note
summary: Update Contact Activity Note
operationId: updateContactsEventsNotes
description: Edit content and/or occurred_at while preserving the original author and source, including UI and workflow notes. Blank content and an unparsable occurred_at return 422. Other event types return 404. No outgoing webhooks are emitted.
parameters:
- $ref: '#/components/parameters/id'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ContactsEventsNoteAttributes'
example:
id: 912345679
public_id: GhIjKl
contact_id: 123
content: Called about the refund; promised a callback on Friday.
created_by_id: 456
occurred_at: '2026-10-12T14:03:00.000Z'
created_at: '2026-10-13T09:15:22.000Z'
updated_at: '2026-10-13T09:15:22.000Z'
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer.'
example:
error: API key missing or invalid
hint: 'Send the token as `Authorization: Bearer <token>`. Create one under Account > Team > Platform Applications (a workspace API key), or obtain one 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
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
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
example:
error: Content can't be blank
hint: null
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to authenticate, which 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
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- contacts_events_note
properties:
contacts_events_note:
$ref: '#/components/schemas/ContactsEventsNoteParametersUpdate'
example:
contacts_events_note:
content: Called about the refund; promised a callback on Friday.
occurred_at: '2026-10-12T14:03:00.000Z'
delete:
tags:
- Contacts::Events::Note
summary: Delete Contact Activity Note
operationId: removeContactsEventsNotes
description: Permanently delete a contact note, including UI and workflow notes. Other event types and inaccessible events return 404. No outgoing webhooks are emitted.
parameters:
- $ref: '#/components/parameters/id'
responses:
'204':
description: Deleted; no response body.
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
error:
type: string
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to authenticate, which scope was missing, or where the route list lives. Always present, and null when this error has no next step to offer.'
example:
error: API key missing or invalid
hint: 'Send the token as `Authorization: Bearer <token>`. Create one under Account > Team > Platform Applications (a workspace API key), or obtain one 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
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
components:
parameters:
id:
name: id
in: path
required: true
schema:
type: string
per_page:
name: per_page
in: query
required: false
description: Records per page. Defaults to 20; raise it up to 100 for bulk reads. A larger value returns 100 records. Zero, a negative or a non-integer value is a 422. The `Link` next-page URL keeps the value, so a client following it keeps the page size. More [in our guides](https://developers.myclickfunnels.com/docs/pagination).
schema:
type: integer
minimum: 1
default: 20
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
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).
responses:
WorkspaceGrantForbidden:
description: "Forbidden — this request's workspace is closed to it.\n\nThree cases return this:\n\n* The access token is limited to specific workspaces (see the workspace selection made when\n the key was provisioned, or the workspaces approved on the OAuth consent screen) and the\n request acts on a workspace outside that set.\n* The access token is limited to specific workspaces and the request's workspace could not be\n determined at all. The gate is fail-closed, so a workspace-limited token is denied rather\n than allowed through when the target workspace is ambiguous.\n* The workspace's team has no active ClickFunnels subscription: it was canceled, is paused,\n or is locked out after failed payments. Reads and writes are both refused until the\n subscription is reactivated, and the body carries `\"code\": \"subscription_inactive\"`.\n\nA token with no workspace restriction never receives the first two."
content:
application/json:
schema:
type: object
properties:
error:
type: string
code:
type: string
description: A machine-readable cause, when there is one. `subscription_inactive` means the workspace's team has no active ClickFunnels subscription.
enum:
- subscription_inactive
hint:
type:
- string
- 'null'
description: 'The next step for the caller: how to 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:
workspace_not_granted:
summary: Token not granted this workspace
value:
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/teams/{team_id}/workspaces to list the workspaces this token can reach (GET /api/v2/teams lists the team ids).
subscription_inactive:
summary: Team subscription inactive
value:
error: 'Forbidden: This workspace''s team does not have an active ClickFunnels subscription, so API access to it is disabled until the subscription is reactivated.'
hint: null
code: subscription_inactive
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
schemas:
ContactsEventsNoteAttributes:
type: object
title: Contact Activity Note
properties:
id:
type: integer
description: The same id as the contact event.
public_id:
type: string
contact_id:
type: integer
content:
type:
- string
- 'null'
description: The note text. Legacy blank notes may be null.
created_by_id:
type:
- integer
- 'null'
description: Membership id; uses the recorded membership or the author's membership in this workspace's team. Workflow notes have no author and return null.
occurred_at:
type: string
format: date-time
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
example:
id: 912345679
public_id: GhIjKl
contact_id: 123
content: Called about the refund; promised a callback on Friday.
created_by_id: 456
occurred_at: '2026-10-12T14:03:00.000Z'
created_at: '2026-10-13T09:15:22.000Z'
updated_at: '2026-10-13T09:15:22.000Z'
ContactsEventsNoteParameters:
type: object
additionalProperties: true
description: Only content and occurred_at are writable; other attributes are ignored.
properties:
content:
type: string
minLength: 1
description: Required nonblank text on creation; no length cap.
occurred_at:
type: string
format: date-time
description: Optional ISO 8601 timestamp. Defaults to server time on creation; omission on update preserves its occurrence time.
example:
content: Called about the refund; promised a callback on Friday.
occurred_at: '2026-10-12T14:03:00.000Z'
required:
- content
ContactsEventsNoteParametersUpdate:
type: object
additionalProperties: true
description: Only content and occurred_at are writable; other attributes are ignored.
properties:
content:
type: string
minLength: 1
description: Required nonblank text on creation; no length cap.
occurred_at:
type: string
format: date-time
description: Optional ISO 8601 timestamp. Defaults to server time on creation; omission on update preserves its occurrence time.
example:
content: Called about the refund; promised a callback on Friday.
occurred_at: '2026-10-12T14:03:00.000Z'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: 'A workspace API key or an OAuth access token, sent as `Authorization: Bearer <token>`.
Both carry the same scope vocabulary as the `OAuth2` scheme below. Category-only
scopes restrict access to the categories they name. Coarse wildcards remain additive:
`read contacts:read` reads every category, while `write contacts:read` can write every
category. Omit coarse scopes when restricting access to specific categories.
Legacy tokens with only coarse scopes retain their existing unrestricted access;
a bare `read` scope alone does not enforce read-only access.
'
OAuth2:
type: oauth2
description: 'OAuth 2.0 authorization code flow for REST integrations. Create a Platform Application
and follow `https://developers.myclickfunnels.com/docs/oauth-20` to connect users.
Authorization server metadata is published at
`https://accounts.myclickfunnels.com/.well-known/oauth-authorization-server`.
Dynamic client registration at `/oauth/register` is for MCP clients only; MCP-scoped
tokens must use `https://agents.myclickfunnels.com/mcp`, not the REST API.
Scopes are least-privilege by category. Ask for the two coarse wildcards (`read`,
`write`) only when an integration genuinely needs the whole workspace; otherwise ask
for the `<category>:read` / `<category>:write` pairs you use. `write` implies `read`
for the same category. Protected resource metadata (RFC 9728) for this API lives at
`https://accounts.myclickfunnels.com/.well-known/oauth-protected-resource`.
'
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 & Design
sites:write: Read and write Sites & 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
externalDocs:
description: More in-depth guides and further resources
url: https://developers.myclickfunnels.com
x-provenance:
method: harvested
publisher: ClickFunnels
source: https://accounts.myclickfunnels.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)