folk CRM People, Companies & Deals
After a client call, find the contact in folk, log the interaction, add a note and set a follow-up task, then move the deal forward in its group. Covers people, companies, deals, notes, tasks and interactions, with folk's field filters (email domain, group, last interaction date).
Connect this API to an AI agent Browse all specs
What you can do with folk CRM People, Companies & Deals via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /v1/users/me |
getCurrentUser | Get the folk user the API key belongs to |
| GET | /v1/groups |
listGroups | List the workspace's groups (pipelines and lists) |
| GET | /v1/people |
listPeople | List or filter contacts (by name, email, group, company...) |
| POST | /v1/people |
createPerson | Add a new contact |
| GET | /v1/people/{personId} |
getPerson | Get a contact with emails, phones, companies and custom fields |
| PATCH | /v1/people/{personId} |
updatePerson | Update a contact's details, groups or custom fields |
| GET | /v1/companies |
listCompanies | List or filter companies |
| POST | /v1/companies |
createCompany | Add a new company |
| GET | /v1/companies/{companyId} |
getCompany | Get a company |
| PATCH | /v1/companies/{companyId} |
updateCompany | Update a company's details or custom fields |
| GET | /v1/groups/{groupId}/{objectType} |
listDeals | List deals of one type in a group |
| POST | /v1/groups/{groupId}/{objectType} |
createDeal | Create a deal in a group |
| GET | /v1/groups/{groupId}/{objectType}/{objectId} |
getDeal | Get a deal with its people, companies and custom fields |
| PATCH | /v1/groups/{groupId}/{objectType}/{objectId} |
updateDeal | Update a deal: name, linked people and companies, custom fields such as status |
| GET | /v1/notes |
listNotes | List notes, optionally for one contact, company or deal |
| POST | /v1/notes |
createNote | Add a note to a contact, company or deal |
| GET | /v1/tasks |
listTasks | List tasks, optionally filtered |
| POST | /v1/tasks |
createTask | Create a follow-up task on a contact, company or deal |
| POST | /v1/tasks/{taskId}/mark-as-done |
markTaskAsDone | Mark a task as done |
| GET | /v1/interactions |
listInteractions | List past or upcoming interactions with a contact or company (beta) |
| POST | /v1/interactions |
createInteraction | Log a call, meeting or message with a contact or company |
Authentication
bearerApiKeyAuth
Bearer token — sent as Authorization: Bearer <token>
folk API key, sent as Authorization: Bearer <key>.
How to get a credential
- Sign in to folk and open Settings > API (https://app.folk.app/apps/contacts/network/settings/api-keys).
- Click Generate a new API key, give it a name and copy it; it is shown once.
- The key acts as you: it sees the groups and records your folk user can see.
Permissions used
| Access | Operations |
|---|---|
| Your workspace user (read) | getCurrentUser, listGroups, listPeople, getPerson, listCompanies, getCompany, listDeals, getDeal, listNotes, listTasks, listInteractions |
| Your workspace user (write) | createPerson, updatePerson, createCompany, updateCompany, createDeal, updateDeal, createNote, createTask, markTaskAsDone, createInteraction |
Common errors
- 401 Unauthorized: missing or revoked API key. Generate a new one.
- 403 Forbidden: your user has no access to that group or record.
- 404 Not Found: wrong id, or the deal
objectTypedoes not match the group's deal type name. - 400/422: invalid body or filter (ids are 40 characters, e.g.
per_...,com_...,grp_...). - 429 Too Many Requests: limits are 600 requests per minute and 20 per 2 seconds per user. Wait for
Retry-After.
Store the key as a bearer credential in VX Agents; never paste it into chat.
Usage guide
Setup
- Credential: a folk API key (Settings > API), stored as a bearer credential. It acts as the folk user who created it.
- Worth pinning: the
groupIdof your main pipeline group and its dealobjectType(the deal type name shown in that group, e.g.Deals), so deal tools need no lookup.
After a client call
getCurrentUseronce to know who "me" is.- Find the contact:
listPeoplewith a filter, e.g.filter[fullName][eq]=Jane Doe,filter[emails][like][email protected], orfilter[companies][in][id]=com_.... ThengetPersonfor full details. Companies work the same way withlistCompanies/getCompany. - Not there yet? Confirm with the user, then
createPerson(names,emails,phones,jobTitle,companies,groups). - Log what happened:
createInteractionwithentity{ "id": "per_..." },dateTime(ISO-8601),title,contentandactivityType(call,meeting,message,coffee,lunch...). - Add context with
createNote(entity,visibilitypublicorprivate,contentin markdown). - Set the follow-up:
createTaskwithentity,titleanddueAt(date), optionallyassignedUsers. Close it later withmarkTaskAsDone. - Move the deal:
listGroups->listDeals(groupId,objectType) ->getDeal->updateDealwith newcustomFieldValues(e.g. the status field) or linkedpeople/companies. Create one withcreateDeal.
Good to know
- Confirm with the user before any create or update; they change shared CRM data.
- Ids are 40 characters with a prefix:
per_person,com_company,grp_group,obj_deal. - Custom fields: on people and companies they are keyed by group id then field name (
{ "grp_...": { "Status": "Won" } }); on deals directly by field name ({ "Status": "Won" }). - Filters:
filter[<field>][<op>]=valuewith ops such aseq,like,in,empty,gt; combine withcombinator=and|or. - Lists return up to 100 items per page (
limit); to continue, take thecursorvalue from the response'spagination.nextLink. listInteractions(beta) needsentity.idandtimeframepastorupcoming.- Rate limits: 600 requests/minute and 20 per 2 seconds per user; on 429 wait for
Retry-After. - Source: folk API reference (https://developer.folk.app/api-reference/overview), checked 2026-10-16.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “folk CRM People, Companies & Deals” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.