B2B and B2C data models
Propeller supports both B2B and B2C commerce through separate data models. Which REST API resources you use depends on whether you are managing business customers, individual consumers or both.
Key differences
| Aspect | B2B | B2C |
|---|---|---|
| Primary users | Companies and their employees | Individual consumers |
| Data structure | Hierarchical (companies → contacts) | Flat (individual customers) |
| Pricing model | Negotiated, customer-specific | Standard or customer-specific |
| User management | Role-based access control | Individual accounts |
| Catalog access | Restricted, customer-specific | Public or customer-specific |
B2B: companies and contacts
The B2B model is used in environments where a predefined set of customers is allowed access to a webshop or portal. The customer or debtor is a company with a unique debtorId. The contacts are persons within the organization, each with their own email address, telephone number and multiple different invoice, delivery and visiting addresses.
Company (organization)
├── Contact (employee/user)
├── Contact (employee/user)
└── Addresses
Companies contain:
- Company information (name, tax number, contact details)
- Organizational hierarchy (parent-child relationships)
- Inherited settings and permissions
- Budget and ordering restrictions
- Address management
Contacts contain:
- Personal information (name, email, phone)
- Role-based permissions
- Order history and preferences
B2B API usage
Create a company:
POST /v2/companies
{
"name": "Acme Corporation",
"taxNumber": "NL123456789B01",
"parent": { "sourceId": "PARENT_COMP", "source": "CRM" }
}
Create a contact within a company:
POST /v2/contacts
{
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@acme.com",
"parent": { "sourceId": "ACME_CORP", "source": "CRM" }
}
Get company contacts:
GET /v2/companies/id/123?expands=contacts
B2C: customers
In B2C, there is no company hierarchy. Each buyer is a customer with their own account.
Customer (individual)
├── Personal information
└── Addresses
Customers contain:
- Personal information (name, email, phone)
- Order history and preferences
- Multiple addresses (billing, shipping)
- Account settings and preferences
B2C API usage
Create a customer:
POST /v2/customers
{
"firstName": "Jane",
"lastName": "Smith",
"email": "jane.smith@email.com",
"phone": "+1234567890"
}
Resource structure
| Resource | B2B | B2C |
|---|---|---|
| Companies | Primary organizational unit | Not applicable |
| Contacts | Users within companies | Not applicable |
| Customers | Not applicable | Primary user unit |
| Orders | Company/contact-based | Customer-based |
Integration patterns
B2B: ERP and CRM sync
Sync company data from ERP:
POST /v2/companies/bulk/sourceId
{
"companies": [
{
"sourceId": "ERP_COMP_001",
"source": "SAP_ERP",
"name": "Acme Corporation"
}
]
}
Sync contact data from CRM:
POST /v2/contacts/bulk/sourceId
{
"contacts": [
{
"sourceId": "CRM_CONTACT_001",
"source": "SALESFORCE",
"firstName": "John",
"lastName": "Doe",
"parent": { "sourceId": "ACME_CORP", "source": "CRM" }
}
]
}
B2C: e-commerce sync
Sync customer data from e-commerce platform:
POST /v2/customers/bulk/sourceId
{
"customers": [
{
"sourceId": "SHOP_CUSTOMER_001",
"source": "SHOPIFY",
"firstName": "Jane",
"lastName": "Smith"
}
]
}
Using both models together
Propeller supports using both B2B and B2C models in the same environment. You can use companies and contacts for your B2B operations and customers for your B2C operations simultaneously.
See also
- Sources for tracking external system identifiers on companies, contacts and customers
- Lookup Keys for referencing user resources by different identifiers
- REST API Reference for the full endpoint specification