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!): DirectoryInvestor
    • updateDirectoryInvestor(investor: InvestorUpdateInput!): DirectoryInvestor
    • associateEntityToInvestor(investorId: UUID!, entityId: UUID!): DirectoryInvestor
    • associatePersonToInvestor(directoryInvestorId: UUID!, directoryPersonId: UUID!): DirectoryInvestor
    • disassociateEntityFromInvestor(directoryInvestorId: UUID!, directoryEntityId: UUID!): DirectoryInvestor
    • dissassociatePersonFromInvestor(directoryInvestorId: UUID!, directoryPersonId: UUID!): DirectoryInvestor
  • Input Types:

    • InvestorCreateInput
      • name (String, required)
      • email (String, optional)
      • tags ([String], optional)
      • notes (String, optional)
      • customFields (JSON, optional)
      • directorySchemaId (UUID, optional)
    • InvestorUpdateInput
      • id (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!): DirectoryEntity
    • updateDirectoryEntity(entity: DirectoryEntityUpdateInput!): DirectoryEntity
  • Input Types:

    • DirectoryEntityCreateInput
      • name (String, required)
      • type (String, required)
      • externalReferences ([String], optional)
      • customFields (JSON, optional)
      • directorySchemaId (UUID, required)
    • DirectoryEntityUpdateInput
      • id (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!): DirectoryPerson
    • updateDirectoryPerson(person: DirectoryPersonUpdateInput!): DirectoryPerson
  • Input Types:

    • DirectoryPersonCreateInput
      • name (String, required)
      • email (String, required)
      • customFields (JSON, optional)
      • directorySchemaId (UUID, required)
    • DirectoryPersonUpdateInput
      • id (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.