Objects & schema model
Primicornis stores CRM data in three cooperating layers:
Object definitions
An object definition is a first-class type inside a workspace (for example startup, company, person, fund, opportunity, or your custom type). Each object has:
- A stable API key (slug-like identifier).
- Display metadata (name, description, icon).
- Property definitions attached to that object.
Property definitions
Properties map to strongly typed fields (text, number, currency, date, email, relation, …). Relations reference other object definitions and power graph-like navigation inside the UI.
Core portfolio vocabulary
| Object | Typical use |
|---|---|
| Startup | Portfolio company or accelerator cohort company |
| Company | Strategic partner, LP entity, or vendor |
| Person | Founder, investor, operator |
| Fund | Vehicle capturing commitments and DPI metrics (your schema may vary) |
| Opportunity | Deal flow stage, round, or partnership pipeline |
Your exact keys may differ — always read definitions from GET /workspaces/{id}/object-definitions.
Records & versions
Records hold JSON properties payloads keyed by property keys. Writes should be idempotent where possible: upsert flows will arrive with external CRM IDs in dedicated text fields until native external-ID columns graduate from the roadmap.
Relationships & linked records
Relation properties store target record IDs. Import order matters: create people before linking them as founders on startups, and create startups before attaching opportunities.
Imports & mappings
CSV/XLSX ingestion runs through the import analyzer endpoints: map columns → property keys → apply in a transaction with run history. Prefer dry-runs (analyze) before destructive apply operations.
Pagination & search
List endpoints return bounded pages; always honor limit and cursors where provided. Global search is workspace-scoped and suitable for operator workflows, not bulk extraction — enforce reasonable poll intervals.