Covenant API

Endpoint: https://covenant.co/api/v1/graphql

Read-only access to your investment, document, and review data. Authenticate with your WorkOS API key.

Contact

Covenant Support

support@covenant.co

API Endpoints
https://covenant.co/api/v1/graphql

Authentication

All requests require an API key issued by Covenant via WorkOS. Pass the key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

API keys are scoped to your organization. Contact your Covenant administrator or support@covenant.co to obtain one.

Permissions

Access to the application and API is controlled by WorkOS permissions assigned to each user. Permissions are managed in the WorkOS Admin Portal (or via WorkOS-federated IdPs such as PingOne) and can be customized per organization.

Today the application uses three permissions:

Permission Grants
org:summary:read View investments, documents, reviews, issues, and exports
org:summary:manage Create, update, and delete the above; trigger exports; dismiss notifications
ai:ask-covenant:data Use Ask Covenant against your organization's data

Reference data (managers, client entities, law firms, categories, geographies) and hub tiles are Covenant-administered and not exposed to organization users.

Authentication, session, organization-membership, invitation, and SSO-connection events in the audit log originate from WorkOS webhooks; the permission that authorized those actions is the WorkOS permission held by the actor at the time, not an application-level check.

Rate Limits

The public API allows 30 requests per minute per API key. Exceeding this limit returns a TOO_MANY_REQUESTS error. Wait and retry after a short backoff.

Pagination

List queries (investments, managers, etc.) use cursor-based pagination with first and after arguments. Use pageInfo.endCursor as the after value for the next page.

Error Handling

Errors are returned in the standard GraphQL errors array with an extensions.code field.

  • UNAUTHORIZED - Missing or invalid API key
  • FORBIDDEN - Key valid but insufficient permissions
  • TOO_MANY_REQUESTS - Rate limit exceeded
  • BAD_USER_INPUT - Invalid query arguments

Audit Log Events

Events streamed to your SIEM (Splunk, Datadog, etc.) via WorkOS Log Streams. Each event includes action, actor, targets, context, and metadata.

Configure a Log Stream destination in the Admin Portal or contact support@covenant.co.

The Permission column lists the WorkOS permission required to trigger the event:

  • A permission slug (e.g. org:summary:manage) — the actor must hold this WorkOS permission, granted directly or via a federated IdP such as PingOne.
  • Any signed-in member — no permission slug gates the action; any authenticated member of your organization can trigger it.
  • Covenant admin — internal Covenant operation; not exposed to organization users.
  • WorkOS-enforced — the event originates from a WorkOS platform webhook; authorization was applied by WorkOS on the actor, not by an application-level check.

Actor permissions snapshot

Every application-emitted event carries actor.metadata.permissions — a sorted, comma-joined snapshot of the WorkOS permissions the session held at emission time (e.g. org:summary:manage,org:summary:read,strategies:real-estate). Use this to write role-agnostic SIEM rules: assert against the permission strings in the Permission column above, not against your own WorkOS role names. Roles can be renamed, added, or restructured without changing detection logic — only the underlying permission contract matters.

For impersonated sessions the snapshot is on event metadata as metadata.impersonated_user_permissions instead, since me.scopes reflects the impersonated user while the actor is the Covenant admin. The actor in that case has no permissions field.

Investments

Action Description Permission
investment.created A new investment was added to the portfolio. org:summary:manage
investment.updated An investment record was modified. org:summary:manage
investment.deleted An investment was removed from the portfolio. Covenant admin
investment.metadata_imported Investment metadata values were imported from a CSV, adding any fields the file named (admin surface). Covenant admin

Documents

Action Description Permission
document.created A new document was created. org:summary:manage
document.updated A document record was modified. org:summary:manage
document.deleted A document was deleted. Covenant admin
document.version_created A new version was uploaded for a document. org:summary:manage
document.version_updated A document version was modified. Covenant admin
document.version_deleted A document version was removed. Covenant admin
document.version_data_deleted The extracted data for a document version was cleared. org:summary:manage
document.version_downloaded The original file for a document version was downloaded. org:summary:read
document.version_markup_downloaded The marked-up file for a document version was downloaded. org:summary:read
document.version_pdf_preview_downloaded The PDF preview for a document version was downloaded for in-browser viewing. org:summary:read

