# ExemptionCertificate

object type

A tax-exemption certificate — a captured legal document: a valid in-scope cert ZEROES tax at sale for its covered jurisdictions/categories (the calc consumes it; at-USE validity = status active ∧ not past expiresAt ∧ scope match — CONFLICT/EXPIRED per SPEC_ERRORS). Parent = the org group, FIXED AT BIRTH (the / customer host is a later REF, never a reparent). Capture is INLINE. The capture is IMMUTABLE except caption/code/docRef — correct anything else by revoking and re-capturing. active → expired is SCHEDULED; revoke and doom are the caller ops.

## 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 (XC-…). |
| `type` | [String](/types/#scalars) `String!` | The kind of record — always `ExemptionCertificate` here. |
| `caption` | [String](/types/#scalars) `String!` | The record’s display name — what people see it called. |
| `status` | [String](/types/#scalars) `String!` | The FSM state: active \| expired \| revoked \| doomed. |
| `parentId` | [ID](/types/#scalars) `ID!` | The parent org group; for an ExemptionCertificate 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. |
| `certType` | [ExemptionCertType](/types/ExemptionCertType/) `ExemptionCertType!` | The certificate kind. IMMUTABLE at capture. |
| `certificateNumber` | [String](/types/#scalars) `String!` | The issuer's certificate number. IMMUTABLE at capture. |
| `holderName` | [String](/types/#scalars) `String!` | The holder as captured INLINE. IMMUTABLE at capture. |
| `jurisdictionIds` | [ID](/types/#scalars) `[ID!]!` | The covered jurisdictions — SHARED-canonical refs, each exists+ACTIVE at capture. IMMUTABLE. |
| `categoryIds` | [TaxCategory](/types/TaxCategory/) `[TaxCategory!]` | The covered categories — ABSENT = all categories (the blanket-cert shape). IMMUTABLE. |
| `expiresAt` | [String](/types/#scalars) | Optional expiry (UTC ISO-8601) — ABSENT = non-expiring. The scheduler arms active→expired on it; the at-USE check is the calc's. IMMUTABLE. |
| `docRef` | [String](/types/#scalars) | Optional document reference (a blob pointer/URI — upload machinery is NOT this slice). Editable (the paper gets scanned later). |
| `orgCustomerId` | [ID](/types/#scalars) | The holder linkage: the OrgCustomer this cert belongs to. Set-time gated (in-tenant, NON-doomed); EDITABLE — re-linkable (the ONE exception to capture immutability; the capture-doc parent stays the GROUP). A NON-doomed cert blocks its holder's doom. |
| `code` | [String](/types/#scalars) | Optional mutable merchant reference code; uniqueness NOT enforced. |

## Used by

- [createExemptionCertificate](/reference/exemption-certificate/createExemptionCertificate/)
- [doomExemptionCertificate](/reference/exemption-certificate/doomExemptionCertificate/)
- [exemptionCertificate](/reference/exemption-certificate/exemptionCertificate/)
- [revokeExemptionCertificate](/reference/exemption-certificate/revokeExemptionCertificate/)
- [updateExemptionCertificate](/reference/exemption-certificate/updateExemptionCertificate/)
