Templates
A template is what a workspace is set up for. It presets a pipeline, properties, the words the web app uses, and a short playbook for agents. It never adds new kinds of records: agents always work with the same contacts, companies, deals, interactions and tasks, through the same tools and API.
There are two templates:
| Template | For | Pipeline | App labels |
|---|---|---|---|
| Sales (the default) | Agents that sell, book, support or recruit | Sales Pipeline | Accounts, Contacts, Deals |
| Fundraising | Founders whose agents run investor outreach | Fundraising | Funds, Investors, Pipeline |
Choosing one
Pick the template when you create a workspace: when you sign up, in Settings → Workspaces, or from your backend with template:
curl -X POST https://undocrm.com/v1/workspaces \
-H "Authorization: Bearer $ORG_KEY" -H "content-type: application/json" \
-d '{"name": "Seed round", "template": "fundraising"}'
Leave template out for Sales. GET /v1/workspace returns the workspace's template, and its playbook (or null).
An existing workspace can be switched to Fundraising in Settings → Workspaces → Use for fundraising, or with POST /v1/workspace/template and {"template": "fundraising"} (owner key or admin). It only adds what's missing: the Fundraising pipeline goes beside the pipelines you have, and properties you already use keep their values and history. Nothing is deleted, renamed or moved, running it again changes nothing, and the change is in the activity log.
Fundraising
How the records map:
- An investor is a contact.
- A fund is a company. Its domain decides who's there, so everyone with an @fund.vc email is at that fund.
- Each fund's conversation for a round is one deal, in the Fundraising pipeline. Its
amountis their check.
The pipeline
| Stage | Key | Probability |
|---|---|---|
| Target | target |
5% |
| Reached out | reachedout |
10% |
| First meeting | firstmeeting |
20% |
| Follow-up meeting | followupmeeting |
35% |
| Due diligence | duediligence |
50% |
| Term sheet | termsheet |
80% |
| Committed (closed, won) | committed |
100% |
| Passed (closed, lost) | passed |
0% |
A new fundraising workspace has only this pipeline. Agents pass the key or the label: update("dl_…", {dealstage: "Term sheet"}).
Properties
These are registered for you, so every agent uses the same names (read(target: "properties") lists them with their values):
| On | Property | Values |
|---|---|---|
| Fund (company) | fund_type |
VC, Angel syndicate, Corporate VC, Family office, Accelerator |
stage_focus |
Pre-seed, Seed, Series A, Series B+ | |
check_size_min, check_size_max |
Numbers, in USD | |
sector_focus, geography, portfolio_conflicts |
Text | |
leads_rounds |
true or false | |
| Investor (contact) | investor_role |
Partner, Principal, Associate, Angel, Scout |
intro_by |
Text | |
| Deal | round |
Pre-seed, Seed, Series A, Series B+ |
instrument |
SAFE, Convertible note, Priced equity | |
valuation_cap |
A number, in USD | |
lead_or_follow |
Lead, Follow | |
source |
Warm intro, Cold outreach, Inbound, Event | |
pass_reason |
Text, in their words |
People on a deal have roles like lead_partner, partner, associate, champion or angel.
The playbook
Agents connected to a fundraising workspace receive a short playbook with their instructions:
- Move a fund's deal through the stages as the conversation moves.
- Before reaching out, claim the whole fund with
can_contact(person: "co_…", channel), so two agents never pitch the same fund. - Never contact anyone who passed or opted out.
- Log every touch, and add a follow-up task after every meeting.
- When a fund passes, move its deal to Passed and record
pass_reason.
The labels are only in the web app. The API, the MCP tools and these docs keep saying contact, company and deal, so an agent's calls are the same in every workspace.