# NewLoyaltyMemberInput

input type

ENROLL-input for a LoyaltyMember. The tenant is derived SERVER-SIDE; the program gates in-tenant + ACTIVE; the email normalizes (trim+lowercase) and its (program × email) marker mints IN the transaction (a LIVE holder refuses CONFLICT/MEMBER_EXISTS; a DOOMED holder is taken over — re-enrollable); pointsBalance births 0; an initial tier must name a program tier.

## Fields

| Field | Type | Required | Notes |
| --- | --- | --- | --- |
| `caption` | [String](/types/#scalars) | no | Optional: when omitted the per-type default applies — the phrase `member <normalized email>`; when supplied it must be non-blank. |
| `programId` | [ID](/types/#scalars) `ID!` | yes | The LoyaltyProgram to enroll into — in-tenant + ACTIVE. |
| `customer` | [LoyaltyCustomerInput](/types/LoyaltyCustomerInput/) `LoyaltyCustomerInput!` | yes | The identity block — email REQUIRED (the enrollment identity; normalized server-side). |
| `currentTier` | [String](/types/#scalars) | no | Optional initial tier NAME — must name a program tier. |
| `priceGroupId` | [ID](/types/#scalars) | no | Optional CustomerPriceGroup assignment. |
| `consumerId` | [ID](/types/#scalars) | no | Optional Consumer bridge. |

## Used by

- [createLoyaltyMember](/reference/loyalty-member/createLoyaltyMember/)
