{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-developer-portal/system-integration/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown","redocly_category":"Integrations","owner":"MB"},"seo":{"title":"The Customer and Company Model","description":"How customers and companies are structured in Norce Commerce, how they relate, and how to import and maintain them via integration.","keywords":"technical, system-integration, customer, company, b2b, b2c, import, model"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"the-customer-and-company-model"},"children":["The Customer and Company Model"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This article explains how Norce Commerce models customer and company data, how the two entities relate, and what integrators need to know to import and maintain them correctly."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"two-entities-customer-and-company"},"children":["Two Entities: Customer and Company"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Norce Commerce uses two separate entities to represent the people and organizations that buy from your store."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Entity"},"children":["Entity"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Represents"},"children":["Represents"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Unique identifier"},"children":["Unique identifier"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customer"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An individual person — a B2C buyer or a contact at a company"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EmailAddress"]}," (default lookup)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Company"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["An organization — a business, division, department, or business unit"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VATNumber"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OrganizationNo"]}," (default lookup)"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B2C order"]}," has a Customer and no Company. A ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B2B order"]}," has both — the Customer is the contact person placing the order on behalf of the Company."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The same Customer can do both. A person can place an order as a private individual and later place an order as a contact for a company. Norce supports this without needing two separate customer records."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-customer-model"},"children":["The Customer Model"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"roles"},"children":["Roles"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A Customer in Norce Commerce serves two roles depending on the order:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B2C buyer:"]}," The customer is the end buyer. No company is involved."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["B2B contact:"]}," The customer is a contact person associated with one or more companies. The company is the buyer; the customer represents who placed the order."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"customer--company-many-to-many"},"children":["Customer ↔ Company: Many-to-Many"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The relationship between Customer and Company is many-to-many. A customer can be linked to multiple companies — one marked as their primary company (e.g. their employer), plus others they are allowed to purchase on behalf of (e.g. client projects as a contractor). A company has many customers (contacts)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"built-in-fields"},"children":["Built-in Fields"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The table below lists the commonly used fields. See the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/schemas/connectcustomer#customer"},"children":["full Customer schema"]}," for a complete reference."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EmailAddress"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Unique identifier; default lookup key"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Code"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["External identifier — typically the ERP or CRM customer number"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FirstName"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LastName"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["InvoiceAddress"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One per customer"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DeliveryAddresses"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Multiple allowed"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Flags"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Boolean tags for segmentation (see below)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceLists"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional; for loyalty-based or custom pricing"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Accounts"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional login credentials per application"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AdditionalInfo"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["InfoTypes — extensible custom fields"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"customer-flags"},"children":["Customer Flags"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Customer flags work like product flags but on the customer register. Use them for:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Loyalty segmentation (Gold / Silver / Bronze)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Interest or preference tagging"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Campaign targeting — flags can be used as conditions in Norce campaign functionality"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"price-lists"},"children":["Price Lists"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Customers can be linked to specific price lists, giving them access to custom prices or restricted assortments when they identify themselves. Less common than company price lists, but useful for loyalty programs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"accounts"},"children":["Accounts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Accounts are Norce's built-in login mechanism. An account is tied to a specific application and holds a login name, role, and hashed password. This is optional — many solutions use a third-party identity provider instead. When using third-party auth, the authenticated user's email address or customer code is used to look up the correct customer in Norce after login."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"infotypes-additionalinfo"},"children":["InfoTypes (AdditionalInfo)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The customer model can be extended with custom fields via InfoTypes (called ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AdditionalInfo"]}," in the Connect contract). Examples: clothing sizes, delivery preferences, opt-in flags for personalisation. These can be imported and maintained via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCustomers"]},"."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-company-model"},"children":["The Company Model"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"built-in-fields-1"},"children":["Built-in Fields"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The table below lists the commonly used fields. See the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/schemas/connectcustomer#company"},"children":["full Company schema"]}," for a complete reference."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Notes"},"children":["Notes"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VATNumber"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OrganizationNo"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Unique identifier; default lookup key"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Code"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["External identifier — typically the ERP company/customer number"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Name"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["InvoiceAddress"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One per company"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VisitAddress"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One per company"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DeliveryAddresses"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Multiple allowed"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ParentCompanyCode"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional; for hierarchy (see below)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Flags"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Boolean tags for segmentation"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PriceLists"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Common in B2B for contract prices and restricted assortments"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CompanyDiscounts"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Real-time discount rules applied on top of price list"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DeliveryMethods"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional company-specific delivery options"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PaymentMethods"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional company-specific payment options"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AdditionalInfo"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["InfoTypes — extensible custom fields"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"parent-company-hierarchy"},"children":["Parent Company Hierarchy"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Norce supports a parent-child hierarchy between companies via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ParentCompanyCode"]},". This is a structural model only — there is no automatic inheritance of prices, discounts, or settings between parent and child. Use it to represent organizational structures (holding company → subsidiaries) that your storefront or integration logic can act on."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"price-lists-and-assortments"},"children":["Price Lists and Assortments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Company price lists are common in B2B. They serve two purposes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customer-unique prices:"]}," The company sees prices from its contracted price list rather than the standard price list."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Customer-unique assortment:"]}," Certain products are only visible or purchasable for specific companies."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important:"]}," Price lists must exist in Norce before they can be linked to a company. Create them via the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/metadata-integrations#price-lists"},"children":["Management API"]}," first, then reference them by code in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCompanies"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"company-discounts"},"children":["Company Discounts"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Company discounts are category- or flag-based discount rules applied on top of the price list, calculated in real time at checkout. They are not stored as explicit prices and do not appear in price exports. They are visible when a logged-in user fetches prices via the Query or Storefront APIs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"b2b-approval-flow"},"children":["B2B Approval Flow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In B2B implementations, the ERP typically owns the company register (contracts, credit limits). A common pattern:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Company is created in Norce when an organization registers on the storefront."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Integration sends the new company to the ERP for approval."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["ERP returns the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CompanyCode"]}," and a verification flag (e.g. \"approved to buy on contract\")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Integration updates the company in Norce via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCompanies"]}," with the ERP code and any linked price lists."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Until the ERP code is set and the company is approved, they cannot purchase on contract terms."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"identification-and-lookup-keys"},"children":["Identification and Lookup Keys"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"customer"},"children":["Customer"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Norce looks up existing customers by ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EmailAddress"]}]}," by default. If a customer is imported with an email address that already exists, Norce updates the existing record rather than creating a duplicate."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Code"]}," (CustomerCode) is the external identifier — the number assigned by the CRM or ERP that owns the customer register. This must be ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["globally unique across all applications"]}," regardless of the application-unique setting (see below)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"company"},"children":["Company"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Norce looks up existing companies by ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["VATNumber"]}]}," (also called ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OrganizationNo"]},"). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Code"]}," (CompanyCode) must also be unique and is used as the external identifier from the ERP or CRM."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"application-unique-vs-client-unique"},"children":["Application-Unique vs Client-Unique"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The customer and company register lives at the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["client level"]}," — accessible across all applications by default. However, you can configure customers and companies to be ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["unique per application"]}," in the client settings."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Setting"},"children":["Setting"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Behavior"},"children":["Behavior"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client-unique"]}," (default)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["One shared register. An email or VAT number matches the same customer/company regardless of which application the request comes from. Use when there is one shared CRM or ERP across all applications."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Application-unique"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Separate registers per application. The same email address can exist as different customers in different applications. Use when each application has its own CRM or customer master."]}]}]}]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," This setting applies to both Customer and Company simultaneously — you cannot have different settings for each within the same client."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Warning:"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CustomerCode"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CompanyCode"]}," must be globally unique regardless of the application-unique setting. The application-unique setting only controls whether duplicate email addresses / VAT numbers are treated as the same record across applications."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"danger","name":"Do not change this setting yourself"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Changing the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Is application unique"]}," setting on an existing client is highly destructive — it will cause existing customer and company lookups to behave differently across all applications immediately. If you believe this setting needs to change, contact Norce support rather than making the change yourself."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"importing-via-connect"},"children":["Importing via Connect"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Both ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCustomers"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCompanies"]}," are ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["asynchronous"]}," operations — a job ID is returned for status tracking, identical to product imports."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"importcustomers"},"children":["ImportCustomers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Accepts a list of Customer objects. You can include:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["All built-in fields (name, addresses, email)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AdditionalInfo"]}," (InfoTypes / custom fields)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Accounts"]}," (login credentials)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Price list codes (price lists must already exist)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Company associations — by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Code"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Id"]},"; set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["IsPrimary"]}," on the primary company relationship"]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You cannot create companies via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCustomers"]},". Companies must already exist before linking."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"importcompanies"},"children":["ImportCompanies"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Accepts a list of Company objects. You can include:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["All built-in fields (name, addresses, VAT number)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AdditionalInfo"]}," (InfoTypes / custom fields)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Price list codes (price lists must already exist)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CompanyDiscounts"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ParentCompanyCode"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Delivery method and payment method associations (must already exist)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["A full ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Customers"]}," list — you can create or update customer records inline when importing a company. This is the recommended approach when onboarding a new company and wanting to create a default admin contact in the same operation."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"gdpr-and-anonymization"},"children":["GDPR and Anonymization"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Norce has built-in anonymization functionality that scrambles all personal data for a given customer across the entire data store — customer records, orders, and baskets. After anonymization:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Internal IDs and relationships are preserved (so order history structure remains intact)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["All PII fields are overwritten and can no longer be read back."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important for integrations:"]}," If an external system pushes customer data back to Norce after anonymization (e.g. a scheduled sync), the customer record will be re-populated with PII. Anonymization must be coordinated across ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["all systems that hold customer data"]}," simultaneously. Norce does not prevent a re-import of data for an anonymized customer."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"common-pitfalls"},"children":["Common Pitfalls"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Pitfall"},"children":["Pitfall"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Details"},"children":["Details"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["CustomerCode not globally unique"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Even with application-unique customers enabled, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CustomerCode"]}," must be unique across the entire client. Duplicate codes cause one record to silently overwrite the other."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Linking to non-existent price lists"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Price lists referenced in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCustomers"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCompanies"]}," must already exist. Create them via the Management API before the import."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Creating companies via ImportCustomers"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Not possible. Companies must be created via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ImportCompanies"]}," first."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Re-importing after anonymization"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A scheduled sync from ERP can inadvertently re-populate anonymized records. Coordinate anonymization across all systems."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Wrong application-unique setting"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Choosing application-unique when a shared CRM exists (or vice versa) causes duplicate records or unexpected merging. Align the setting with your system landscape before the first import."]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"further-reading"},"children":["Further Reading"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/customer-and-company-integrations"},"children":["Customer and Company Integrations"]}," — integration patterns and flows"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/customerservice/openapi/customers/importcustomers"},"children":["ImportCustomers API reference"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/api-reference/connect/customerservice/openapi/customers/importcompanies"},"children":["ImportCompanies API reference"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/metadata-integrations"},"children":["Metadata Integrations"]}," — creating price lists via the Management API"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/calling-norce-commerce-connect"},"children":["Calling Norce Commerce Connect"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/developer-portal/system-integration/calling-norce-commerce-query"},"children":["Calling Norce Commerce Query"]}]}]}]},"headings":[{"value":"The Customer and Company Model","id":"the-customer-and-company-model","depth":1},{"value":"Two Entities: Customer and Company","id":"two-entities-customer-and-company","depth":2},{"value":"The Customer Model","id":"the-customer-model","depth":2},{"value":"Roles","id":"roles","depth":3},{"value":"Customer ↔ Company: Many-to-Many","id":"customer--company-many-to-many","depth":3},{"value":"Built-in Fields","id":"built-in-fields","depth":3},{"value":"Customer Flags","id":"customer-flags","depth":3},{"value":"Price Lists","id":"price-lists","depth":3},{"value":"Accounts","id":"accounts","depth":3},{"value":"InfoTypes (AdditionalInfo)","id":"infotypes-additionalinfo","depth":3},{"value":"The Company Model","id":"the-company-model","depth":2},{"value":"Built-in Fields","id":"built-in-fields-1","depth":3},{"value":"Parent Company Hierarchy","id":"parent-company-hierarchy","depth":3},{"value":"Price Lists and Assortments","id":"price-lists-and-assortments","depth":3},{"value":"Company Discounts","id":"company-discounts","depth":3},{"value":"B2B Approval Flow","id":"b2b-approval-flow","depth":3},{"value":"Identification and Lookup Keys","id":"identification-and-lookup-keys","depth":2},{"value":"Customer","id":"customer","depth":3},{"value":"Company","id":"company","depth":3},{"value":"Application-Unique vs Client-Unique","id":"application-unique-vs-client-unique","depth":2},{"value":"Importing via Connect","id":"importing-via-connect","depth":2},{"value":"ImportCustomers","id":"importcustomers","depth":3},{"value":"ImportCompanies","id":"importcompanies","depth":3},{"value":"GDPR and Anonymization","id":"gdpr-and-anonymization","depth":2},{"value":"Common Pitfalls","id":"common-pitfalls","depth":2},{"value":"Further Reading","id":"further-reading","depth":2}],"frontmatter":{"seo":{"title":"The Customer and Company Model","description":"How customers and companies are structured in Norce Commerce, how they relate, and how to import and maintain them via integration.","keywords":"technical, system-integration, customer, company, b2b, b2c, import, model"},"metadata":{"redocly_category":"Integrations","owner":"MB"}},"lastModified":"2026-07-10T06:04:35.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/developer-portal/system-integration/customer-and-company-model","userData":{"isAuthenticated":false,"teams":["anonymous"]}}