# 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`:

```bash
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 `amount` is 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.