Reviews

Action Description Permission
summary.created A new review / answer set was created for a document. Covenant admin
summary.deleted A review / answer set was deleted. Covenant admin
summary.ready A review was marked ready and the "Summary Ready" notification was sent. Covenant admin
mfn.review_reopened A released MFN review was taken back into review, hiding its elections from the client. Covenant admin
summary.answer_updated A consensus answer was edited by a reviewer. org:summary:manage
summary.answer_context_updated The supporting context for an answer was updated. org:summary:manage

Issues

Action Description Permission
issue.upserted An issue (flag) was created or updated on a document. org:summary:manage
issue.language_updated Suggested language on an issue was updated. org:summary:manage
issue.language.requested AI-suggested language was requested for an issue. org:summary:read
markup.requested A markup export was requested for a document. org:summary:read

AI

Action Description Permission
ai.chat_started A user submitted a prompt to an AI chat assistant. Carries the prompt, not the response. Emitted on accepted chats only — a request refused before the model runs produces no event. Reaches a customer only once a matching event schema is registered in their WorkOS environment. Any signed-in member
ai.guardrail_triggered A guardrail around an AI chat refused, bounded or silently emptied a request. Carries the guardrail id, a severity, and the same prompt fields as ai.chat_started so the flag joins back to the chat that caused it. One event per hit, so a single chat turn can produce several. Reaches a customer only once a matching event schema is registered in their WorkOS environment. Any signed-in member
ai.connector_tool_called A user called a tool through the Covenant MCP connector from an AI assistant such as Claude. Carries the tool name, the id of the registered client app that made the call, and source: connector, which every event emitted during a connector call also carries. Emitted before the tool runs, so a call that later fails is still recorded. Reaches a customer only once a matching event schema is registered in their WorkOS environment. Any signed-in member

Exports

Action Description Permission
export.investment_markup An investment markup export was generated. org:summary:manage
export.document_markup A document markup export was generated. org:summary:manage
export.investment_summary An investment summary was exported. org:summary:manage
export.investment_summary_excel An investment's summary terms table was exported to Excel (client-built). org:summary:read
export.document_summary A document summary was exported. org:summary:manage
export.portfolio_analysis A portfolio analysis report was exported. org:summary:manage
export.awe_comparison An AWE (Investor Consents) comparison report was exported. org:summary:manage
export.awe_transposed The Investor Consents request-type (transposed) view was exported. org:summary:read
export.awe_survey_result An Investor Consents amendment's survey results were exported. org:summary:read
export.fund_amendments A fund's amendments comparison was exported. org:summary:read
export.mfn_summary An investment's MFN election summary was exported. org:summary:read
export.compare_investment_versions A version comparison export was generated for an investment. org:summary:manage
export.compare_investment_custom A custom comparison export was generated for an investment. org:summary:manage
export.compare_document_versions A version comparison export was generated for a document. org:summary:manage
export.compare_document_custom A custom comparison export was generated for a document. org:summary:manage
export.investment_notes Investment issue notes were exported. org:summary:manage
export.investment_comments Investment issue comments were exported. org:summary:manage
export.investment_language Investment issue suggested language was exported. org:summary:manage
export.document_notes Document issue notes were exported. org:summary:manage
export.document_comments Document issue comments were exported. org:summary:manage
export.document_language Document issue suggested language was exported. org:summary:manage
export.investment_word A Word document was exported for an investment. org:summary:read
export.document_word A Word document was exported for a document. org:summary:read
export.investment_type_transposed The Investment Data investment-type (transposed) view was exported. org:summary:read
export.portfolio_statistics_excel A portfolio's term statistics were exported to Excel (client-built). org:summary:read
export.investment_metadata Investment metadata was exported as a spreadsheet (admin surface). org:summary:read
export.metadata_instances An organization's metadata registry values were exported as a CSV (admin surface). org:summary:read
export.metadata_import_template An organization's metadata values were exported as a CSV import template (admin surface). org:summary:read
export.job_model_judge A job's per-question model answers and judge decisions were exported as a CSV (admin surface). org:summary:read
export.credit_covenants A credit covenant review was exported as a spreadsheet (admin surface). org:summary:read
export.survey_csv A survey composition was exported as the operator questions and prompts CSVs (admin surface). org:summary:read
export.ai_chat An AI chat conversation was exported as a Markdown file (client-built). Carries the conversation id, its chat mode and how many turns the file held, never the text of the conversation. ai:ask-covenant:data

