x-cpod-domain: customer
Customer
CRM — accounts, contacts, deals, activities, quotes, line items.
Try in explorer
client.customerAccount
A customer organization.
REST path
/api/v1/crm/accountsOperations
listgetcreateupdatedeleteSDK
// list — returns only your records; add filters/search:
await client.customer.accounts.list()
// create:
await client.customer.accounts.create({
id: "rec_01HXEXAMPLE",
tenant_id: "example tenant_id",
created_at: "2026-01-01T00:00:00Z",
updated_at: "2026-01-01T00:00:00Z",
app_id: "example app_id",
created_by: "rec_01HXEXAMPLE",
})| Field | Type | Description |
|---|---|---|
| id* | uuid | Server-assigned ULID with type prefix (e.g. per_…). |
| tenant_id* | string | Tenant scope — auto-stamped from the caller's JWT. |
| app_id | string | App scope. Stamped ONLY when the caller's JWT was minted for a specific Application (integration API keys). Absent for human-user sessions. Filters reads when present. |
| created_at* | date-time | Server stamp. |
| updated_at* | date-time | Server stamp; updated on every patch. |
| created_by | uuid | Person id from the caller's JWT (sub). |
| updated_by | uuid | Person id from the last writer's JWT (sub). |
| source | string | Provenance tag — defaults to 'edm'. |
| source_type | enum | Where the write originated. Defaults to 'api'.frontendbackendserversystemapi |
| is_deleted | boolean | Soft-delete flag. Excluded from default list queries. |
| deleted_at | date-time | Stamped when soft-deleted; null otherwise. |
| deleted_by | uuid | Person id who soft-deleted; null otherwise. |
| schema_version | number | Document schema version. Bumped on incompatible writes. |
| owner_id | string | Account owner / account executive. Format: usr-<uuid>. |
| name | string | Company or customer display name. |
| legal_name | string | Full registered legal name of the company. |
| industry | string | NAICS code or free-text industry classification. |
| sub_industry | string | Secondary industry classification within the primary industry. |
| website | string | Primary public website URL. |
| domain | string | Email domain used for auto-associating contacts to this account. |
| phone | string | Main company phone number. |
| addresses | json | Physical addresses associated with the account (billing, shipping, office). |
| annual_revenue | number | Estimated annual revenue in USD. |
| employee_count | number | Approximate number of employees. |
| lifecycle_stage | string | Current stage of the customer relationship lifecycle. |
| lead_source | string | How this account was first acquired (e.g. inbound, event, referral, outbound, rfp). |
| health_score | string | Customer health indicator set by customer success. |
| parent_account_id | string | ID of the holding/parent account for subsidiary hierarchy. Format: acc-<uuid>. |
| description | string | Free-text notes about this account. |
| last_activity_at | date-time | Timestamp of the most recent logged activity against this account. |
| first_contacted_at | date-time | Timestamp when this account was first contacted. |
| custom_fields | json | Per-tenant schema extension for additional fields. |
| tags | json | Free-form string tags for filtering and grouping. |
| version | number | Optimistic-concurrency version counter. |
Contact
A person at a customer account.
REST path
/api/v1/crm/contactsOperations
listgetcreateupdatedeleteSDK
// list — returns only your records; add filters/search:
await client.customer.contacts.list()
// create:
await client.customer.contacts.create({
id: "rec_01HXEXAMPLE",
tenant_id: "example tenant_id",
created_at: "2026-01-01T00:00:00Z",
updated_at: "2026-01-01T00:00:00Z",
app_id: "example app_id",
created_by: "rec_01HXEXAMPLE",
})| Field | Type | Description |
|---|---|---|
| id* | uuid | Server-assigned ULID with type prefix (e.g. per_…). |
| tenant_id* | string | Tenant scope — auto-stamped from the caller's JWT. |
| app_id | string | App scope. Stamped ONLY when the caller's JWT was minted for a specific Application (integration API keys). Absent for human-user sessions. Filters reads when present. |
| created_at* | date-time | Server stamp. |
| updated_at* | date-time | Server stamp; updated on every patch. |
| created_by | uuid | Person id from the caller's JWT (sub). |
| updated_by | uuid | Person id from the last writer's JWT (sub). |
| source | string | Provenance tag — defaults to 'edm'. |
| source_type | enum | Where the write originated. Defaults to 'api'.frontendbackendserversystemapi |
| is_deleted | boolean | Soft-delete flag. Excluded from default list queries. |
| deleted_at | date-time | Stamped when soft-deleted; null otherwise. |
| deleted_by | uuid | Person id who soft-deleted; null otherwise. |
| schema_version | number | Document schema version. Bumped on incompatible writes. |
| account_id | string | Account this contact belongs to. Null for unattached/orphan contacts. Format: acc-<uuid>. |
| first_name | string | Given name. |
| last_name | string | Family name. |
| display_name | string | Display name. Computed from firstName + lastName if blank. |
| Work email address. Unique within (tenantId, accountId). | ||
| phone | string | Phone number in E.164 format. |
| job_title | string | Job title at their company. |
| seniority | string | Seniority level at the contact's company. |
| decision_role | string | Role this contact plays in deal decisions. |
| is_primary | boolean | True if this is the primary contact at the account. |
| linkedin_url | string | LinkedIn profile URL. |
| reports_to_contact_id | string | Contact ID of this person's manager within the account. |
| last_interaction_at | date-time | Timestamp of the most recent interaction with this contact. |
| opted_in | boolean | Whether this contact has opted in to marketing communications (GDPR/CASL). |
| opted_in_at | date-time | Timestamp when the opt-in was recorded. |
| gdpr_consent | json | GDPR/CASL consent record. |
| custom_fields | json | Per-tenant schema extension for additional fields. |
| tags | json | Free-form string tags. |
| version | number | Optimistic-concurrency version counter. |
Deal
A sales opportunity against an Account.
REST path
/api/v1/crm/dealsOperations
listgetcreateupdatedeleteSDK
// list — returns only your records; add filters/search:
await client.customer.deals.list()
// create:
await client.customer.deals.create({
id: "rec_01HXEXAMPLE",
tenant_id: "example tenant_id",
created_at: "2026-01-01T00:00:00Z",
updated_at: "2026-01-01T00:00:00Z",
app_id: "example app_id",
created_by: "rec_01HXEXAMPLE",
})| Field | Type | Description |
|---|---|---|
| id* | uuid | Server-assigned ULID with type prefix (e.g. per_…). |
| tenant_id* | string | Tenant scope — auto-stamped from the caller's JWT. |
| app_id | string | App scope. Stamped ONLY when the caller's JWT was minted for a specific Application (integration API keys). Absent for human-user sessions. Filters reads when present. |
| created_at* | date-time | Server stamp. |
| updated_at* | date-time | Server stamp; updated on every patch. |
| created_by | uuid | Person id from the caller's JWT (sub). |
| updated_by | uuid | Person id from the last writer's JWT (sub). |
| source | string | Provenance tag — defaults to 'edm'. |
| source_type | enum | Where the write originated. Defaults to 'api'.frontendbackendserversystemapi |
| is_deleted | boolean | Soft-delete flag. Excluded from default list queries. |
| deleted_at | date-time | Stamped when soft-deleted; null otherwise. |
| deleted_by | uuid | Person id who soft-deleted; null otherwise. |
| schema_version | number | Document schema version. Bumped on incompatible writes. |
| account_id | string | Account this deal belongs to. Format: acc-<uuid>. |
| owner_id | string | Deal owner (AE). Format: usr-<uuid>. |
| name | string | Human-readable deal name. |
| deal_number | string | Human-readable deal number, unique per tenant (e.g. DEAL-2026-00417). |
| pipeline_id | string | Pipeline this deal belongs to, for tenants with multiple pipelines. |
| stage | string | Current stage of the deal in the pipeline. |
| value | number | Deal amount. |
| currency | string | ISO 4217 currency code. |
| probability | number | Win probability percentage (0–100). |
| forecast_category | string | Forecast category for revenue planning. |
| expected_close_date | date-time | Expected close date (ISO 8601 date). |
| actual_close_date | date-time | Actual close date, set on closed_won or closed_lost. |
| next_followup_date | date-time | Date of the next scheduled follow-up. |
| deal_type | string | Classification of the deal's business motion. |
| deal_source | string | How this deal was sourced (e.g. inbound, rfp, referral, outbound). |
| competitors | json | Names of competing vendors in this deal. |
| loss_reason | string | Free-text explanation of why the deal was lost. Required when stage=closed_lost. |
| loss_category | string | Categorical reason for loss. Required when stage=closed_lost. |
| closure_notes | string | Notes recorded at deal closure. |
| primary_contact_id | string | Primary contact at the account for this deal. Format: con-<uuid>. |
| contact_ids | json | All contact stakeholders involved in this deal. Format: con-<uuid>. |
| rfp_record_id | string | RFP record ID if this deal was sourced from an RFP. Format: rfp-<uuid>. |
| quote_ids | json | Linked quote or line-item IDs. |
| proposal_ids | json | Linked proposal document IDs. |
| attachment_refs | json | MinIO object keys for attached files (e.g. MSA, NDAs). |
| linked_task_ids | json | Follow-up task IDs. Format: tsk-<uuid>. |
| audit_log | json | Inline stage-transition history. One entry per stage change. |
| custom_fields | json | Per-tenant schema extension (e.g. risk_score, executive_summary, rfp_status, bid_decision). |
| tags | json | Free-form string tags. |
| version | number | Optimistic-concurrency version counter. |
Activity
A logged interaction (call, meeting, email).
REST path
/api/v1/crm/activitiesOperations
listgetcreateSDK
// list — returns only your records; add filters/search:
await client.customer.activities.list()
// create:
await client.customer.activities.create({
id: "rec_01HXEXAMPLE",
tenant_id: "example tenant_id",
created_at: "2026-01-01T00:00:00Z",
updated_at: "2026-01-01T00:00:00Z",
app_id: "example app_id",
created_by: "rec_01HXEXAMPLE",
})| Field | Type | Description |
|---|---|---|
| id* | uuid | Server-assigned ULID with type prefix (e.g. per_…). |
| tenant_id* | string | Tenant scope — auto-stamped from the caller's JWT. |
| app_id | string | App scope. Stamped ONLY when the caller's JWT was minted for a specific Application (integration API keys). Absent for human-user sessions. Filters reads when present. |
| created_at* | date-time | Server stamp. |
| updated_at* | date-time | Server stamp; updated on every patch. |
| created_by | uuid | Person id from the caller's JWT (sub). |
| updated_by | uuid | Person id from the last writer's JWT (sub). |
| source | string | Provenance tag — defaults to 'edm'. |
| source_type | enum | Where the write originated. Defaults to 'api'.frontendbackendserversystemapi |
| is_deleted | boolean | Soft-delete flag. Excluded from default list queries. |
| deleted_at | date-time | Stamped when soft-deleted; null otherwise. |
| deleted_by | uuid | Person id who soft-deleted; null otherwise. |
| schema_version | number | Document schema version. Bumped on incompatible writes. |
| account_id | string | Account this activity is logged against. At least one of accountId, dealId, contactId must be set. |
| deal_id | string | Deal this activity is logged against. |
| contact_id | string | Primary contact involved in this activity. |
| contact_ids | json | All contacts present in this activity. |
| activity_type | string | Type of touchpoint. |
| subject | string | Short subject or title of the activity. |
| description | string | Detailed notes. Markdown allowed. |
| activity_date | date-time | When the activity happened. |
| due_date | date-time | Due date for task-type activities. |
| completed_at | date-time | Timestamp when the activity was completed. |
| status | string | Lifecycle status of this activity. |
| priority | string | Priority of this activity. |
| direction | string | Communication direction, applicable for calls and emails. |
| outcome | string | Outcome of the activity. |
| actor_type | string | Who or what performed this activity. |
| performed_by_user_id | string | User ID of the person or service account that performed this activity. |
| participants | json | All participants in this activity (users and contacts). |
| linked_trace_id | string | Trace ID if this activity was AI-authored; references the Telemetry Trace entity. |
| attachment_refs | json | MinIO object keys for attached files. |
| recurrence | json | Recurrence schedule for repeating activities. |
| reminder_sent | boolean | Whether a reminder notification has been sent for this activity. |
| custom_fields | json | Per-tenant schema extension (e.g. gongCallId, duration_minutes). |
| tags | json | Free-form string tags. |
| version | number | Optimistic-concurrency version counter. |
| type | enum | Short activity type classification.callemailmeetingnotetask |
| owner_id | uuid | User who owns this activity. Format: usr-<uuid>. |
| notes | string | Free-text notes on the activity. |
| occurred_at | date-time | When the activity occurred. |
Quote
A pricing proposal / quote against an account (and optionally a deal).
REST path
/api/v1/crm/quotesOperations
listgetcreateupdatedeleteSDK
// list — returns only your records; add filters/search:
await client.customer.quotes.list()
// create:
await client.customer.quotes.create({
id: "rec_01HXEXAMPLE",
tenant_id: "example tenant_id",
created_at: "2026-01-01T00:00:00Z",
updated_at: "2026-01-01T00:00:00Z",
app_id: "example app_id",
created_by: "rec_01HXEXAMPLE",
})| Field | Type | Description |
|---|---|---|
| id* | uuid | Server-assigned ULID with type prefix (e.g. per_…). |
| tenant_id* | string | Tenant scope — auto-stamped from the caller's JWT. |
| app_id | string | App scope. Stamped ONLY when the caller's JWT was minted for a specific Application (integration API keys). Absent for human-user sessions. Filters reads when present. |
| created_at* | date-time | Server stamp. |
| updated_at* | date-time | Server stamp; updated on every patch. |
| created_by | uuid | Person id from the caller's JWT (sub). |
| updated_by | uuid | Person id from the last writer's JWT (sub). |
| source | string | Provenance tag — defaults to 'edm'. |
| source_type | enum | Where the write originated. Defaults to 'api'.frontendbackendserversystemapi |
| is_deleted | boolean | Soft-delete flag. Excluded from default list queries. |
| deleted_at | date-time | Stamped when soft-deleted; null otherwise. |
| deleted_by | uuid | Person id who soft-deleted; null otherwise. |
| schema_version | number | Document schema version. Bumped on incompatible writes. |
| owner_id | string | Quote owner / salesperson. Format: usr-<uuid>. |
| name | string | Human-readable quote name. |
| quote_number | string | Human-readable quote number, unique per tenant (e.g. Q-2026-00892). |
| account_id | string | Account this quote is for. Format: acc-<uuid>. |
| deal_id | string | Deal this quote belongs to, if any. Format: deal-<uuid>. |
| value | number | Total quote value after discounts. |
| currency | string | ISO 4217 currency code. |
| status | string | Lifecycle status: draft, sent, accepted, rejected, expired. |
| date_issued | date-time | When the quote was issued. |
| validity_date | date-time | Date after which the quote expires. |
| contract_duration | string | Contract term the quote covers (e.g. '12 months'). |
| is_primary | boolean | True if this is the primary quote on the deal. |
| notes | string | Free-text notes or special terms. |
| line_items | json | Embedded line-item summaries. Full records via /api/v1/crm/line-items. |
| custom_fields | json | Per-tenant schema extension. |
| tags | json | Free-form string tags. |
| version | number | Optimistic-concurrency version counter. |
| total | number | Total quote amount. |
| valid_until | date-time | Date after which the quote is no longer valid. |
LineItem
A first-class line item belonging to a Quote.
REST path
/api/v1/crm/line-itemsOperations
listgetcreateupdatedeleteSDK
// list — returns only your records; add filters/search:
await client.customer.lineItems.list()
// create:
await client.customer.lineItems.create({
id: "rec_01HXEXAMPLE",
tenant_id: "example tenant_id",
created_at: "2026-01-01T00:00:00Z",
updated_at: "2026-01-01T00:00:00Z",
app_id: "example app_id",
created_by: "rec_01HXEXAMPLE",
})| Field | Type | Description |
|---|---|---|
| id* | uuid | Server-assigned ULID with type prefix (e.g. per_…). |
| tenant_id* | string | Tenant scope — auto-stamped from the caller's JWT. |
| app_id | string | App scope. Stamped ONLY when the caller's JWT was minted for a specific Application (integration API keys). Absent for human-user sessions. Filters reads when present. |
| created_at* | date-time | Server stamp. |
| updated_at* | date-time | Server stamp; updated on every patch. |
| created_by | uuid | Person id from the caller's JWT (sub). |
| updated_by | uuid | Person id from the last writer's JWT (sub). |
| source | string | Provenance tag — defaults to 'edm'. |
| source_type | enum | Where the write originated. Defaults to 'api'.frontendbackendserversystemapi |
| is_deleted | boolean | Soft-delete flag. Excluded from default list queries. |
| deleted_at | date-time | Stamped when soft-deleted; null otherwise. |
| deleted_by | uuid | Person id who soft-deleted; null otherwise. |
| schema_version | number | Document schema version. Bumped on incompatible writes. |
| quote_id | string | Quote this line item belongs to. Format: qte-<uuid>. |
| description | string | Line item description. |
| quantity | number | Quantity. |
| unit_price | number | Price per unit. |
| discount | number | Per-line discount amount or percentage. |
| total | number | Line total after discount. |
| version | number | Optimistic-concurrency version counter. |
| currency | string | ISO 4217 currency code. |