AlmondTill/G3N API

On this page

createConsumer

mutation · in the family Consumer

What it does

Create a new consumer profile — the shopper identity used by portals at your organization.

Create a Consumer in the caller's org group; requires the unrestricted capability. ⚠ NO password argument — a staff-created Consumer has no self-service until resetConsumerPassword arms it (the separation; self-registration is consumerRegister).

Who may call it

Capability area: Selling — Ringing sales, serving customers and issuing invoices.

Arguments

NameTypeRequiredNotes
inputNewConsumerInput NewConsumerInput!yesNo further notes.

Returns

Consumer Consumer! — A Consumer — the B2C SHOPPER identity: WHO shops, as a per-merchant-group person (parentId === rootId — NOT a global identity; federated cross-merchant identity is the lock's flagged-not-now). B2C-SIMPLE INLINE: the NORMALIZED login email + displayName + bounded phones + the inline address book (≤16; shipping/billing roles + at most ONE default per side). the identity-marker rule: the (group × normalized email) UNIQ marker AMONG LIVE HOLDERS IS the login index — a live/suspended holder refuses CONFLICT/IDENTITY_TAKEN; ⚠ on erase (doom) the identifiers BURN within the group. FSM = the identity-family roster: active ⇄ suspended (the merchant abuse/fraud hold: punitive, ≠ the operational admin-pause; sessions go INERT via the live-status gate, reactivation restores) → doomed via erase (the DE-IDENTIFICATION terminal — PII scrub machinery lands; v1 the marker burns). Credentials NEVER ride this record; self-service rides the CONSUMER SESSION channel (consumerRegister/consumerLogin + the CONSUMER_SESSION_OPERATIONS roster); staff manage via THIS face. SEARCHABLE (the customer-book law). priceGroupId = the binding — the SUPERSEDE carrier: a consumer-named order resolves eligibility HERE, present-or-absent, NO member fall-through.

Example request

mutation ExampleCreateConsumer($input: NewConsumerInput!) {
  createConsumer(input: $input) {
    id
    sysId
    type
    caption
    status
    parentId
    rootId
    createdAt
    updatedAt
    revisionNum
    revision
    email
    displayName
    phones
    priceGroupId
    tagIds
    locale
    displayCurrency
    dateOfBirth
    commsFrequency
    commsFormat
    commsTopics
    interests
    preferredLogicalFacilityId
  }
}

Variables:

{
  "input": {
    "caption": "Blue jeans",
    "email": "<the person’s email address>"
  }
}

Send it with the envelope naming the version: "extensions": {"at": {"version": {"name":"genesis","number":0}}}.

Example response

{
  "data": {
    "createConsumer": {
      "id": "01900000-0000-7000-8000-37386ae00000",
      "sysId": "CN-EXMP-0000-000F",
      "type": "Consumer",
      "caption": "Blue jeans",
      "status": "active",
      "parentId": "01900000-0000-7000-8000-065235280000",
      "rootId": "01900000-0000-7000-8000-a093dd800000",
      "createdAt": "2027-01-31T00:00:00.000Z",
      "updatedAt": "2027-01-31T00:00:00.000Z",
      "revisionNum": 1,
      "revision": "01900000-0000-7000-8000-b7960e180000",
      "email": "<the person’s email address>",
      "displayName": "Blue jeans",
      "phones": [
        "<phones>"
      ],
      "priceGroupId": "01900000-0000-7000-8000-c7ffbf680000",
      "tagIds": [
        "01900000-0000-7000-8000-decd62770000"
      ],
      "locale": "en-CA",
      "displayCurrency": "<display currency>",
      "dateOfBirth": "<date of birth>",
      "commsFrequency": "<comms frequency>",
      "commsFormat": "<comms format>",
      "commsTopics": [
        "<comms topics>"
      ],
      "interests": [
        "<interests>"
      ],
      "preferredLogicalFacilityId": "01900000-0000-7000-8000-23734f810000"
    }
  },
  "extensions": {
    "at": {
      "callId": "01EXAMPLE-CALL-ID",
      "version": {
        "requested": {
          "name": "genesis",
          "number": 0
        },
        "serviced": {
          "name": "genesis",
          "number": 0
        }
      }
    }
  }
}

Errors this call can answer

Dry run

Add dryRun: true to the request envelope (extensions.at) to rehearse this call: every check runs, the write is rehearsed against the current records and nothing is stored; the answer is the refusal a real call would give, or the record it would create. Every response to a rehearsal carries dryRun: true, so a rehearsed record is never mistaken for a saved one.

Used in