AlmondTill/G3N API

Dispute

object type

A Dispute — the Stripe chargeback lifecycle mirrored (SPEC_CATALOG 147; the / fraud-signal seed). NEVER wire-created: WEBHOOK-BORN from charge.dispute.created — the ingress resolves the parent Payment through the PI-metadata law, mints record-first (needs_response, deduped by a UNIQ reservation on disputeRef), appends Order.disputeIds (32 bound), and emits the payment_dispute_opened operational line (money-loss events are operator-mandatory). The processor holds the disputed funds while evidenceDueBy runs; won/lost land via charge.dispute.closed (an UNANSWERED dispute closing lost rides the two-edge cascade needs_response→under_review→lost — the must-pass-under_review law); on lost the funds+fee reverse REPORTS-ONLY. The TWO caller lanes carry authority:manage_dispute: submitEvidenceDispute (the evidence bespoke) and acceptDispute (concede via the processor close).

Fields

FieldTypeNotes
idID ID!The record’s id — a UUID the platform assigned when the record was created; every reference to this record uses it.
sysIdString String!The group-scoped human-facing system id (DP-…).
typeString String!The kind of record — always Dispute here.
captionString String!The record’s display name — what people see it called.
statusString String!The FSM state: needs_response | under_review | won | lost | accepted.
parentIdID ID!The Payment whose charge is disputed; the record also names the Order anchoring the money story (orderId); rootId = the org group; parentId!== rootId always.
rootIdID ID!The org-group family root.
createdAtString String!When the record was created, as a UTC timestamp.
updatedAtString String!When the record last changed, as a UTC timestamp.
revisionNumInt Int!How many times this record has been edited; the first save is 0.
revisionID ID!The OCC revision token — supply it on every mutation of this record; rotates on every write.
refCaptionsRefCaption [RefCaption!]!The server-composed captions of this record's declared references (the referenced-caption rule) — one row per referenced id; see RefCaption.
organizationIdID ID!The selling Organization (copied from the parent Payment at mint — attribution).
orderIdID ID!The Order anchoring the money story (the parent Payment’s own parent — the Order.disputeIds bounded-append twin).
disputeRefID ID!The processor dispute ref (dp_…) — REQUIRED ALWAYS (webhook-born records carry their processor identity from birth; the UNIQ mint-dedup key).
amountMinorInt Int!The disputed amount in minor units (the processor’s figure VERBATIM — may differ from the payment on partial disputes).
currencyString String!The dispute currency — the processor’s figure VERBATIM.
reasonString String!The processor dispute reason code VERBATIM (e.g. fraudulent, product_not_received — the fraud-signal seed).
evidenceDueByStringThe processor’s evidence deadline (UTC ISO-8601) — operator-facing urgency; the PROCESSOR enforces it (never scheduled against, SCH-1 class).
stripeAccountRefStringThe Connect account context THREADED from the parent Payment’s stamp. Null = the platform account.
evidenceTextStringThe evidence text submitted through the caller lane (stamped WITH the respond flip — the presence law; null on dashboard-side submissions and the accept path).

Used by