Verified against api.folk.app/v1 on 2026-10-15.
- Since 2026-08-07: POST /v1/groups {name, visibility} and POST /v1/groups/{groupId}/custom-fields/{entityType} work. Older notes saying custom-field definitions are UI-only are stale.
- GET /v1/groups/{g}/custom-fields/{entityType} returns fields WITHOUT an id. Update is PATCH /v1/groups/{g}/custom-fields/{entityType}/{customFieldName} (URL-encode the name). Body: {name?, config?, addOptions:[{label,color}], removeOptions:[{id}], updateOptions:[{id,label?,color?}]}. Option ids (gcfo_...) appear in the list response's options.
- Select option colors must come from a fixed palette: #5738ff #20cea9 #f54e50 #f2b934 #879aab #de4a96 #4a90e2 #f5a623.
- entityType for objects is the object type name, e.g. custom-fields/Deals. A group has no object types until one is added; requesting custom-fields/Deals then errors listing only person, company. After clicking + column > Deals in the UI, the type shows up as an objectField named Deals on BOTH custom-fields/person and custom-fields/company. It also comes with template fields on Deals (Status singleSelect [Lead, Qualified, Proposal sent, Closed-won, Closed-lost], Deal value currency USD, Deal owner userField, Closed at), and a template Status singleSelect gets added to person and company in that group too.
- Objects: GET|POST /v1/groups/{g}/{objectType}. Object customFieldValues are flat {Field: value}, not nested by group id like people/companies' customFieldValues[groupId][Field]. Deals can only link people/companies that are in the same group.
Practical consequence: to install a custom pipeline ladder, reuse the template Deals Status field. PATCH removeOptions (all existing ids) + addOptions (your ladder in order), and only while no deals exist, so you don't create a second Status field.