Notifications

Action Description Permission
notification.created A notification was sent to organization users. org:summary:manage
notification.deleted A notification was dismissed. org:summary:manage

Hub

Action Description Permission
hub_tile.created A hub tile was added to an organization's dashboard. Covenant admin
hub_tile.updated A hub tile was modified. Covenant admin
hub_tile.deleted A hub tile was removed. Covenant admin

Reference Data

Action Description Permission
manager.created A fund manager record was created. Covenant admin
manager.updated A fund manager record was modified. Covenant admin
manager.deleted A fund manager record was deleted. Covenant admin
client_entity.created A client entity was created. Covenant admin
client_entity.updated A client entity was modified. Covenant admin
client_entity.deleted A client entity was deleted. Covenant admin
law_firm.created A law firm record was created. Covenant admin
law_firm.updated A law firm record was modified. Covenant admin
law_firm.deleted A law firm record was deleted. Covenant admin
category.created A category classification was created. Covenant admin
category.updated A category classification was modified. Covenant admin
category.deleted A category classification was deleted. Covenant admin
geography.created A geography classification was created. Covenant admin
geography.updated A geography classification was modified. Covenant admin
geography.deleted A geography classification was deleted. Covenant admin
sector.created A sector classification was created. Covenant admin
sector.updated A sector classification was modified. Covenant admin
sector.deleted A sector classification was deleted. Covenant admin
sub_sector.created A sub-sector classification was created. Covenant admin
sub_sector.updated A sub-sector classification was modified. Covenant admin
sub_sector.deleted A sub-sector classification was deleted. Covenant admin
country.created A country was created. Covenant admin
country.updated A country was modified. Covenant admin
country.deleted A country was deleted. Covenant admin

Authentication

Action Description Permission
authentication.email_verification_succeeded A user verified their email address. WorkOS-enforced
authentication.magic_auth_succeeded A user authenticated via magic link. WorkOS-enforced
authentication.mfa_succeeded A user completed multi-factor authentication. WorkOS-enforced
authentication.oauth_succeeded A user authenticated via OAuth. WorkOS-enforced
authentication.password_succeeded A user authenticated with their password. WorkOS-enforced
authentication.sso_succeeded A user authenticated via SSO. WorkOS-enforced
authentication.email_verification_failed An email verification attempt failed. WorkOS-enforced
authentication.magic_auth_failed A magic link authentication attempt failed. WorkOS-enforced
authentication.mfa_failed A multi-factor authentication attempt failed. WorkOS-enforced
authentication.oauth_failed An OAuth authentication attempt failed. WorkOS-enforced
authentication.password_failed A password authentication attempt failed. WorkOS-enforced
authentication.sso_failed An SSO authentication attempt failed. WorkOS-enforced
email_verification.created An email verification was initiated. WorkOS-enforced
magic_auth.created A magic link sign-in was initiated. WorkOS-enforced
password_reset.created A password reset was requested. WorkOS-enforced

Sessions

Action Description Permission
session.created A new user session was created. For impersonated sessions the actor is the Covenant admin who initiated the impersonation — anchor SIEM rules on actor.metadata.covenant_user = true. The impersonated user remains the target and metadata.impersonated = true with metadata.reason preserved. WorkOS-enforced

