Deal
/api/v1/crm/dealsA sales opportunity against an Account.
listgetcreateupdatedeleteSchema
| Field | Type | Notes |
|---|---|---|
| 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 | frontend | backend | server | system | apiWhere the write originated. Defaults to 'api'. |
| 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. |
API
client.customer.deals.*Loading manifest…