# CsCase

object type

A CsCase — ONE customer-support interaction (org-group-parented document; guest- OR Consumer-capable): the FSM head of a visibility-split CaseMessage thread. caseType ∈ {return_request, refund_inquiry, product_issue, complaint, general_inquiry, warranty_claim, shipping_issue, order_change, other} (canned + AT-extensible — the ContactRole registry class, never merchant free-form; MUTABLE via update, triage correction is routine CS — ruling). NO description field (ruling — the opening MESSAGE carries the narrative: one spine, zero duplicate state). origin is SERVER-STAMPED by lane (ruling — storefront = the consumer portal · staff = every staff create; IMMUTABLE, param-less). Refs are ref-ONLY (SPEC_CATALOG @375 — 'refs, not gate': validated in-tenant + non-doomed at write, but NO doom arms grow on the referenced constructs and consumer ERASE does NOT cascade here — cases are the MERCHANT's business records \[ruling]; PII scrub =). consumerId/linkedFromCaseId/origin are IMMUTABLE at birth (rulings // — the edit face omits them; the CASEBOOK derived-index row a consumer-ref'd case mints in its create txn is thereby write-once). FSM: open(i) → in_progress ⇄ pending_customer (a consumer reply AUTO-RESUMES — the addMyCaseMessage engine fires caller_op:resume in the SAME commit) · in_progress ⇄ escalated · in_progress → resolved → closed (terminal ▣ immutable — REOPEN AFTER CLOSE = a NEW case linked via linkedFromCaseId, CLOSED-only \[ruling]) · open|in_progress → cancelled (terminal ✦ doomed — spam/duplicate/withdrawn; drops from listings). resolved→closed also carries the DORMANT system:auto_close twin (its producer = the SLA machinery / policy build — parity-with-spec over trigger-pruning, ruling). resolve REQUIRES the typed resolution block PRESENT (the KIT gate — ruling, STRICT; deliberately NOT FSM data). priority/assignedTo/slaDueAt are MANUAL (the routing/SLA build populates them). The cs event domain's FIRST live producer (at.cs.case.\* — ruling). NOT searchable (the book law covers WHO, not interactions).

## Fields

| Field | Type | Notes |
| --- | --- | --- |
| `id` | [ID](/types/#scalars) `ID!` | The record’s id — a UUID the platform assigned when the record was created; every reference to this record uses it. |
| `sysId` | [String](/types/#scalars) `String!` | The group-scoped human-facing system id (CS-…). |
| `type` | [String](/types/#scalars) `String!` | The kind of record — always `CsCase` here. |
| `caption` | [String](/types/#scalars) `String!` | The record’s display name — what people see it called. |
| `status` | [String](/types/#scalars) `String!` | The FSM state: open \| in_progress \| pending_customer \| escalated \| resolved \| closed \| cancelled. |
| `parentId` | [ID](/types/#scalars) `ID!` | The parent org group; for a CsCase parentId === rootId. |
| `rootId` | [ID](/types/#scalars) `ID!` | The org-group family root. |
| `createdAt` | [String](/types/#scalars) `String!` | When the record was created, as a UTC timestamp. |
| `updatedAt` | [String](/types/#scalars) `String!` | When the record last changed, as a UTC timestamp. |
| `revisionNum` | [Int](/types/#scalars) `Int!` | How many times this record has been edited; the first save is 0. |
| `revision` | [ID](/types/#scalars) `ID!` | The OCC revision token — supply it on every mutation of this record; rotates on every write. |
| `refCaptions` | [RefCaption](/types/RefCaption/) `[RefCaption!]!` | The server-composed captions of this record's declared references (the referenced-caption rule) — one row per referenced id; see RefCaption. |
| `caseType` | [String](/types/#scalars) `String!` | return_request \| refund_inquiry \| product_issue \| complaint \| general_inquiry \| warranty_claim \| shipping_issue \| order_change \| other — the canned registry (AT-extensible, never merchant free-form). MUTABLE via update (ruling — triage correction). |
| `priority` | [String](/types/#scalars) `String!` | low \| normal \| high \| urgent — kit-stamped 'normal' when the caller names none; manual. |
| `origin` | [String](/types/#scalars) `String!` | storefront \| staff — WHERE the case originated, SERVER-STAMPED by lane (ruling; param-less). IMMUTABLE. |
| `consumerId` | [ID](/types/#scalars) | The registered Consumer this case is FOR (absent = a guest case). ⚠ IMMUTABLE at birth (ruling — the CASEBOOK index row is write-once; guest→consumer linking = deferral 9). Ref-only: consumer erase does NOT cascade here (ruling). |
| `organizationId` | [ID](/types/#scalars) | The acted-upon Organization — ref-only, in-tenant + non-doomed at set. |
| `orderId` | [ID](/types/#scalars) | The disputed/acted-upon Order — ref-only (@375: no doom arm grows on it). |
| `appointmentId` | [ID](/types/#scalars) | The related Appointment — ref-only (the deferral 11, RESOLVED at the landing). |
| `returnId` | [ID](/types/#scalars) | The related Return — ref-only. |
| `fulfillmentId` | [ID](/types/#scalars) | The related Fulfillment — ref-only. |
| `paymentId` | [ID](/types/#scalars) | The related Payment — ref-only. |
| `warrantyId` | [ID](/types/#scalars) | The Warranty a claim was filed against — stamped by fileClaimWarranty in the same transaction as the warranty’s claimed flip; never caller-typed. Ref-only. |
| `linkedFromCaseId` | [ID](/types/#scalars) | The CLOSED case this one REOPENS (ruling — validated closed-EXACTLY at create; cancelled is NOT reopenable-by-link). IMMUTABLE at birth; the reopen provenance edge. |
| `assignedTo` | [ID](/types/#scalars) | The assigned agent — an User (in-tenant + ACTIVE at set); teams/queues = (deferral 1). |
| `slaDueAt` | [String](/types/#scalars) | The SLA due instant (ISO-8601) — MANUAL; / populates by policy (deferral 1; the dormant system:auto_close consumes it then). |
| `resolution` | [CaseResolution](/types/CaseResolution/) | The typed resolution block (ruling) — set via update BEFORE resolve fires. Per-kind ref law: info_only ref-LESS; every other kind names its resolving construct. |
| `supportBilling` | [CaseSupportBilling](/types/CaseSupportBilling/) | STAFF lanes only: the consumer lanes (myCase/myCases) REDACT it structurally (the ruling- visibility law at the field axis — platform billing is the MERCHANT’s business). |

## Used by

- [createCsCase](/reference/cs-case/createCsCase/)
- [csCase](/reference/cs-case/csCase/)
- [transitionCsCase](/reference/cs-case/transitionCsCase/)
- [updateCsCase](/reference/cs-case/updateCsCase/)