Users

Action Description Permission
user.created A user account was created in the identity provider. WorkOS-enforced
user.updated A user account was modified in the identity provider (profile, email, name). WorkOS-enforced
user.deleted A user account was deleted from the identity provider. WorkOS-enforced

Organization

Action Description Permission
organization_membership.created A user was added to the organization. WorkOS-enforced
organization_membership.updated A user's organization membership was modified (role change, etc.). WorkOS-enforced
organization_membership.deleted A user was removed from the organization. WorkOS-enforced
invitation.created An invitation was sent to join the organization. WorkOS-enforced
organization_domain.verified An organization domain was successfully verified. WorkOS-enforced
organization_domain.verification_failed An organization domain verification attempt failed. WorkOS-enforced

SSO

Action Description Permission
connection.activated An SSO connection was activated. WorkOS-enforced
connection.deactivated An SSO connection was deactivated. WorkOS-enforced
connection.deleted An SSO connection was deleted. WorkOS-enforced

Queries

_

Response

Returns a Boolean

Example

Query
query _ {
  _
}
Response
{"data": {"_": true}}

assetClasses

Description

List all asset classes in your organization.

Response

Returns [AssetClass!]!

Example

Query
query assetClasses {
  assetClasses {
    id
    name
  }
}
Response
{
  "data": {
    "assetClasses": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "xyz789"
      }
    ]
  }
}

categories

Description

List all categories in your organization.

Response

Returns [Category!]!

Example

Query
query categories {
  categories {
    id
    name
  }
}
Response
{
  "data": {
    "categories": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "abc123"
      }
    ]
  }
}

countries

Description

List all countries.

Response

Returns [Country!]!

Example

Query
query countries {
  countries {
    id
    name
  }
}
Response
{
  "data": {
    "countries": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "xyz789"
      }
    ]
  }
}

documentTypes

Description

List document types, optionally filtered by investment or investment type.

Response

Returns [DocumentType!]!

Arguments
Name Description
investmentId - Cuid
investmentTypeId - Cuid

Example

Query
query documentTypes(
  $investmentId: Cuid,
  $investmentTypeId: Cuid
) {
  documentTypes(
    investmentId: $investmentId,
    investmentTypeId: $investmentTypeId
  ) {
    id
    name
    slug
  }
}
Variables
{
  "investmentId": "cjld2cyuq0000t3rmniod1foy",
  "investmentTypeId": "cjld2cyuq0000t3rmniod1foy"
}
Response
{
  "data": {
    "documentTypes": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "abc123",
        "slug": "xyz789"
      }
    ]
  }
}

geographies

Description

List all geographies in your organization.

Response

Returns [Geography!]!

Example

Query
query geographies {
  geographies {
    id
    name
  }
}
Response
{
  "data": {
    "geographies": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "abc123"
      }
    ]
  }
}

groups

Description

List all groups in your organization.

Response

Returns [Group!]!

Example

Query
query groups {
  groups {
    id
    name
  }
}
Response
{
  "data": {
    "groups": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "abc123"
      }
    ]
  }
}

investment

Description

Get a single investment by ID.

Response

Returns an Investment

Arguments
Name Description
id - Cuid!

Example

