PartnerCustomerUserDetail
Everything the account owner assigned to one buyer login, in one payload.
type PartnerCustomerUserDetail {
addresses: [CustomerUserAddressAssignment!]!
approverScope: String!
approvesOrders: Boolean!
assignedAddressIds: [ID!]!
createdAt: DateTime!
email: String!
firstName: String!
id: ID!
inviteStatus: String!
lastLoginAt: DateTime
lastName: String!
orderLimit: Float
partnerId: ID!
referenceId: String!
role: String!
status: String!
}
Fields
PartnerCustomerUserDetail.addresses ● [CustomerUserAddressAssignment!]! non-null object
Every LIVE address of the partner, flagged with this user's assignment and approver grant. This is the seller's full view of the account address book — it is deliberately NOT narrowed to what the user may use, because it also seeds the assignment checkboxes.
PartnerCustomerUserDetail.approverScope ● String! non-null scalar
approver reach — COMPANY (every request at this partner, incl. branchless ones) | BRANCH (only the branches granted in addresses). Meaningful only when approvesOrders; an Owner is always company-wide.
PartnerCustomerUserDetail.approvesOrders ● Boolean! non-null scalar
User.approvesCustomerOrders — may decide teammates' parked over-limit orders. Always true for an Owner (that is what owning the account means).
PartnerCustomerUserDetail.assignedAddressIds ● [ID!]! non-null scalar
Addresses assigned to this user. Meaning depends on role — for CUSTOMER_ADMIN, empty means UNRESTRICTED (whole account address book); for CUSTOMER_BUYER / CUSTOMER_VIEWER, empty means NONE assigned (denied, per resolveAddressScope). On the list so the Users tab can show each login's reach without opening every row.
PartnerCustomerUserDetail.createdAt ● DateTime! non-null scalar
When the record was created.
PartnerCustomerUserDetail.email ● String! non-null scalar
Email address.
PartnerCustomerUserDetail.firstName ● String! non-null scalar
The person's first name.
PartnerCustomerUserDetail.id ● ID! non-null scalar
The unique ID of this record.
PartnerCustomerUserDetail.inviteStatus ● String! non-null scalar
PENDING (invited, not yet accepted) | ACTIVE (accepted + enabled) | DEACTIVATED (accepted, access revoked).
PartnerCustomerUserDetail.lastLoginAt ● DateTime scalar
When the person last signed in.
PartnerCustomerUserDetail.lastName ● String! non-null scalar
The person's last name.
PartnerCustomerUserDetail.orderLimit ● Float scalar
Per-order ceiling in the org base currency (User.customerOrderLimit). Null = no limit. Only bites in Company mode — in branch mode the BRANCH's own orderLimit is the only value limit (rule 1), and an Owner is never order-value checked at all.
PartnerCustomerUserDetail.partnerId ● ID! non-null scalar
The partner this login belongs to.
PartnerCustomerUserDetail.referenceId ● String! non-null scalar
Reference id shown in the admin console — <customer code>@<firstnamelastname> (e.g. C000049@gowrivijayan). DERIVED on read from Partner.code + the user's name, not a stored column, and not unique — display only, never a lookup key. Empty string when the partner has no code or the user has no name.
PartnerCustomerUserDetail.role ● String! non-null scalar
CUSTOMER_ADMIN (Owner) | CUSTOMER_BUYER | CUSTOMER_VIEWER — the SAME vocabulary the buyer-side team screen uses (CUSTOMER_TEAM_ROLES). The founding self-registered user is CUSTOMER_ADMIN; invited users hold whatever role the invite carried (default CUSTOMER_BUYER).
PartnerCustomerUserDetail.status ● String! non-null scalar
The raw User.status — ACTIVE | INACTIVE (invite outstanding) | SUSPENDED (access revoked). Prefer inviteStatus, which reads the same row as the three states the UI shows.
Returned By
partnerCustomerUser query ● updateCustomerUser mutation