Skip to main content

Query products with customer-specific pricing

Fetch products showing the price that applies to the logged-in contact's company, including any pricesheet or orderlist pricing.

Query

When a user is authenticated, the price field automatically resolves to the customer-specific price if one exists. No extra parameters are needed — Propeller applies pricesheets based on the session.

query GetCustomerPrice($productId: Int!, $quantity: Int!, $taxZone: String!) {
product(productId: $productId) {
productId
sku
names { language value }
price(input: { quantity: $quantity, taxZone: $taxZone }) {
net
gross
list
taxCode
type
quantity
}
}
}

Variables

{
"productId": 1895,
"quantity": 1,
"taxZone": "NL"
}

Response — customer-specific price active

When a pricesheet matches the authenticated user's company, type indicates the source:

{
"data": {
"product": {
"productId": 1895,
"sku": "HP-450G10-I5",
"names": [
{ "language": "NL", "value": "HP ProBook 450 G10 i5" }
],
"price": {
"net": 907.50,
"gross": 750.00,
"list": 899.00,
"taxCode": "H",
"type": "PRICESHEET",
"quantity": 1
}
}
}
}

Response — fallback to default price

When no customer-specific price exists, the default catalog price is returned with type: "DEFAULT":

{
"data": {
"product": {
"productId": 1895,
"sku": "HP-450G10-I5",
"names": [
{ "language": "NL", "value": "HP ProBook 450 G10 i5" }
],
"price": {
"net": 1087.79,
"gross": 899.00,
"list": 899.00,
"taxCode": "H",
"type": "DEFAULT",
"quantity": 1
}
}
}
}

How it works

Authentication drives pricing. The same query returns different prices depending on the session. An anonymous request gets the default catalog price, while an authenticated request may get a pricesheet price. The type field tells you the source: DEFAULT = catalog, PRICESHEET = company-specific, BULK_SALES_PRICE = volume tier. Compare gross to list to show a "you save X%" indicator.

See also