Query
query investment($id: Cuid!) {
  investment(id: $id) {
    id
    name
    vintage
    externalId
    portfolio
    commitmentAmount
    commitmentCurrencyCode
    closingDate
    negotiationStatus
    dealStatus
    projectId
    fundType
    createdAt
    updatedAt
    archivedAt
    type {
      ...InvestmentTypeFragment
    }
    assetClass {
      ...AssetClassFragment
    }
    manager {
      ...ManagerFragment
    }
    lawFirm {
      ...LawFirmFragment
    }
    category {
      ...CategoryFragment
    }
    geography {
      ...GeographyFragment
    }
    group {
      ...GroupFragment
    }
    subgroup {
      ...SubgroupFragment
    }
    subdivision {
      ...SubdivisionFragment
    }
    sector {
      ...SectorFragment
    }
    subSector {
      ...SubSectorFragment
    }
    country {
      ...CountryFragment
    }
  }
}
Variables
{"id": "cjld2cyuq0000t3rmniod1foy"}
Response
{
  "data": {
    "investment": {
      "id": "cjld2cyuq0000t3rmniod1foy",
      "name": "abc123",
      "vintage": 123,
      "externalId": "xyz789",
      "portfolio": "xyz789",
      "commitmentAmount": 987.65,
      "commitmentCurrencyCode": "xyz789",
      "closingDate": "2007-12-03",
      "negotiationStatus": "xyz789",
      "dealStatus": "abc123",
      "projectId": "xyz789",
      "fundType": "abc123",
      "createdAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "archivedAt": "2007-12-03T10:15:30Z",
      "type": InvestmentType,
      "assetClass": AssetClass,
      "manager": Manager,
      "lawFirm": LawFirm,
      "category": Category,
      "geography": Geography,
      "group": Group,
      "subgroup": Subgroup,
      "subdivision": Subdivision,
      "sector": Sector,
      "subSector": SubSector,
      "country": Country
    }
  }
}

investmentReview

Description

Get the latest completed review for an investment, optionally by document type.

Response

Returns a Review

Arguments
Name Description
investmentId - Cuid!
documentTypeId - Cuid

Example

Query
query investmentReview(
  $investmentId: Cuid!,
  $documentTypeId: Cuid
) {
  investmentReview(
    investmentId: $investmentId,
    documentTypeId: $documentTypeId
  ) {
    id
    name
    processedAt
    completedAt
    createdAt
    updatedAt
    investment {
      ...InvestmentFragment
    }
    documentType {
      ...DocumentTypeFragment
    }
    commentary {
      ...ReviewCommentaryFragment
    }
    sections {
      ...ReviewSectionFragment
    }
    groups {
      ...ReviewGroupFragment
    }
  }
}
Variables
{
  "investmentId": "cjld2cyuq0000t3rmniod1foy",
  "documentTypeId": "cjld2cyuq0000t3rmniod1foy"
}
Response
{
  "data": {
    "investmentReview": {
      "id": "cjld2cyuq0000t3rmniod1foy",
      "name": "abc123",
      "processedAt": "2007-12-03T10:15:30Z",
      "completedAt": "2007-12-03T10:15:30Z",
      "createdAt": "2007-12-03T10:15:30Z",
      "updatedAt": "2007-12-03T10:15:30Z",
      "investment": Investment,
      "documentType": DocumentType,
      "commentary": ReviewCommentary,
      "sections": [ReviewSection],
      "groups": [ReviewGroup]
    }
  }
}

investmentTypes

Description

List all investment types.

Response

Returns [InvestmentType!]!

Example

Query
query investmentTypes {
  investmentTypes {
    id
    name
    slug
  }
}
Response
{
  "data": {
    "investmentTypes": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "abc123",
        "slug": "abc123"
      }
    ]
  }
}

investments

Description

List investments in your organization, with optional filtering and pagination.

Response

Returns an InvestmentConnection!

Arguments
Name Description
investmentTypeId - Cuid
assetClassId - Cuid
archived - Boolean
sorting - SortInput
after - String
first - Int
filters - InvestmentFilterInput

Example

Query
query investments(
  $investmentTypeId: Cuid,
  $assetClassId: Cuid,
  $archived: Boolean,
  $sorting: SortInput,
  $after: String,
  $first: Int,
  $filters: InvestmentFilterInput
) {
  investments(
    investmentTypeId: $investmentTypeId,
    assetClassId: $assetClassId,
    archived: $archived,
    sorting: $sorting,
    after: $after,
    first: $first,
    filters: $filters
  ) {
    totalCount
    edges {
      ...InvestmentEdgeFragment
    }
    pageInfo {
      ...PageInfoFragment
    }
  }
}
Variables
{
  "investmentTypeId": "cjld2cyuq0000t3rmniod1foy",
  "assetClassId": "cjld2cyuq0000t3rmniod1foy",
  "archived": false,
  "sorting": SortInput,
  "after": "xyz789",
  "first": 123,
  "filters": InvestmentFilterInput
}
Response
{
  "data": {
    "investments": {
      "totalCount": 987,
      "edges": [InvestmentEdge],
      "pageInfo": PageInfo
    }
  }
}

