Directory Models
This document describes the public GraphQL API for the "Directory" concepts. The directory is a lightweight CRM system used in conjunction with other tools to simplify management of investors, entities, and people, for a given GP.
Overview
The Directory API is designed to help organizations manage structured information about investors, legal entities, and people, along with custom fields and schema-driven validation. All directory objects are associated with an Organization, and access is scoped to the authenticated user's organization context.
Core Concepts
Organization
-
Fields:
id(UUID): Unique identifier.name(String): Organization name.handle(String): Unique handle.createdAt(DateTime): Creation timestamp.directoryInvestors([DirectoryInvestor]): Investors associated with the organization.directoryPeople([DirectoryPerson]): People associated with the organization.directoryEntities([DirectoryEntity]): Legal entities associated with the organization.directorySchemas([DirectorySchema]): Schemas available to the organization.
-
Query:
organization(id: UUID!): Organization- Fetches an organization by ID (must match the authenticated user's org).
DirectoryInvestor
Represents an investor in the directory.
-
Fields:
id(UUID)email(String, nullable)name(String)attribution(String)notes(String)tags([String])createdAt(DateTime)updatedAt(DateTime)events([DirectoryInvestorEvent])senderOrganization(Organization)customFields(JSON)directorySchema(DirectorySchema, nullable)directoryEntities([DirectoryEntity]): Linked entities.directoryPeople([DirectoryPerson]): Linked people.
-
Mutations:
createDirectoryInvestor(investor: InvestorCreateInput!): DirectoryInvestorupdateDirectoryInvestor(investor: InvestorUpdateInput!): DirectoryInvestorassociateEntityToInvestor(investorId: UUID!, entityId: UUID!): DirectoryInvestorassociatePersonToInvestor(directoryInvestorId: UUID!, directoryPersonId: UUID!): DirectoryInvestordisassociateEntityFromInvestor(directoryInvestorId: UUID!, directoryEntityId: UUID!): DirectoryInvestordissassociatePersonFromInvestor(directoryInvestorId: UUID!, directoryPersonId: UUID!): DirectoryInvestor
-
Input Types:
InvestorCreateInputname(String, required)email(String, optional)tags([String], optional)notes(String, optional)customFields(JSON, optional)directorySchemaId(UUID, optional)
InvestorUpdateInputid(UUID, required)name(String, required)email(String, optional)tags([String], optional)notes(String, optional)customFields(JSON, optional)directorySchemaId(UUID, optional)
DirectoryEntity
Represents a legal entity (e.g., company, trust) in the directory.
-
Fields:
id(UUID)createdAt(DateTime)externalReferences([String])name(String)shortId(ID)type(String)directorySchema(DirectorySchema, nullable)customFields(JSON)
-
Mutations:
createDirectoryEntity(entity: DirectoryEntityCreateInput!): DirectoryEntityupdateDirectoryEntity(entity: DirectoryEntityUpdateInput!): DirectoryEntity
-
Input Types:
DirectoryEntityCreateInputname(String, required)type(String, required)externalReferences([String], optional)customFields(JSON, optional)directorySchemaId(UUID, required)
DirectoryEntityUpdateInputid(UUID, required)name(String, required)type(String, required)externalReferences([String], required)customFields(JSON, optional)directorySchemaId(UUID, required)
DirectoryPerson
Represents a person in the directory. Often called a 'Contact' in the product.
-
Fields:
id(UUID)createdAt(DateTime)email(String)externalReferences([String])name(String)senderOrganizationId(UUID)customFields(JSON)senderOrganization(Organization)directorySchema(DirectorySchema, nullable)
-
Mutations:
createDirectoryPerson(person: DirectoryPersonCreateInput!): DirectoryPersonupdateDirectoryPerson(person: DirectoryPersonUpdateInput!): DirectoryPerson
-
Input Types:
DirectoryPersonCreateInputname(String, required)email(String, required)customFields(JSON, optional)directorySchemaId(UUID, required)
DirectoryPersonUpdateInputid(UUID, required)name(String, required)email(String, required)customFields(JSON, optional)directorySchemaId(UUID, required)
DirectorySchema
Defines the schema for directory objects, enabling custom fields and validation.
- Fields:
id(UUID)schema(JSON): The schema definition.version(Int)type(String)
DirectoryInvestorEvent
Represents an event in the lifecycle of a DirectoryInvestor (e.g., creation, update, association of an entity, etc).
- Fields:
id(UUID)metadata(JSON)createdAt(DateTime)account(Account, nullable)
Relationships
- Organization is the root context for all directory objects.
- DirectoryInvestor can be linked to multiple DirectoryEntity and DirectoryPerson objects.
- DirectoryEntity and DirectoryPerson reference a DirectorySchema for custom fields and validation.
- DirectoryInvestorEvent tracks events that happen to investors. Events are automatically generated for investor lifecycle changes.