lawFirms

Description

List all law firms in your organization.

Response

Returns [LawFirm!]!

Example

Query
query lawFirms {
  lawFirms {
    id
    name
  }
}
Response
{
  "data": {
    "lawFirms": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "xyz789"
      }
    ]
  }
}

managers

Description

List all managers in your organization.

Response

Returns [Manager!]!

Example

Query
query managers {
  managers {
    id
    name
  }
}
Response
{
  "data": {
    "managers": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "xyz789"
      }
    ]
  }
}

portfolioAnalysisData

Description

Get portfolio analysis data as structured JSON.

Response

Returns a PortfolioAnalysisData!

Arguments
Name Description
investmentTypeId - Cuid!
assetClassId - Cuid
manager - [String!]
category - [String!]
geography - [String!]
lawFirm - [String!]
vintage - [Int!]
investmentIds - [Cuid!]

Example

Query
query portfolioAnalysisData(
  $investmentTypeId: Cuid!,
  $assetClassId: Cuid,
  $manager: [String!],
  $category: [String!],
  $geography: [String!],
  $lawFirm: [String!],
  $vintage: [Int!],
  $investmentIds: [Cuid!]
) {
  portfolioAnalysisData(
    investmentTypeId: $investmentTypeId,
    assetClassId: $assetClassId,
    manager: $manager,
    category: $category,
    geography: $geography,
    lawFirm: $lawFirm,
    vintage: $vintage,
    investmentIds: $investmentIds
  ) {
    investments {
      ...PortfolioAnalysisInvestmentFragment
    }
    rows {
      ...PortfolioAnalysisRowFragment
    }
  }
}
Variables
{
  "investmentTypeId": "cjld2cyuq0000t3rmniod1foy",
  "assetClassId": "cjld2cyuq0000t3rmniod1foy",
  "manager": ["abc123"],
  "category": ["abc123"],
  "geography": ["abc123"],
  "lawFirm": ["abc123"],
  "vintage": [123],
  "investmentIds": [
    "cjld2cyuq0000t3rmniod1foy"
  ]
}
Response
{
  "data": {
    "portfolioAnalysisData": {
      "investments": [PortfolioAnalysisInvestment],
      "rows": [PortfolioAnalysisRow]
    }
  }
}

sectors

Description

List all sectors in your organization.

Response

Returns [Sector!]!

Example

Query
query sectors {
  sectors {
    id
    name
  }
}
Response
{
  "data": {
    "sectors": [
      {
        "id": "cjld2cyuq0000t3rmniod1foy",
        "name": "xyz789"
      }
    ]
  }
}

Types

AssetClass

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789"
}

Boolean

Description

The Boolean scalar type represents true or false.

CacheControlScope

Values
Enum Value Description

PUBLIC

PRIVATE

Example
"PUBLIC"

Category

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123"
}

Country

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123"
}

Cuid

Example
"cjld2cyuq0000t3rmniod1foy"

Date

Example
"2007-12-03"

DateTime

Example
"2007-12-03T10:15:30Z"

DocumentType

Fields
Field Name Description
id - Cuid!
name - String!
slug - String
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789",
  "slug": "xyz789"
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
987.65

Geography

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789"
}

Group

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789"
}

Int

Description

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

Example
987

Investment

Description

An investment in your portfolio (fund, co-investment, etc.).

Fields
Field Name Description
id - Cuid!
name - String!
vintage - Int
externalId - String
portfolio - String
commitmentAmount - Float
commitmentCurrencyCode - String
closingDate - Date
negotiationStatus - String!
dealStatus - String
projectId - String
fundType - String
createdAt - DateTime!
updatedAt - DateTime!
archivedAt - DateTime
type - InvestmentType! The investment type (e.g. Closed End Funds, Hedge Funds).
assetClass - AssetClass The asset class this investment belongs to.
manager - Manager! The fund manager.
lawFirm - LawFirm The law firm associated with this investment.
category - Category Category classification.
geography - Geography Geography classification.
group - Group Organizational group.
subgroup - Subgroup Organizational subgroup.
subdivision - Subdivision Organizational subdivision.
sector - Sector Sector classification.
subSector - SubSector Sub-sector classification.
country - Country Country classification.
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123",
  "vintage": 123,
  "externalId": "xyz789",
  "portfolio": "abc123",
  "commitmentAmount": 987.65,
  "commitmentCurrencyCode": "xyz789",
  "closingDate": "2007-12-03",
  "negotiationStatus": "xyz789",
  "dealStatus": "xyz789",
  "projectId": "abc123",
  "fundType": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "archivedAt": "2007-12-03T10:15:30Z",
  "type": InvestmentType,
  "assetClass": AssetClass,
  "manager": Manager,
  "lawFirm": LawFirm,
  "category": Category,
  "geography": Geography,
  "group": Group,
  "subgroup": Subgroup,
  "subdivision": Subdivision,
  "sector": Sector,
  "subSector": SubSector,
  "country": Country
}

InvestmentConnection

Fields
Field Name Description
totalCount - Int
edges - [InvestmentEdge!]!
pageInfo - PageInfo!
Example
{
  "totalCount": 123,
  "edges": [InvestmentEdge],
  "pageInfo": PageInfo
}

InvestmentEdge

Fields
Field Name Description
node - Investment!
cursor - String!
Example
{
  "node": Investment,
  "cursor": "xyz789"
}

InvestmentFilterInput

Fields
Input Field Description
manager - [String!]
category - [String!]
geography - [String!]
lawFirm - [String!]
vintage - [Int!]
investmentType - [String!]
assetClass - [String!]
dealStatus - [String!]
fundType - [String!]
projectId - [String!]
sector - [String!]
subSector - [String!]
country - [String!]
search - String
Example
{
  "manager": ["abc123"],
  "category": ["xyz789"],
  "geography": ["abc123"],
  "lawFirm": ["xyz789"],
  "vintage": [987],
  "investmentType": ["abc123"],
  "assetClass": ["xyz789"],
  "dealStatus": ["xyz789"],
  "fundType": ["xyz789"],
  "projectId": ["abc123"],
  "sector": ["abc123"],
  "subSector": ["abc123"],
  "country": ["abc123"],
  "search": "abc123"
}

InvestmentType

Fields
Field Name Description
id - Cuid!
name - String!
slug - String
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789",
  "slug": "xyz789"
}

JSON

Example
{}

LawFirm

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789"
}

Manager

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789"
}

PageInfo

Fields
Field Name Description
hasPreviousPage - Boolean!
hasNextPage - Boolean!
startCursor - String
endCursor - String
Example
{
  "hasPreviousPage": true,
  "hasNextPage": true,
  "startCursor": "abc123",
  "endCursor": "xyz789"
}

PortfolioAnalysisCell

Fields
Field Name Description
investmentId - Cuid!
answer - String
structuredValue - JSON
Example
{
  "investmentId": "cjld2cyuq0000t3rmniod1foy",
  "answer": "abc123",
  "structuredValue": {}
}

PortfolioAnalysisData

Fields
Field Name Description
investments - [PortfolioAnalysisInvestment!]! The investments included in the analysis (column headers).
rows - [PortfolioAnalysisRow!]! Rows of topic/answer data.
Example
{
  "investments": [PortfolioAnalysisInvestment],
  "rows": [PortfolioAnalysisRow]
}

PortfolioAnalysisInvestment

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123"
}

PortfolioAnalysisRow

Fields
Field Name Description
documentType - String! Document type name (empty for primary doc type).
group - String! Topic group name.
topic - String! Question/topic name.
values - [PortfolioAnalysisCell!]! One cell per investment, same order as investments array.
Example
{
  "documentType": "abc123",
  "group": "xyz789",
  "topic": "abc123",
  "values": [PortfolioAnalysisCell]
}

QuestionDefinition

Description

The definition of a question (what was asked).

Fields
Field Name Description
id - Cuid!
text - String!
prompt - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "text": "xyz789",
  "prompt": "xyz789"
}

Review

Description

A completed review (answer set) for an investment. Contains the AI-generated analysis organized by sections and topics.

Fields
Field Name Description
id - Cuid!
name - String
processedAt - DateTime
completedAt - DateTime
createdAt - DateTime!
updatedAt - DateTime!
investment - Investment The investment this review belongs to.
documentType - DocumentType! The document type that was reviewed.
commentary - ReviewCommentary Commentary and reasoning for the overall review.
sections - [ReviewSection!]! Sections organizing the review questions.
groups - [ReviewGroup!]! Topic groups organizing the review questions.
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789",
  "processedAt": "2007-12-03T10:15:30Z",
  "completedAt": "2007-12-03T10:15:30Z",
  "createdAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "investment": Investment,
  "documentType": DocumentType,
  "commentary": ReviewCommentary,
  "sections": [ReviewSection],
  "groups": [ReviewGroup]
}

ReviewCommentary

Fields
Field Name Description
commentary - String!
reason - String!
Example
{
  "commentary": "abc123",
  "reason": "abc123"
}

ReviewGroup

Description

A topic group within a review, with an optional AI-generated summary.

Fields
Field Name Description
id - Cuid!
name - String!
order - Int!
questions - [ReviewQuestion!]!
topicSummary - TopicSummary AI-generated topic summary, if available.
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789",
  "order": 123,
  "questions": [ReviewQuestion],
  "topicSummary": TopicSummary
}

ReviewQuestion

Description

An individual question and its answer within a review.

Fields
Field Name Description
id - Cuid!
order - Int!
answer - String!
reason - String!
extract - String!
section - String!
sectionReferences - [String!]!
terms - String!
completedAt - DateTime
importance - String!
resolution - String!
meetsStandard - Boolean
resolutionComment - String
createdAt - DateTime!
updatedAt - DateTime!
question - QuestionDefinition! The question that was asked.
structuredValue - JSON Typed structured value from the consensus answer (JSON).
answerSchema - JSON Answer schema defining the expected type.
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "order": 123,
  "answer": "xyz789",
  "reason": "abc123",
  "extract": "xyz789",
  "section": "xyz789",
  "sectionReferences": ["xyz789"],
  "terms": "abc123",
  "completedAt": "2007-12-03T10:15:30Z",
  "importance": "abc123",
  "resolution": "xyz789",
  "meetsStandard": false,
  "resolutionComment": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z",
  "updatedAt": "2007-12-03T10:15:30Z",
  "question": QuestionDefinition,
  "structuredValue": {},
  "answerSchema": {}
}

ReviewSection

Description

A section within a review, containing related questions.

Fields
Field Name Description
id - Cuid!
name - String!
order - Int!
questions - [ReviewQuestion!]!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123",
  "order": 987,
  "questions": [ReviewQuestion]
}

Sector

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123"
}

SortInput

Fields
Input Field Description
id - String!
desc - Boolean!
Example
{"id": "xyz789", "desc": true}

String

Description

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Example
"abc123"

SubSector

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123"
}

Subdivision

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "abc123"
}

Subgroup

Fields
Field Name Description
id - Cuid!
name - String!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "name": "xyz789"
}

TopicSummary

Fields
Field Name Description
id - Cuid!
response - String!
reason - String!
createdAt - DateTime!
Example
{
  "id": "cjld2cyuq0000t3rmniod1foy",
  "response": "abc123",
  "reason": "xyz789",
  "createdAt": "2007-12-03T10:15:30Z"
}