Mutations#

Mutations are write operations — use them to create, update, or delete resources. All mutations follow the same structure: a single input argument wraps all mutation fields, and the payload returns the affected resource.

mutation MutationName($input: MutationNameInput!) {
  mutationName(input: $input) {
    # fields to return
  }
}

Cart#

createCart#

Create a new empty cart.

No input required.

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation {
  createCart {
    cart {
      id
      number
      currency
      total {
        amount
        currency
        formatted
      }
    }
  }
}

addItemsToCart#

Add one or more items to a cart by SKU.

Input: AddItemsToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
items
[ItemInput!]!
RequiredItems to add

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddItemsToCart($input: AddItemsToCartInput!) {
  addItemsToCart(input: $input) {
    cart {
      id
      items {
        sku
        label
        quantity
        total
      }
      total
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "items": [
      { "sku": "BLK-HOODIE-M", "quantity": 2 }
    ]
  }
}

removeItemsFromCart#

Remove one or more items from a cart.

Input: RemoveItemFromCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
ids
[String!]!
RequiredIDs of cart items to remove

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation RemoveItemsFromCart($input: RemoveItemFromCartInput!) {
  removeItemsFromCart(input: $input) {
    cart {
      id
      items {
        sku
        quantity
      }
      total
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "ids": ["5a6b7c8d-9e0f-1234-5678-9abcdef01234"]
  }
}

setItemQuantityForCart#

Update the quantity of a specific item in the cart.

Input: SetItemQuantityForCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
sku
String!
RequiredSKU of the cart item to update
quantity
Int!
RequiredNew quantity

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation SetItemQuantity($input: SetItemQuantityForCartInput!) {
  setItemQuantityForCart(input: $input) {
    cart {
      id
      items {
        sku
        quantity
        total
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "sku": "BLK-HOODIE-M",
    "quantity": 3
  }
}

addCustomerToCart#

Attach a customer (contact) to a cart.

Input: AddCustomerToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
contact_id
String!
RequiredThe ID of the contact

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddCustomerToCart($input: AddCustomerToCartInput!) {
  addCustomerToCart(input: $input) {
    cart {
      id
      customer {
        contact {
          email
          given_name
          family_name
        }
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "contact_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
}

addBillingAddressToCart#

Attach a billing address to a cart.

Input: AddBillingAddressToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
address
AddressInput!
RequiredThe billing address

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddBillingAddress($input: AddBillingAddressToCartInput!) {
  addBillingAddressToCart(input: $input) {
    cart {
      id
      billing {
        address {
          address_line_1
          locality
          postal_code
          country_code
        }
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "address": {
      "address_line_1": "Keizersgracht 313",
      "locality": "Amsterdam",
      "postal_code": "1016 EE",
      "country_code": "NL"
    }
  }
}

addShippingAddressToCart#

Attach a shipping address to a cart. Uses the same AddressInput shape as addBillingAddressToCart.

Input: AddShippingAddressToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
address
AddressInput!
RequiredThe shipping address

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddShippingAddress($input: AddShippingAddressToCartInput!) {
  addShippingAddressToCart(input: $input) {
    cart {
      id
      delivery {
        address {
          address_line_1
          locality
          country_code
        }
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "address": {
      "address_line_1": "Herengracht 401",
      "locality": "Amsterdam",
      "postal_code": "1017 BP",
      "country_code": "NL"
    }
  }
}

addShippingMethodToCart#

Select a shipping method for the cart. Available shipping methods can be fetched from cart.options.shipping_methods.

Input: AddShippingMethodToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
method_id
String!
RequiredThe ID of the shipping method

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddShippingMethod($input: AddShippingMethodToCartInput!) {
  addShippingMethodToCart(input: $input) {
    cart {
      id
      delivery {
        method {
          id
          name
        }
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "method_id": "e1f2a3b4-c5d6-7890-abcd-ef0123456789"
  }
}

addPaymentMethodToCart#

Select a payment method for the cart. Available payment methods can be fetched from cart.options.payment_methods.

Input: AddPaymentMethodToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
method_id
String!
RequiredThe ID of the payment method
issuer_id
String!
RequiredThe ID of the issuer (bank/scheme) for the payment method
terminal_id
String
OptionalOptional terminal ID (for PIN payments)
drawer_id
String
OptionalOptional cash-drawer ID

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddPaymentMethod($input: AddPaymentMethodToCartInput!) {
  addPaymentMethodToCart(input: $input) {
    cart {
      id
      checkout {
        url
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "method_id": "e5f6a7b8-c9d0-1234-5678-90abcdef0123",
    "issuer_id": "3a4b5c6d-7e8f-9012-3456-7890abcdef12"
  }
}

addCouponToCart#

Apply a coupon code to the cart.

Input: CouponInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
coupon
String!
RequiredThe coupon code

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddCoupon($input: CouponInput!) {
  addCouponToCart(input: $input) {
    cart {
      id
      coupons {
        code
      }
      total
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "coupon": "SUMMER25"
  }
}

removeCouponFromCart#

Remove an applied coupon from the cart.

Input: CouponInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
coupon
String!
RequiredThe coupon code to remove

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation RemoveCoupon($input: CouponInput!) {
  removeCouponFromCart(input: $input) {
    cart {
      id
      coupons {
        code
      }
      total
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "coupon": "SUMMER25"
  }
}

setNoteForCart#

Add a customer note to the cart.

Input: SetNoteForCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
note
String!
RequiredThe note text

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation SetNote($input: SetNoteForCartInput!) {
  setNoteForCart(input: $input) {
    cart {
      id
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "note": "Please deliver between 9-12"
  }
}

setReferenceForCart#

Set an external reference on the cart (e.g. your own order reference).

Input: SetReferenceForCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
reference
String!
RequiredThe reference string

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation SetReference($input: SetReferenceForCartInput!) {
  setReferenceForCart(input: $input) {
    cart {
      id
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "reference": "PO-2024-0042"
  }
}

confirmCart#

Confirm a cart and convert it to an order. The cart must have no validation_errors.

Input: ConfirmCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart to confirm

Returns: Order

NameTypeRequiredDescription
id
ID!
RequiredThe ID
number
String!
RequiredOrder number
total
Money!
RequiredTotal value
currency
Currency!
RequiredCurrency code

Example#

mutation ConfirmCart($input: ConfirmCartInput!) {
  confirmCart(input: $input) {
    order {
      id
      number
      total
      checkout {
        url
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a"
  }
}

addPhoneNumberToCart#

Add a phone number to a cart.

Input: AddPhoneNumberToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
phone_number
PhoneNumberInput!
RequiredPhone number details

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddPhone($input: AddPhoneNumberToCartInput!) {
  addPhoneNumberToCart(input: $input) {
    cart {
      id
      phone_number {
        country_code
        national
        number
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "phone_number": {
      "country_code": "NL",
      "national": "612345678"
    }
  }
}

addPickUpPointToCart#

Set a pickup point for cart delivery.

Input: AddPickUpPointToCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
spid
String!
RequiredService-point ID of the pickup point (provider-issued)

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation AddPickUp($input: AddPickUpPointToCartInput!) {
  addPickUpPointToCart(input: $input) {
    cart {
      id
      delivery {
        address {
          address_line_1
          locality
        }
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "spid": "f6a7b8c9-d0e1-2345-6789-0abcdef12345"
  }
}

removeCustomerFromCart#

Remove the customer from a cart.

Input: RemoveCustomerFromCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation RemoveCustomer($input: RemoveCustomerFromCartInput!) {
  removeCustomerFromCart(input: $input) {
    cart {
      id
      customer {
        contact {
          email
        }
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a"
  }
}

setCountryCodeForCart#

Set the country code for the cart (affects VAT/tax calculations).

Input: SetCountryCodeForCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
country_code
String!
RequiredISO country code (e.g. NL, DE, US)

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation SetCountry($input: SetCountryCodeForCartInput!) {
  setCountryCodeForCart(input: $input) {
    cart {
      id
      total
      currency
      vat {
        percentage
        amount
      }
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "country_code": "NL"
  }
}

setCountryCodeOnCart#

Set the destination country code on a cart. The country is used when calculating prices, VAT and shipping for the cart.

Input: SetCountryCodeOnCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
country_code
String!
RequiredISO 3166-1 alpha-2 country code (e.g. NL, DE)

Returns: SetCountryCodeForCartPayload!

NameTypeRequiredDescription
cart
Cart
OptionalThe updated cart

Example#

mutation SetCountryCodeOnCart($input: SetCountryCodeOnCartInput!) {
  setCountryCodeOnCart(input: $input) {
    cart {
      id
      number
      total {
        amount
        formatted
      }
      is_including_vat
      updated_at
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "country_code": "DE"
  }
}

setDutiesForCart#

Set the import duties on a cart, for example when shipping cross-border. The duties are reflected in the cart totals.

Input: SetDutiesForCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart
duties
Money!
RequiredThe duties to charge — pass the amount in cents

Returns: SetDutiesForCartPayload!

NameTypeRequiredDescription
cart
Cart
OptionalThe updated cart

Example#

mutation SetDutiesForCart($input: SetDutiesForCartInput!) {
  setDutiesForCart(input: $input) {
    cart {
      id
      number
      total {
        amount
        formatted
      }
      updated_at
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "duties": 1250
  }
}

setExpectedAtForCartItems#

Set the expected delivery date for specific cart items, for example when an item is backordered and will only become available at a known future date.

Input: SetExpectedAtForCartItemsInput!

NameTypeRequiredDescription
expected_at
Int64!
RequiredExpected delivery date — Unix timestamp in milliseconds
items
[String]!
RequiredIDs of the cart items to update

Returns: SetExpectedAtForCartItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated cart items

Example#

mutation SetExpectedAtForCartItems($input: SetExpectedAtForCartItemsInput!) {
  setExpectedAtForCartItems(input: $input) {
    items {
      id
      sku
      label
      is_expected
      status
      updated_at
    }
  }
}
{
  "input": {
    "expected_at": 1767225600000,
    "items": ["itm_7hRp2W", "itm_9kTn4B"]
  }
}

Order#

createOrder#

Create a new order.

Input: CreateOrderInput!

NameTypeRequiredDescription
channel_id
String
OptionalThe channel ID to create the order in
currency
Currency
OptionalISO 4217 currency code (e.g. EUR)
country_code
String
OptionalISO country code (e.g. NL)
customer
CustomerInput
OptionalInline customer details
phone_number
PhoneNumberInput
OptionalPhone number on the order
phone_number_id
String
OptionalExisting phone-number ID
delivery
CreateOrderDeliveryInput
OptionalInitial delivery address/method
billing
CreateOrderBillingInput
OptionalInitial billing address
meta_data
JsonObject
OptionalFree-form metadata
ordered_at
Int64
OptionalUnix-ms timestamp when the order was placed (defaults to now)

Returns: Order

NameTypeRequiredDescription
id
ID!
RequiredThe ID
number
String!
RequiredOrder number
total
Money!
RequiredTotal value
currency
Currency!
RequiredCurrency code

Example#

mutation CreateOrder($input: CreateOrderInput!) {
  createOrder(input: $input) {
    order {
      id
      number
      status
      currency
    }
  }
}
{
  "input": {
    "channel_id": "3c7d1e5f-9a2b-4f8e-b6d0-1234abcd5678"
  }
}

addItemsToOrder#

Add items to an existing order.

Input: AddItemsToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe order ID
items
[OrderItemInput!]!
RequiredItems to add

Returns: Order

NameTypeRequiredDescription
id
ID!
RequiredThe ID
number
String!
RequiredOrder number
total
Money!
RequiredTotal value
currency
Currency!
RequiredCurrency code

Example#

mutation AddItems($input: AddItemsToOrderInput!) {
  addItemsToOrder(input: $input) {
    order {
      id
      items {
        sku
        label
        quantity
        total
      }
    }
  }
}
{
  "input": {
    "order_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "items": [
      { "sku": "BLK-HOODIE-M", "quantity": 2 }
    ]
  }
}

addCustomerToOrder#

Assign a customer to an order.

Input: AddCustomerToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe order ID
customer
AttachCustomerInput!
RequiredReference to the customer to attach

Returns: Order

NameTypeRequiredDescription
id
ID!
RequiredThe ID
number
String!
RequiredOrder number
total
Money!
RequiredTotal value
currency
Currency!
RequiredCurrency code

Example#

mutation AddCustomer($input: AddCustomerToOrderInput!) {
  addCustomerToOrder(input: $input) {
    order {
      id
      customer {
        contact {
          email
          given_name
          family_name
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "customer": {
      "contact_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a"
    }
  }
}

addBillingAddressToOrder#

Set billing address on an order.

Input: AddBillingAddressToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe order ID
address_id
String
OptionalID of an existing address (use this OR `address`)
address
AddressInput
OptionalInline billing address (use this OR `address_id`)

Returns: Order

NameTypeRequiredDescription
id
ID!
RequiredThe ID
number
String!
RequiredOrder number
total
Money!
RequiredTotal value
currency
Currency!
RequiredCurrency code

Example#

mutation AddBilling($input: AddBillingAddressToOrderInput!) {
  addBillingAddressToOrder(input: $input) {
    order {
      id
      billing {
        address {
          address_line_1
          locality
          postal_code
          country_code
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "address": {
      "address_line_1": "Keizersgracht 313",
      "locality": "Amsterdam",
      "postal_code": "1016 EE",
      "country_code": "NL"
    }
  }
}

addShippingAddressToOrder#

Set shipping address on an order.

Input: AddShippingAddressToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe order ID
type
AddressType!
RequiredAddress kind
address_id
String
OptionalID of an existing address (use this OR `address`)
address
AddressInput
OptionalInline shipping address (use this OR `address_id`)

Returns: Order

NameTypeRequiredDescription
id
ID!
RequiredThe ID
number
String!
RequiredOrder number
total
Money!
RequiredTotal value
currency
Currency!
RequiredCurrency code

Example#

mutation AddShipping($input: AddShippingAddressToOrderInput!) {
  addShippingAddressToOrder(input: $input) {
    order {
      id
      delivery {
        address {
          address_line_1
          locality
          postal_code
          country_code
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "type": "ADDRESS",
    "address": {
      "address_line_1": "Herengracht 401",
      "locality": "Amsterdam",
      "postal_code": "1017 BP",
      "country_code": "NL"
    }
  }
}

cancelOrderItems#

Cancel items on an order.

Input: CancelOrderItemsInput!

NameTypeRequiredDescription
item_ids
[String!]!
RequiredIDs of the items to cancel

Returns: Order

NameTypeRequiredDescription
id
ID!
RequiredThe ID
number
String!
RequiredOrder number
total
Money!
RequiredTotal value
currency
Currency!
RequiredCurrency code

Example#

mutation Cancel($input: CancelOrderItemsInput!) {
  cancelOrderItems(input: $input) {
    order {
      id
      items {
        id
        is_cancelled
      }
    }
  }
}
{
  "input": {
    "item_ids": ["5a6b7c8d-9e0f-1234-5678-9abcdef01234"]
  }
}

addAdjustmentsToOrder#

Add one or more adjustments — fixed or percentage-based surcharges or discounts — to an order. Adjustments apply to the order as a whole and are reflected in the order totals.

Input: AddAdjustmentsToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
adjustments
[AdjustmentInput]!
RequiredThe adjustments to add to the order

Returns: AddAdjustmentsToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddAdjustmentsToOrder($input: AddAdjustmentsToOrderInput!) {
  addAdjustmentsToOrder(input: $input) {
    order {
      id
      number
      subtotal {
        amount
        formatted
      }
      total {
        amount
        formatted
      }
      adjustments {
        id
        description
        amount
        is_percentage
        is_discount
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "adjustments": [
      {
        "description": "Loyalty discount",
        "is_percentage": true,
        "is_discount": true,
        "amount": 10
      }
    ]
  }
}

addContraFeesToOrder#

Add contra fees to an order — offsetting fee lines that counter an existing fee (for example to compensate a shipping or payment fee). Each contra fee references the fee it offsets via contra_fee_id.

Input: AddContraFeesToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
fees
[ContraFeeInput]!
RequiredThe contra fees to add to the order

Returns: AddContraFeesToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddContraFeesToOrder($input: AddContraFeesToOrderInput!) {
  addContraFeesToOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      fees {
        shipping {
          id
          description
          is_contra
          total {
            amount
            formatted
          }
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "fees": [
      {
        "description": "Shipping fee waived",
        "type": "SHIPPING_FEE",
        "amount": 495,
        "contra_fee_id": "fee_3JvB6n"
      }
    ]
  }
}

addCouponToOrder#

Apply a coupon code to an order. The coupon's discount is reflected in the order totals.

Input: AddCouponToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
coupon
String!
RequiredThe coupon code to apply

Returns: AddCouponToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddCouponToOrder($input: AddCouponToOrderInput!) {
  addCouponToOrder(input: $input) {
    order {
      id
      number
      coupons {
        code
        is_valid
      }
      total {
        amount
        formatted
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "coupon": "SUMMER10"
  }
}

addFeesToOrder#

Add one or more fees — payment, handling or shipping — to an order. The fee amounts are reflected in the order totals.

Input: AddFeesToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
fees
[FeeInput]!
RequiredThe fees to add to the order

Returns: AddFeesToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddFeesToOrder($input: AddFeesToOrderInput!) {
  addFeesToOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      fees {
        payment {
          id
          description
          total {
            amount
            formatted
          }
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "fees": [
      {
        "description": "Payment provider surcharge",
        "type": "PAYMENT_FEE",
        "amount": 195
      }
    ]
  }
}

addPaymentMethodToOrder#

Add a payment method (with its issuer) to an order, creating a payment that can subsequently be executed. For point-of-sale payments, a terminal or cash drawer can be specified.

Input: AddPaymentMethodToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
issuer_id
String!
RequiredThe ID of the payment issuer (e.g. a specific bank or card scheme)
method_id
String!
RequiredThe ID of the payment method
terminal_id
String
OptionalThe ID of the POS terminal to process the payment on
drawer_id
String
OptionalThe ID of the POS cash drawer for cash payments

Returns: AddPaymentMethodToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddPaymentMethodToOrder($input: AddPaymentMethodToOrderInput!) {
  addPaymentMethodToOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      payments {
        id
        type
        amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "issuer_id": "iss_1RbD5h",
    "method_id": "mtd_8FsJ2c"
  }
}

addPhoneNumberToOrder#

Add a phone number to an order — for example for delivery notifications — either by referencing an existing phone number by ID or by supplying a new one.

Input: AddPhoneNumberToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
phone_number_id
String
OptionalThe ID of an existing phone number to attach
phone_number
PhoneNumberInput
OptionalA new phone number to attach — used when no `phone_number_id` is given

Returns: AddPhoneNumberToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddPhoneNumberToOrder($input: AddPhoneNumberToOrderInput!) {
  addPhoneNumberToOrder(input: $input) {
    order {
      id
      number
      phone_number {
        id
        country_code
        number
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "phone_number": {
      "country_code": "NL",
      "number": "+31612345678"
    }
  }
}

addPickUpPointToOrder#

Set a carrier pick-up point (service point) as the delivery location for an entire order, identified by its service point ID.

Input: AddPickUpPointToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
spid
String!
RequiredThe service point ID of the pick-up point (as returned by the shipping method's pickup points)

Returns: AddPickUpPointToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddPickUpPointToOrder($input: AddPickUpPointToOrderInput!) {
  addPickUpPointToOrder(input: $input) {
    order {
      id
      number
      status
      shipping {
        pickup_point {
          id
          name
          carrier
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "spid": "8004-NL-100310"
  }
}

addShippingMethodToOrder#

Assign a shipping method to an order. The method applies to the order's delivery and is reflected in the order's shipping details.

Input: AddShippingMethodToOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
method_id
String!
RequiredThe ID of the shipping method to apply

Returns: AddShippingMethodToOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddShippingMethodToOrder($input: AddShippingMethodToOrderInput!) {
  addShippingMethodToOrder(input: $input) {
    order {
      id
      number
      status
      shipping {
        method {
          id
          name
          carrier
        }
        expected_at
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "method_id": "shm_3DcF6a"
  }
}

openOrder#

Reopen an order, setting its state back to open so it can be modified again.

Input: OpenOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order to open

Returns: OpenOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe opened order

Example#

mutation OpenOrder($input: OpenOrderInput!) {
  openOrder(input: $input) {
    order {
      id
      number
      status
      is_cancelled
      total {
        amount
        formatted
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ"
  }
}

recalculateOrderPrices#

Recalculate the prices and totals of an order, for example after price list or item changes, so its totals reflect the current pricing.

Input: RecalculateOrderPricesInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order to recalculate

Returns: RecalculateOrderPricesPayload!

NameTypeRequiredDescription
order
Order
OptionalThe order with recalculated prices

Example#

mutation RecalculateOrderPrices($input: RecalculateOrderPricesInput!) {
  recalculateOrderPrices(input: $input) {
    order {
      id
      number
      subtotal {
        amount
        formatted
      }
      total {
        amount
        formatted
      }
      total_excluding_vat {
        amount
        formatted
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ"
  }
}

removeAdjustmentsFromOrder#

Remove one or more adjustments — surcharges or discounts — from an order by their IDs. The order totals are updated accordingly.

Input: RemoveAdjustmentsFromOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
adjustment_ids
[String]!
RequiredThe IDs of the adjustments to remove

Returns: RemoveAdjustmentsFromOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RemoveAdjustmentsFromOrder($input: RemoveAdjustmentsFromOrderInput!) {
  removeAdjustmentsFromOrder(input: $input) {
    order {
      id
      number
      subtotal {
        amount
        formatted
      }
      total {
        amount
        formatted
      }
      adjustments {
        id
        description
        amount
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "adjustment_ids": ["adj_6Yc3wHt"]
  }
}

removeBillingAddressFromOrder#

Remove the billing address from an order.

Input: RemoveBillingAddressFromOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order

Returns: RemoveBillingAddressFromOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RemoveBillingAddressFromOrder($input: RemoveBillingAddressFromOrderInput!) {
  removeBillingAddressFromOrder(input: $input) {
    order {
      id
      number
      billing {
        address {
          address_line_1
          locality
        }
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ"
  }
}

removeCouponFromOrder#

Remove a previously applied coupon code from an order. The coupon's discount is taken out of the order totals.

Input: RemoveCouponFromOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
coupon
String!
RequiredThe coupon code to remove

Returns: RemoveCouponFromOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RemoveCouponFromOrder($input: RemoveCouponFromOrderInput!) {
  removeCouponFromOrder(input: $input) {
    order {
      id
      number
      coupons {
        code
        is_valid
      }
      total {
        amount
        formatted
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "coupon": "SUMMER10"
  }
}

removeCustomerFromOrder#

Detach the customer from an order, leaving the order without an associated customer.

Input: RemoveCustomerFromOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order

Returns: RemoveCustomerFromOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RemoveCustomerFromOrder($input: RemoveCustomerFromOrderInput!) {
  removeCustomerFromOrder(input: $input) {
    order {
      id
      number
      customer {
        contact {
          id
        }
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ"
  }
}

removeItemsFromOrder#

Remove items from an order by their item IDs. The order totals are recalculated and the updated order is returned.

Input: RemoveItemsFromOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order to remove the items from
ids
[String]!
RequiredIDs of the order items to remove

Returns: RemoveItemsFromOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RemoveItemsFromOrder($input: RemoveItemsFromOrderInput!) {
  removeItemsFromOrder(input: $input) {
    order {
      id
      number
      items {
        id
        sku
        quantity
      }
      total {
        amount
        formatted
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "ids": ["itm_7GhQ2w", "itm_9KpR4t"]
  }
}

removePhoneNumberFromOrder#

Remove the phone number from an order. Returns the updated order.

Input: RemovePhoneNumberFromOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order to remove the phone number from

Returns: RemovePhoneNumberFromOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RemovePhoneNumberFromOrder($input: RemovePhoneNumberFromOrderInput!) {
  removePhoneNumberFromOrder(input: $input) {
    order {
      id
      number
      phone_number {
        country_code
        number
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ"
  }
}

setCountryCodeForOrder#

Set the destination country code on an order. The country is used when calculating prices, VAT and shipping for the order.

Input: SetCountryCodeForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
country_code
String!
RequiredISO 3166-1 alpha-2 country code (e.g. NL, DE)

Returns: SetCountryCodeForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetCountryCodeForOrder($input: SetCountryCodeForOrderInput!) {
  setCountryCodeForOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      is_including_vat
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "country_code": "NL"
  }
}

setCountryCodeOnOrder#

Set the destination country code on an order, used when calculating prices, VAT and shipping. Takes the same input as setCountryCodeForOrder and returns the same payload.

Input: SetCountryCodeOnOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
country_code
String!
RequiredISO 3166-1 alpha-2 country code (e.g. NL, DE)

Returns: SetCountryCodeForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetCountryCodeOnOrder($input: SetCountryCodeOnOrderInput!) {
  setCountryCodeOnOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      is_including_vat
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "country_code": "BE"
  }
}

setDutiesForOrder#

Set the import duties on an order, for example when shipping cross-border. The duties are reflected in the order totals.

Input: SetDutiesForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
duties
Money!
RequiredThe duties to charge — pass the amount in cents

Returns: SetDutiesForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetDutiesForOrder($input: SetDutiesForOrderInput!) {
  setDutiesForOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "duties": 1250
  }
}

setExpirationDateForOrder#

Set the expiration date of an order. After this date an unconfirmed order expires and its claimed stock is released.

Input: SetExpirationDateForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
expires_at
Int64!
RequiredExpiration date — Unix timestamp in milliseconds

Returns: SetExpirationDateForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetExpirationDateForOrder($input: SetExpirationDateForOrderInput!) {
  setExpirationDateForOrder(input: $input) {
    order {
      id
      number
      status
      expires_at
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "expires_at": 1767225600000
  }
}

setItemQuantityForOrder#

Set the quantity of a SKU on an order to an absolute value — items are added or removed until the order holds exactly the requested quantity.

Input: SetItemQuantityForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
sku
String!
RequiredThe SKU to set the quantity for
quantity
Int!
RequiredThe new absolute quantity for this SKU

Returns: SetItemQuantityForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetItemQuantityForOrder($input: SetItemQuantityForOrderInput!) {
  setItemQuantityForOrder(input: $input) {
    order {
      id
      number
      total
      items {
        ids
        sku
        quantity
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "sku": "SKU-8471",
    "quantity": 3
  }
}

setItemQuantityOnOrder#

Set the quantity of a SKU on an order to an absolute value. Equivalent to setItemQuantityForOrder — both return the same payload.

Input: SetItemQuantityOnOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
sku
String!
RequiredThe SKU to set the quantity for
quantity
Int!
RequiredThe new absolute quantity for this SKU

Returns: SetItemQuantityForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetItemQuantityOnOrder($input: SetItemQuantityOnOrderInput!) {
  setItemQuantityOnOrder(input: $input) {
    order {
      id
      number
      total
      items {
        ids
        sku
        quantity
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "sku": "SKU-8471",
    "quantity": 3
  }
}

setNoteForOrder#

Set a note on an order, for example special instructions from the customer or an internal remark. The note replaces any previously set note.

Input: SetNoteForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
note
String!
RequiredThe note to set on the order

Returns: SetNoteForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetNoteForOrder($input: SetNoteForOrderInput!) {
  setNoteForOrder(input: $input) {
    order {
      id
      number
      status
      customer {
        notes
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "note": "Please deliver at the back entrance."
  }
}

setOrderTag#

Set a tag on an order by selecting an option for a tag key, for example to label the order for filtering and workflow automation.

Input: SetOrderTagInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
key_id
String!
RequiredThe ID of the tag key
option_id
String!
RequiredThe ID of the tag option to set for the key

Returns: SetOrderTagPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetOrderTag($input: SetOrderTagInput!) {
  setOrderTag(input: $input) {
    order {
      id
      number
      status
      tags {
        id
        label
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "key_id": "tgk_3pWm5J",
    "option_id": "tgo_8qZr1N"
  }
}

setPositionForOrder#

Set the warehouse position for an order, for example the packing station or storage slot where the order is being prepared. Returns the updated order.

Input: SetPositionForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
position
String!
RequiredThe position to assign to the order (e.g. a packing station or storage slot)

Returns: SetPositionForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetPositionForOrder($input: SetPositionForOrderInput!) {
  setPositionForOrder(input: $input) {
    order {
      id
      number
      position
      status
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "position": "A-12-03"
  }
}

setReferenceForOrder#

Set a custom reference on an order, for example the customer's purchase order number. Returns the updated order.

Input: SetReferenceForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
reference
String!
RequiredThe reference to set on the order (e.g. a purchase order number)

Returns: SetReferenceForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetReferenceForOrder($input: SetReferenceForOrderInput!) {
  setReferenceForOrder(input: $input) {
    order {
      id
      number
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "reference": "PO-2026-00481"
  }
}

updateAdjustmentForOrder#

Update an existing adjustment (discount or surcharge) on an order — change its description, amount, or whether the amount is a percentage.

Input: UpdateAdjustmentForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
discount_id
String!
RequiredThe ID of the adjustment to update
description
String!
RequiredDescription shown on the order and invoice
is_percentage
Boolean!
RequiredWhether the amount is a percentage instead of a fixed amount
amount
Float!
RequiredThe adjustment amount — a percentage when is_percentage is true, otherwise a fixed amount in cents

Returns: UpdateAdjustmentForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation UpdateAdjustment($input: UpdateAdjustmentForOrderInput!) {
  updateAdjustmentForOrder(input: $input) {
    order {
      id
      number
      total
      adjustments {
        id
        description
        amount
        is_percentage
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_2kV8mT",
    "discount_id": "adj_5qN7xB",
    "description": "Loyalty discount",
    "is_percentage": true,
    "amount": 10
  }
}

updateFeeForOrder#

Update an existing fee on an order — change its description or amount. The fee is identified by its fee_id and the change is reflected in the order totals.

Input: UpdateFeeForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order carrying the fee
fee_id
String!
RequiredThe ID of the fee to update
description
String!
RequiredHuman-readable description shown on the order
amount
Money!
RequiredNew fee amount in cents

Returns: UpdateFeeForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation UpdateFeeForOrder($input: UpdateFeeForOrderInput!) {
  updateFeeForOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      fees {
        payment {
          id
          description
          total {
            amount
            formatted
          }
        }
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "fee_id": "fee_6Jd4rN",
    "description": "Payment provider surcharge",
    "amount": 295
  }
}

Order items#

addAdjustmentsToOrderItem#

Add one or more adjustments — fixed or percentage-based surcharges or discounts — to a single order item, or to several items at once via item_ids.

Input: AddAdjustmentsToOrderItemInput!

NameTypeRequiredDescription
item_id
String
OptionalThe ID of the order item to adjust
item_ids
[String]
OptionalIDs of multiple order items to adjust — alternative to `item_id`
adjustments
[AdjustmentInput]
OptionalThe adjustments to add to the item(s)

Returns: AddAdjustmentsToOrderItemPayload!

NameTypeRequiredDescription
item
CollectionItem
OptionalThe updated order item (when a single `item_id` was passed)
items
[CollectionItem]!
RequiredAll updated order items

Example#

mutation AddAdjustmentsToOrderItem($input: AddAdjustmentsToOrderItemInput!) {
  addAdjustmentsToOrderItem(input: $input) {
    items {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
        original_amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "item_id": "itm_7GhQ2w",
    "adjustments": [
      {
        "description": "Damaged packaging discount",
        "is_percentage": false,
        "is_discount": true,
        "amount": 500
      }
    ]
  }
}

addAdjustmentsToOrderItems#

Add adjustments to multiple order items in a single call, where each adjustment targets a specific item via its own item_id.

Input: AddAdjustmentsToOrderItemsInput!

NameTypeRequiredDescription
adjustments
[NewOrderItemAdjustmentInput]
OptionalPer-item adjustments to apply

Returns: AddAdjustmentsToOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation AddAdjustmentsToOrderItems($input: AddAdjustmentsToOrderItemsInput!) {
  addAdjustmentsToOrderItems(input: $input) {
    items {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
        original_amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "adjustments": [
      {
        "item_id": "itm_7GhQ2w",
        "description": "Bundle discount",
        "amount": 15,
        "is_percentage": true,
        "is_discount": true
      },
      {
        "item_id": "itm_9KpR4t",
        "description": "Bundle discount",
        "amount": 15,
        "is_percentage": true,
        "is_discount": true
      }
    ]
  }
}

addContraFeesToOrderItems#

Add contra fees to specific order items — offsetting fee lines that counter an existing fee on those items. Each contra fee references the fee it offsets via contra_fee_id.

Input: AddContraFeesToOrderItemsInput!

NameTypeRequiredDescription
item_ids
[String]!
RequiredIDs of the order items to add the contra fees to
fees
[ContraFeeInput]!
RequiredThe contra fees to add

Returns: AddContraFeesToOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation AddContraFeesToOrderItems($input: AddContraFeesToOrderItemsInput!) {
  addContraFeesToOrderItems(input: $input) {
    items {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "item_ids": ["itm_7GhQ2w", "itm_9KpR4t"],
    "fees": [
      {
        "description": "Handling fee compensation",
        "type": "HANDLING_FEE",
        "amount": 250,
        "contra_fee_id": "fee_3JvB6n"
      }
    ]
  }
}

addDiscountsToOrderItem#

Add one or more discounts — percentage or fixed monetary value — to a single order item.

Input: AddDiscountsToOrderItemInput!

NameTypeRequiredDescription
item_id
String!
RequiredThe ID of the order item
discounts
[DiscountInput]!
RequiredThe discounts to add to the item

Returns: AddAdjustmentsToOrderItemPayload!

NameTypeRequiredDescription
item
CollectionItem
OptionalThe updated order item
items
[CollectionItem]!
RequiredAll updated order items

Example#

mutation AddDiscountsToOrderItem($input: AddDiscountsToOrderItemInput!) {
  addDiscountsToOrderItem(input: $input) {
    item {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
        original_amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "item_id": "itm_7GhQ2w",
    "discounts": [
      {
        "description": "Display model discount",
        "type": "PERCENTAGE",
        "value": 20
      }
    ]
  }
}

addFeesToOrderItems#

Add one or more fees — payment, handling or shipping — to specific order items. The fee amounts are reflected in the pricing of the affected items.

Input: AddFeesToOrderItemsInput!

NameTypeRequiredDescription
item_ids
[String]!
RequiredIDs of the order items to add the fees to
fees
[FeeInput]!
RequiredThe fees to add to the items

Returns: AddFeesToOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation AddFeesToOrderItems($input: AddFeesToOrderItemsInput!) {
  addFeesToOrderItems(input: $input) {
    items {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "item_ids": ["itm_7GhQ2w", "itm_9KpR4t"],
    "fees": [
      {
        "description": "Gift wrapping",
        "type": "HANDLING_FEE",
        "amount": 350
      }
    ]
  }
}

addPickUpPointToOrderItem#

Set a carrier pick-up point (service point) as the delivery location for a single order item, identified by its service point ID.

Input: AddPickUpPointToOrderItemInput!

NameTypeRequiredDescription
item_id
String!
RequiredThe ID of the order item
spid
String!
RequiredThe service point ID of the pick-up point (as returned by the shipping method's pickup points)

Returns: AddPickUpPointToOrderItemPayload!

NameTypeRequiredDescription
item
CollectionItem
OptionalThe updated order item

Example#

mutation AddPickUpPointToOrderItem($input: AddPickUpPointToOrderItemInput!) {
  addPickUpPointToOrderItem(input: $input) {
    item {
      id
      sku
      label
      status
      delivery {
        id
        type
        expected_at
      }
    }
  }
}
{
  "input": {
    "item_id": "itm_7hRp2W",
    "spid": "8004-NL-100310"
  }
}

addPickUpPointToOrderItems#

Set carrier pick-up points (service points) as the delivery location for multiple order items in a single call. Each item is paired with its own service point ID.

Input: AddPickUpPointToOrderItemsInput!

NameTypeRequiredDescription
items
[AddPickUpPointToOrderItemInput]!
RequiredThe items to assign a pick-up point to

Returns: AddPickUpPointToOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation AddPickUpPointToOrderItems($input: AddPickUpPointToOrderItemsInput!) {
  addPickUpPointToOrderItems(input: $input) {
    items {
      id
      sku
      label
      status
      delivery {
        id
        type
        expected_at
      }
    }
  }
}
{
  "input": {
    "items": [
      { "item_id": "itm_7hRp2W", "spid": "8004-NL-100310" },
      { "item_id": "itm_9kTn4B", "spid": "8004-NL-100310" }
    ]
  }
}

addShippingAddressToOrderItems#

Set a shipping destination for multiple order items in a single call. Each item can reference an existing address, supply a new address, or point to a service point or location, allowing different items of one order to ship to different destinations.

Input: AddShippingAddressToOrderItemsInput!

NameTypeRequiredDescription
items
[AddShippingAddressToOrderItemInput]!
RequiredThe items to assign a shipping destination to

Returns: AddShippingAddressToOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation AddShippingAddressToOrderItems($input: AddShippingAddressToOrderItemsInput!) {
  addShippingAddressToOrderItems(input: $input) {
    items {
      id
      sku
      label
      status
      delivery {
        id
        type
        expected_at
      }
    }
  }
}
{
  "input": {
    "items": [
      {
        "item_id": "itm_7hRp2W",
        "type": "ADDRESS",
        "address": {
          "address_line_1": "Keizersgracht 313",
          "locality": "Amsterdam",
          "postal_code": "1016 EE",
          "country_code": "NL"
        }
      },
      {
        "item_id": "itm_9kTn4B",
        "type": "ADDRESS",
        "address_id": "adr_5FgH1s"
      }
    ]
  }
}

allocateOrderItems#

Allocate specific order items to available inventory so they are reserved for fulfilment.

Input: AllocateOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[String]!
RequiredIDs of the order items to allocate

Returns: AllocateOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AllocateOrderItems($input: AllocateOrderItemsInput!) {
  allocateOrderItems(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": ["itm_2mQx9k", "itm_7bTn4w"]
  }
}

approveOrderItems#

Approve specific order items so they are released for further processing and fulfilment.

Input: ApproveOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[String]!
RequiredIDs of the order items to approve

Returns: ApproveOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation ApproveOrderItems($input: ApproveOrderItemsInput!) {
  approveOrderItems(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": ["itm_2mQx9k", "itm_7bTn4w"]
  }
}

assignInventoryToOrderItems#

Assign specific inventory to order items by linking each item to a warehouse location, reserving that stock for the order.

Input: AssignInventoryToOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[InventoryItemInput]!
RequiredThe order items and the inventory location to assign each of them to

Returns: AssignInventoryToOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation AssignInventoryToOrderItems($input: AssignInventoryToOrderItemsInput!) {
  assignInventoryToOrderItems(input: $input) {
    items {
      id
      sku
      status
      is_allocated
      is_reserved
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": [
      { "id": "itm_2mQx9k", "location_id": "loc_5wPn8d" },
      { "id": "itm_7bTn4w", "location_id": "loc_5wPn8d" }
    ]
  }
}

cancelCollectOrderItems#

Cancel the collect step for specific order items, so items previously marked for collection are no longer collected.

Input: CancelCollectOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[String]!
RequiredIDs of the order items to cancel collection for

Returns: CancelCollectOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation CancelCollectOrderItems($input: CancelCollectOrderItemsInput!) {
  cancelCollectOrderItems(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": ["itm_2mQx9k", "itm_7bTn4w"]
  }
}

collectOrderItems#

Mark one or more order items as collected, for example when a customer picks up their items at a store or collection point. Returns the updated order.

Input: CollectOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order whose items are collected
items
[String]!
RequiredIDs of the order items to mark as collected

Returns: CollectOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation CollectOrderItems($input: CollectOrderItemsInput!) {
  collectOrderItems(input: $input) {
    order {
      id
      number
      state
      total
      items {
        id
        sku
        quantity
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_7Ks9mL",
    "items": ["oitm_2xQ8pR", "oitm_5nT3wY"]
  }
}

deallocateOrderItems#

Release the warehouse stock allocations for specific order items, making the claimed stock available again without cancelling the items.

Input: DeallocateOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[String]!
RequiredIDs of the order items to deallocate

Returns: DeallocateOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation DeallocateOrderItems($input: DeallocateOrderItemsInput!) {
  deallocateOrderItems(input: $input) {
    order {
      id
      number
      status
      items {
        ids
        sku
        quantity
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_5tGh7Y",
    "items": ["itm_8jRw3D", "itm_2qLc7V"]
  }
}

finishOrderItems#

Mark one or more order items as finished, completing their fulfilment flow. Returns the updated order.

Input: FinishOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[String]!
RequiredIDs of the order items to finish

Returns: FinishOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation FinishOrderItems($input: FinishOrderItemsInput!) {
  finishOrderItems(input: $input) {
    order {
      id
      number
      status
      items {
        ids
        sku
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "items": ["itm_5wRt8Kd", "itm_2pLm6Vx"]
  }
}

haltOrderItems#

Halt the fulfilment of one or more order items, pausing them in the processing flow. Returns the updated order.

Input: HaltOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[HaltedItemInput]!
RequiredThe order items to halt

Returns: HaltOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation HaltOrderItems($input: HaltOrderItemsInput!) {
  haltOrderItems(input: $input) {
    order {
      id
      number
      status
      items {
        ids
        sku
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "items": [
      { "item_id": "itm_5wRt8Kd" },
      { "item_id": "itm_2pLm6Vx" }
    ]
  }
}

invoiceItems#

Invoice one or more order items. Pass an existing invoice_id to add the items to that invoice, or omit it to create a new invoice for the items.

Input: InvoiceItemsInput!

NameTypeRequiredDescription
invoice_id
String
OptionalID of an existing invoice to add the items to — omit to create a new invoice
items
[String]!
RequiredIDs of the order items to invoice

Returns: InvoiceItemsPayload

NameTypeRequiredDescription
invoice
Invoice
OptionalThe created invoice

Example#

mutation InvoiceItems($input: InvoiceItemsInput!) {
  invoiceItems(input: $input) {
    invoice {
      id
      number
      total {
        amount
        formatted
      }
      pdf_url
      created_at
    }
  }
}
{
  "input": {
    "items": ["itm_5wRt8Kd", "itm_2pLm6Vx"]
  }
}

receiveOrderItems#

Register order items as received into the warehouse, recording the location and position where each item is stored. Typically used for inbound purchase or return flows.

Input: ReceiveOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[ReceiveItemInput]!
RequiredThe items to receive

Returns: ReceiveOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation ReceiveOrderItems($input: ReceiveOrderItemsInput!) {
  receiveOrderItems(input: $input) {
    order {
      id
      number
      status
      items {
        id
        sku
        position
        is_received
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "items": [
      {
        "item_id": "itm_4Tp8vLc",
        "position": "A-01-03",
        "location_id": "loc_2Jd6bJw"
      }
    ]
  }
}

releaseOrderItems#

Release one or more order items for fulfilment, making them available for the next step in the warehouse process.

Input: ReleaseOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[ReleaseOrderItem]!
RequiredThe items to release

Returns: ReleaseOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation ReleaseOrderItems($input: ReleaseOrderItemsInput!) {
  releaseOrderItems(input: $input) {
    order {
      id
      number
      status
      items {
        id
        sku
        is_released
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "items": [
      { "item_id": "itm_4Tp8vLc" },
      { "item_id": "itm_8Rq1sZn" }
    ]
  }
}

removeAdjustmentsFromOrderItem#

Remove one or more adjustments — surcharges or discounts — from an order item. Pass a single item_id or multiple item_ids to remove the adjustments from several items at once.

Input: RemoveAdjustmentsFromOrderItemInput!

NameTypeRequiredDescription
adjustment_ids
[String]!
RequiredThe IDs of the adjustments to remove
item_id
String
OptionalThe ID of a single order item to remove the adjustments from
item_ids
[String]
OptionalThe IDs of multiple order items to remove the adjustments from

Returns: RemoveAdjustmentsFromOrderItemPayload!

NameTypeRequiredDescription
item
CollectionItem
OptionalThe updated order item (when a single `item_id` was passed)
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation RemoveAdjustmentsFromOrderItem($input: RemoveAdjustmentsFromOrderItemInput!) {
  removeAdjustmentsFromOrderItem(input: $input) {
    items {
      id
      sku
      label
      status
      is_cancelled
      updated_at
    }
  }
}
{
  "input": {
    "item_id": "itm_4Tp8vLc",
    "adjustment_ids": ["adj_6Yc3wHt"]
  }
}

removeDiscountsFromOrderItem#

Remove one or more previously applied discounts from a single order item by discount ID.

Input: RemoveDiscountsFromOrderItemInput!

NameTypeRequiredDescription
item_id
String!
RequiredThe ID of the order item
discount_ids
[String]!
RequiredIDs of the discounts to remove from the item

Returns: RemoveAdjustmentsFromOrderItemPayload!

NameTypeRequiredDescription
item
CollectionItem
OptionalThe updated order item
items
[CollectionItem]!
RequiredAll updated order items

Example#

mutation RemoveDiscountsFromOrderItem($input: RemoveDiscountsFromOrderItemInput!) {
  removeDiscountsFromOrderItem(input: $input) {
    item {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
        original_amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "item_id": "itm_7GhQ2w",
    "discount_ids": ["dsc_3JkP8n"]
  }
}

restockOrderItems#

Put returned or cancelled order items back into stock, optionally at a specific warehouse location and position.

Input: RestockOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[RestockItemInput]!
RequiredThe order items to restock

Returns: RestockOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RestockOrderItems($input: RestockOrderItemsInput!) {
  restockOrderItems(input: $input) {
    order {
      id
      number
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "items": [
      {
        "item_id": "itm_4Fq8Zw",
        "location_id": "loc_2Bn7Kd",
        "position": "A-03-2"
      }
    ]
  }
}

returnOrderItems#

Register order items as returned, optionally recording the return reason and a track & trace code for the return shipment.

Input: ReturnOrderItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
items
[ReturnItemInput]!
RequiredThe order items to return

Returns: ReturnOrderItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation ReturnOrderItems($input: ReturnOrderItemsInput!) {
  returnOrderItems(input: $input) {
    order {
      id
      number
      status
      total {
        amount
        formatted
      }
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "items": [
      {
        "item_id": "itm_4Fq8Zw",
        "reason": "SIZE_TOO_SMALL",
        "track_trace_code": "3STBJK987654321"
      }
    ]
  }
}

setExpectedAtForOrderItems#

Set the expected delivery date for specific order items, for example when an item is backordered and will only become available at a known future date.

Input: SetExpectedAtForOrderItemsInput!

NameTypeRequiredDescription
expected_at
Int64!
RequiredExpected delivery date — Unix timestamp in milliseconds
items
[String]!
RequiredIDs of the order items to update

Returns: SetExpectedAtForOrderItemsPayload

NameTypeRequiredDescription
items
[CollectionItem!]!
RequiredItems whose expected delivery date was updated

Example#

mutation SetExpectedAtForOrderItems($input: SetExpectedAtForOrderItemsInput!) {
  setExpectedAtForOrderItems(input: $input) {
    items {
      id
      sku
      label
      is_expected
      status
      updated_at
    }
  }
}
{
  "input": {
    "expected_at": 1767225600000,
    "items": ["itm_7hRp2W", "itm_9kTn4B"]
  }
}

setMetaDataForOrderItems#

Attach free-form metadata to specific order items, for example personalisation details or references from an external system.

Input: SetMetaDataForOrderItemsInput!

NameTypeRequiredDescription
meta_data
JsonObject!
RequiredArbitrary metadata to store on the items
items
[String]!
RequiredIDs of the order items to attach the metadata to

Returns: SetMetaDataForOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation SetMetaDataForOrderItems($input: SetMetaDataForOrderItemsInput!) {
  setMetaDataForOrderItems(input: $input) {
    items {
      id
      sku
      label
      meta_data
      updated_at
    }
  }
}
{
  "input": {
    "meta_data": {
      "engraving": "Happy Birthday!",
      "external_reference": "EXT-20431"
    },
    "items": ["itm_7hRp2W", "itm_9kTn4B"]
  }
}

setOriginForOrderItems#

Set the origin for one or more order items — either a warehouse location or an address the items should ship from. Returns the updated items.

Input: SetOriginForOrderItemsInput!

NameTypeRequiredDescription
item_ids
[String]!
RequiredIDs of the order items to set the origin for
location_id
String
OptionalThe ID of the warehouse location the items should ship from
address_id
String
OptionalThe ID of the address the items should ship from

Returns: SetOriginForOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation SetOriginForOrderItems($input: SetOriginForOrderItemsInput!) {
  setOriginForOrderItems(input: $input) {
    items {
      id
      sku
      label
      status
    }
  }
}
{
  "input": {
    "item_ids": ["itm_7GhQ2w", "itm_9KpR4t"],
    "location_id": "loc_5nT3wY"
  }
}

setPositionForOrderItems#

Set the warehouse position for one or more order items, for example the bin or shelf where the items are stored while awaiting fulfilment. Returns the updated items.

Input: SetPositionForOrderItemsInput!

NameTypeRequiredDescription
item_ids
[String]!
RequiredIDs of the order items to set the position for
position
String!
RequiredThe position to assign to the items (e.g. a bin or shelf code)

Returns: SetPositionForOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation SetPositionForOrderItems($input: SetPositionForOrderItemsInput!) {
  setPositionForOrderItems(input: $input) {
    items {
      id
      sku
      label
      position
    }
  }
}
{
  "input": {
    "item_ids": ["itm_7GhQ2w", "itm_9KpR4t"],
    "position": "B-04-17"
  }
}

setPriceForOrderItems#

Override the price of one or more order items, for example to apply a negotiated price. Each entry targets a specific item and sets its new price in cents. Returns the updated items.

Input: SetPriceForOrderItemsInput!

NameTypeRequiredDescription
items
[OrderItemPricingUpdateInput]!
RequiredPrice updates, one per order item

Returns: SetPriceForOrderItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated order items

Example#

mutation SetPriceForOrderItems($input: SetPriceForOrderItemsInput!) {
  setPriceForOrderItems(input: $input) {
    items {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
        original_amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "items": [
      {
        "item_id": "itm_7GhQ2w",
        "price": 1999,
        "original_price": 2499
      },
      {
        "item_id": "itm_9KpR4t",
        "price": 4500
      }
    ]
  }
}

setShipAtForOrderItems#

Set the planned ship date for one or more order items, scheduling when they should leave the warehouse.

Input: SetShipAtForOrderItemsInput!

NameTypeRequiredDescription
ship_at
Int64!
RequiredPlanned ship date as Unix ms timestamp
items
[String]!
RequiredIDs of the order items to schedule

Returns: SetShipAtForOrderItemsPayload

NameTypeRequiredDescription
items
[CollectionItem!]!
RequiredItems whose suggested ship date was updated

Example#

mutation SetShipAt($input: SetShipAtForOrderItemsInput!) {
  setShipAtForOrderItems(input: $input) {
    items {
      id
      sku
      label
      status
      is_picked
      is_collected
    }
  }
}
{
  "input": {
    "ship_at": 1783036800000,
    "items": ["itm_7hK3mR", "itm_2wQ9xN"]
  }
}

startItemCancellationProcess#

Start the cancellation process for one or more items on an order. Optionally pass a contra_id per item to link the cancellation to a contra (compensating) item.

Input: StartItemCancellationProcessInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order the items belong to
location_id
String
OptionalLocation where the cancellation is processed
items
[ItemCancellationProcessInput]!
RequiredThe items to cancel

Returns: StartItemCancellationProcessPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe items with the cancellation process started

Example#

mutation StartItemCancellation($input: StartItemCancellationProcessInput!) {
  startItemCancellationProcess(input: $input) {
    items {
      id
      sku
      label
      status
      is_cancelled
    }
  }
}
{
  "input": {
    "order_id": "ord_2kV8mT",
    "items": [
      { "id": "itm_7hK3mR" },
      { "id": "itm_2wQ9xN" }
    ]
  }
}

updateAdjustmentForOrderItem#

Update an existing adjustment — a fixed or percentage-based surcharge or discount — on an order item, or on several items at once via item_ids. The adjustment is identified by its discount_id.

Input: UpdateAdjustmentForOrderItemInput!

NameTypeRequiredDescription
item_id
String
OptionalThe ID of the order item carrying the adjustment
item_ids
[String]
OptionalIDs of multiple order items to update — alternative to `item_id`
discount_id
String!
RequiredThe ID of the adjustment to update
description
String!
RequiredHuman-readable description shown on the item
is_percentage
Boolean!
RequiredWhether `amount` is a percentage instead of a fixed value
amount
Float!
RequiredAdjustment value — a percentage when `is_percentage` is true, otherwise a fixed amount in cents

Returns: UpdateAdjustmentForOrderItemPayload!

NameTypeRequiredDescription
item
CollectionItem
OptionalThe updated order item (when a single `item_id` was passed)
items
[CollectionItem]!
RequiredAll updated order items

Example#

mutation UpdateAdjustmentForOrderItem($input: UpdateAdjustmentForOrderItemInput!) {
  updateAdjustmentForOrderItem(input: $input) {
    items {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
        original_amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "item_id": "itm_7GhQ2w",
    "discount_id": "dsc_4Tn8pW",
    "description": "Damaged packaging discount",
    "is_percentage": false,
    "amount": 750
  }
}

updateDiscountOnOrderItem#

Update an existing discount on an order item — change its description, type or value. The discount is identified by its discount_id.

Input: UpdateDiscountOnOrderItemInput!

NameTypeRequiredDescription
item_id
String!
RequiredThe ID of the order item carrying the discount
discount_id
String!
RequiredThe ID of the discount to update
description
String!
RequiredHuman-readable description shown on the item
type
DiscountType!
RequiredHow the discount value is interpreted
value
Float!
RequiredDiscount value — a percentage when `type` is PERCENTAGE, otherwise a fixed amount in cents

Returns: UpdateAdjustmentForOrderItemPayload!

NameTypeRequiredDescription
item
CollectionItem
OptionalThe updated order item
items
[CollectionItem]!
RequiredAll updated order items

Example#

mutation UpdateDiscountOnOrderItem($input: UpdateDiscountOnOrderItemInput!) {
  updateDiscountOnOrderItem(input: $input) {
    item {
      id
      sku
      label
      pricing {
        amount {
          amount
          formatted
        }
        original_amount {
          amount
          formatted
        }
      }
    }
  }
}
{
  "input": {
    "item_id": "itm_7GhQ2w",
    "discount_id": "dsc_4Tn8pW",
    "description": "Loyalty discount",
    "type": "PERCENTAGE",
    "value": 10
  }
}

Organisation#

createOrganisation#

Create a new organisation.

Input: OrganisationInput!

NameTypeRequiredDescription
name
String!
RequiredOrganisation name
type
OrganisationType!
RequiredOrganisation type
is_guest
Boolean!
RequiredWhether this is a guest organisation
administration
AdministrationInput!
RequiredAdministration / accounting details
audience_id
String
OptionalAudience to associate this organisation with
addressing
AddressingInput
OptionalBilling and shipping addresses
phone_numbers
PhoneNumberInput
OptionalPhone numbers
registration
RegistrationInput
OptionalVAT / company registration
channel_id
String
OptionalChannel association
price_list_id
String
OptionalPrice list

Returns: Organisation

NameTypeRequiredDescription
id
ID!
RequiredThe ID
name
String
OptionalOrganisation name
type
OrganisationType!
RequiredType of organisation
number
String
OptionalOrganisation number

Example#

mutation CreateOrg($input: OrganisationInput!) {
  createOrganisation(input: $input) {
    organisation {
      id
      name
      type
      number
    }
  }
}
{
  "input": {
    "name": "Bakkerij De Vries B.V.",
    "type": "DEFAULT",
    "is_guest": false,
    "administration": {
      "language_code": "nl",
      "currency": "EUR"
    }
  }
}

updateOrganisation#

Update an existing organisation.

Input: UpdateOrganisationInput!

NameTypeRequiredDescription
id
ID!
RequiredThe organisation ID
name
String!
RequiredOrganisation name
type
OrganisationType!
RequiredOrganisation type
administration
AdministrationInput!
RequiredAdministration / accounting details
avatar
String
OptionalAvatar URL
addressing
AddressingInput
OptionalBilling and shipping addresses
registration
RegistrationInput
OptionalVAT / company registration

Returns: Organisation

NameTypeRequiredDescription
id
ID!
RequiredThe ID
name
String
OptionalOrganisation name
type
OrganisationType!
RequiredType of organisation
number
String
OptionalOrganisation number

Example#

mutation UpdateOrg($input: UpdateOrganisationInput!) {
  updateOrganisation(input: $input) {
    organisation {
      id
      name
    }
  }
}
{
  "input": {
    "id": "b2c3d4e5-f6a7-8901-2345-67890abcdef0",
    "name": "Bakkerij De Vries & Zonen B.V.",
    "type": "DEFAULT",
    "administration": {
      "language_code": "nl",
      "currency": "EUR"
    }
  }
}

addBillingAddressToOrganisation#

Attach a billing address to an organisation — either by referencing an existing address with address_id or by supplying a new address.

Input: AddBillingAddressToOrganisationInput!

NameTypeRequiredDescription
organisation_id
String!
RequiredThe ID of the organisation
address_id
String
OptionalID of an existing address to use as the billing address
address
AddressInput
OptionalA new billing address — alternative to `address_id`

Returns: AddBillingAddressToOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation AddBillingAddressToOrganisation($input: AddBillingAddressToOrganisationInput!) {
  addBillingAddressToOrganisation(input: $input) {
    organisation {
      id
      name
      billing_address {
        primary {
          address_line_1
          locality
          postal_code
          country_code
        }
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_4TnV8b",
    "address": {
      "address_line_1": "Keizersgracht 313",
      "locality": "Amsterdam",
      "postal_code": "1016 EE",
      "country_code": "NL",
      "organisation": "Acme B.V."
    }
  }
}

addContactToAccountOrganisation#

Add a contact to a shared (account) organisation with a specific role, referencing the contact by ID or by email address.

Input: AddContactToAccountOrganisationInput!

NameTypeRequiredDescription
organisation_id
ID
OptionalThe ID of the shared organisation
contact
SharedContactInput!
RequiredThe contact to add and the role to assign

Returns: AddContactToAccountOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation AddContactToAccountOrganisation($input: AddContactToAccountOrganisationInput!) {
  addContactToAccountOrganisation(input: $input) {
    organisation {
      id
      name
      type
      shared_contacts {
        role
        contact {
          id
          email
        }
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_4TnV8b",
    "contact": {
      "email": "jane@acme.com",
      "role": "USER"
    }
  }
}

addOrganisationToAccount#

Add an organisation to the signed-in customer account, including its administration details, addressing, phone numbers and registration.

Input: AddOrganisationToAccountInput!

NameTypeRequiredDescription
id
String
OptionalOptional client-supplied identifier for the organisation
name
String!
RequiredName of the organisation
administration
AdministrationInput!
RequiredAdministration details of the organisation
addressing
AddressingInput
OptionalBilling and shipping addresses
phone_numbers
[PhoneNumberInput]
OptionalPhone numbers of the organisation
registration
RegistrationInput
OptionalCompany registration details (e.g. VAT)
coc_number
String
OptionalChamber of Commerce number

Returns: AddOrganisationToAccountPayload!

NameTypeRequiredDescription
account
Account
OptionalThe updated customer account

Example#

mutation AddOrganisationToAccount($input: AddOrganisationToAccountInput!) {
  addOrganisationToAccount(input: $input) {
    account {
      email
      given_name
      family_name
      organisations {
        id
        name
        coc_number
      }
    }
  }
}
{
  "input": {
    "name": "Acme B.V.",
    "administration": {
      "email": "billing@acme.example"
    },
    "coc_number": "12345678",
    "phone_numbers": [
      {
        "country_code": "NL",
        "number": "+31201234567"
      }
    ]
  }
}

addOrganisationToContact#

Link an existing organisation to a contact, optionally marking it as the contact's primary organisation.

Input: AddOrganisationToContactInput!

NameTypeRequiredDescription
contact_id
String!
RequiredThe ID of the contact
organisation_id
String!
RequiredThe ID of the organisation to link
is_primary
Boolean!
RequiredWhether this is the contact's primary organisation

Returns: AddOrganisationToContactPayload!

NameTypeRequiredDescription
contact
Contact
OptionalThe updated contact

Example#

mutation AddOrganisationToContact($input: AddOrganisationToContactInput!) {
  addOrganisationToContact(input: $input) {
    contact {
      id
      email
      name
      organisations {
        primary {
          id
          name
        }
      }
    }
  }
}
{
  "input": {
    "contact_id": "cnt_6XdF9s",
    "organisation_id": "org_3PzL8v",
    "is_primary": true
  }
}

addPhoneNumberToOrganisation#

Add a phone number to an organisation, either by referencing an existing phone number by ID or by supplying a new one. The number can be marked as the organisation's primary phone number.

Input: AddPhoneNumberToOrganisationInput!

NameTypeRequiredDescription
organisation_id
String!
RequiredThe ID of the organisation
phone_number_id
String
OptionalThe ID of an existing phone number to attach
phone_number
PhoneNumberInput
OptionalA new phone number to attach — used when no `phone_number_id` is given
is_primary
Boolean!
RequiredWhether this is the organisation's primary phone number

Returns: AddPhoneNumberToOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation AddPhoneNumberToOrganisation($input: AddPhoneNumberToOrganisationInput!) {
  addPhoneNumberToOrganisation(input: $input) {
    organisation {
      id
      name
      phone_numbers {
        primary {
          id
          country_code
          number
        }
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_3PzL8v",
    "phone_number": {
      "country_code": "NL",
      "number": "+31201234567"
    },
    "is_primary": true
  }
}

addShippingAddressToOrganisation#

Attach a shipping address to an organisation — either by referencing an existing address with address_id or by supplying a new address.

Input: AddShippingAddressToOrganisationInput!

NameTypeRequiredDescription
organisation_id
String!
RequiredThe ID of the organisation
address_id
String
OptionalID of an existing address to use as the shipping address
address
AddressInput
OptionalA new shipping address — alternative to `address_id`

Returns: AddShippingAddressToOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation AddShippingAddressToOrganisation($input: AddShippingAddressToOrganisationInput!) {
  addShippingAddressToOrganisation(input: $input) {
    organisation {
      id
      name
      shipping_address {
        primary {
          address_line_1
          locality
          postal_code
          country_code
        }
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_4TnV8b",
    "address": {
      "address_line_1": "Keizersgracht 313",
      "locality": "Amsterdam",
      "postal_code": "1016 EE",
      "country_code": "NL",
      "organisation": "Acme B.V."
    }
  }
}

addVatNumberToOrganisation#

Add a VAT registration (country code + number) to an organisation. The registration is stored on the organisation and can subsequently be verified.

Input: VatNumberInput!

NameTypeRequiredDescription
organisation_id
String!
RequiredThe ID of the organisation to add the VAT number to
registration
RegistrationInput!
RequiredThe VAT registration details

Returns: AddVatNumberToOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation AddVatNumber($input: VatNumberInput!) {
  addVatNumberToOrganisation(input: $input) {
    organisation {
      id
      name
      registration {
        id
        country_code
        number
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_8kT2mQ",
    "registration": {
      "country_code": "NL",
      "number": "NL123456789B01"
    }
  }
}

blockOrganisation#

Block an organisation. The organisation is flagged as blocked (is_blocked) on the organisation record.

Input: BlockOrganisationInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the organisation to block

Returns: BlockOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation BlockOrganisation($input: BlockOrganisationInput!) {
  blockOrganisation(input: $input) {
    organisation {
      id
      name
      is_blocked
    }
  }
}
{
  "input": {
    "id": "org_8kT2mQ"
  }
}

logInAsOrganisation#

Log the current session in on behalf of an organisation. Returns a new token scoped to that organisation, to be used for subsequent requests.

Input: LogInAsOrganisationInput!

NameTypeRequiredDescription
organisation_id
String!
RequiredThe ID of the organisation to log in as

Returns: LogInAsOrganisationPayload!

NameTypeRequiredDescription
token
String!
RequiredThe new session token scoped to the organisation
expires_at
Int64!
RequiredWhen the token expires — Unix timestamp in milliseconds

Example#

mutation LogInAsOrganisation($input: LogInAsOrganisationInput!) {
  logInAsOrganisation(input: $input) {
    token
    expires_at
  }
}
{
  "input": {
    "organisation_id": "org_7pQm3Xw"
  }
}

logOutAsOrganisation#

End the current organisation session started with logInAsOrganisation. Returns a new token that is no longer scoped to the organisation.

No input.

Returns: LogOutAsOrganisationPayload!

NameTypeRequiredDescription
token
String!
RequiredThe new session token, no longer scoped to the organisation
expires_at
Int64!
RequiredWhen the token expires — Unix timestamp in milliseconds

Example#

mutation LogOutAsOrganisation {
  logOutAsOrganisation {
    token
    expires_at
  }
}

markOrganisationAsDefault#

Mark one of the account's organisations as the default organisation, for example the one used by default for new orders. Returns the updated account.

Input: MarkOrganisationAsDefaultInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the organisation to mark as default

Returns: MarkOrganisationAsDefaultPayload!

NameTypeRequiredDescription
account
Account
OptionalThe updated account

Example#

mutation MarkOrganisationAsDefault($input: MarkOrganisationAsDefaultInput!) {
  markOrganisationAsDefault(input: $input) {
    account {
      email
      given_name
      family_name
      organisations {
        id
        name
        type
      }
    }
  }
}
{
  "input": {
    "id": "org_4Yt8vN"
  }
}

removeContactFromAccountOrganisation#

Remove a contact from a shared (account) organisation, revoking that contact's membership.

Input: RemoveContactFromAccountOrganisationInput!

NameTypeRequiredDescription
organisation_id
ID
OptionalThe ID of the shared organisation
contact_id
ID!
RequiredThe ID of the contact to remove

Returns: RemoveContactFromAccountOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation RemoveContactFromAccountOrganisation($input: RemoveContactFromAccountOrganisationInput!) {
  removeContactFromAccountOrganisation(input: $input) {
    organisation {
      id
      name
      type
      shared_contacts {
        role
        contact {
          id
          email
        }
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_4TnV8b",
    "contact_id": "cnt_5RwK9d"
  }
}

removeContactFromOrganisation#

Remove a contact from an organisation, referencing both the organisation and the contact by ID.

Input: RemoveContactFromOrganisationInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the organisation
contact_id
ID!
RequiredThe ID of the contact to remove

Returns: RemoveContactFromOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation RemoveContactFromOrganisation($input: RemoveContactFromOrganisationInput!) {
  removeContactFromOrganisation(input: $input) {
    organisation {
      id
      name
      type
      updated_at
    }
  }
}
{
  "input": {
    "id": "org_4TnV8b",
    "contact_id": "cnt_5RwK9d"
  }
}

removeOrganisationFromAccount#

Remove an organisation from the signed-in customer account. Returns the updated account.

Input: RemoveOrganisationFromAccountInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the organisation to remove from the account

Returns: RemoveOrganisationFromAccountPayload!

NameTypeRequiredDescription
account
Account
OptionalThe updated customer account

Example#

mutation RemoveOrganisationFromAccount($input: RemoveOrganisationFromAccountInput!) {
  removeOrganisationFromAccount(input: $input) {
    account {
      email
      given_name
      family_name
      organisations {
        id
        name
      }
    }
  }
}
{
  "input": {
    "id": "org_4WnB6c"
  }
}

removeRegistrationFromOrganisation#

Remove a company registration (such as a VAT registration) from an organisation. Returns the updated organisation.

Input: RemoveRegistrationFromOrganisationInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the registration to remove

Returns: RemoveRegistrationFromOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation RemoveRegistrationFromOrganisation($input: RemoveRegistrationFromOrganisationInput!) {
  removeRegistrationFromOrganisation(input: $input) {
    organisation {
      id
      name
      coc_number
      registration {
        id
        number
        country_code
      }
    }
  }
}
{
  "input": {
    "id": "reg_2VtY5n"
  }
}

setOrganisationTag#

Set a tag on an organisation by picking an option for a tagging key, for example to segment organisations by industry or account tier. Returns the updated organisation.

Input: SetOrganisationTagInput!

NameTypeRequiredDescription
organisation_id
String!
RequiredThe ID of the organisation to tag
key_id
String!
RequiredThe ID of the tagging key
option_id
String!
RequiredThe ID of the option to set for the tagging key

Returns: SetOrganisationTagPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation SetOrganisationTag($input: SetOrganisationTagInput!) {
  setOrganisationTag(input: $input) {
    organisation {
      id
      name
      tags {
        id
        label
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_8kT2mQ",
    "key_id": "key_3Fp7Lx",
    "option_id": "opt_9RwB5n"
  }
}

unblockOrganisation#

Unblock a previously blocked organisation, allowing it to place orders again.

Input: UnblockOrganisationInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the organisation to unblock

Returns: UnblockOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe unblocked organisation

Example#

mutation UnblockOrganisation($input: UnblockOrganisationInput!) {
  unblockOrganisation(input: $input) {
    organisation {
      id
      name
      number
      is_blocked
    }
  }
}
{
  "input": {
    "id": "org_6tY3nH"
  }
}

updateContactRoleInOrganisation#

Change the role of a contact within a shared organisation — for example promote a user to admin.

Input: UpdateContactRoleInOrganisationInput!

NameTypeRequiredDescription
organisation_id
ID
OptionalThe ID of the organisation the contact belongs to
contact_id
ID!
RequiredThe ID of the contact whose role is changed
role
SharedContactRole!
RequiredThe new role of the contact within the organisation

Returns: UpdateContactRoleInOrganisationPayload!

NameTypeRequiredDescription
organisation
Organisation
OptionalThe updated organisation

Example#

mutation UpdateContactRoleInOrganisation($input: UpdateContactRoleInOrganisationInput!) {
  updateContactRoleInOrganisation(input: $input) {
    organisation {
      id
      name
      shared_contacts {
        role
        contact {
          id
          email
        }
      }
    }
  }
}
{
  "input": {
    "organisation_id": "org_9Bw3nT",
    "contact_id": "cnt_2Fj8kL",
    "role": "ADMIN"
  }
}

updateOrganisationOnAccount#

Update an organisation linked to the signed-in customer account — its name, administration details, addressing, phone numbers and registration.

Input: UpdateOrganisationOnAccountInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the organisation to update
name
String!
RequiredName of the organisation
administration
AdministrationInput!
RequiredAdministration details of the organisation
addressing
AddressingInput
OptionalBilling and shipping addresses
phone_numbers
[PhoneNumberInput]
OptionalPhone numbers of the organisation
registration
RegistrationInput
OptionalCompany registration details (e.g. VAT)
coc_number
String
OptionalChamber of Commerce number

Returns: UpdateOrganisationOnAccountPayload!

NameTypeRequiredDescription
account
Account
OptionalThe updated customer account

Example#

mutation UpdateOrganisationOnAccount($input: UpdateOrganisationOnAccountInput!) {
  updateOrganisationOnAccount(input: $input) {
    account {
      email
      given_name
      family_name
      organisations {
        id
        name
        coc_number
      }
    }
  }
}
{
  "input": {
    "id": "org_9Bw3nT",
    "name": "Acme B.V.",
    "administration": {
      "email": "billing@acme.example"
    },
    "coc_number": "12345678",
    "phone_numbers": [
      {
        "country_code": "NL",
        "number": "+31201234567"
      }
    ]
  }
}

Payment#

executePayment#

Execute a payment for an order.

Input: ExecutePaymentInput!

NameTypeRequiredDescription
payment_id
String!
RequiredThe ID of the payment to execute (obtained from `addPaymentMethodToOrder`)
NameTypeRequiredDescription
payment
Payment
OptionalThe payment record

Example#

mutation Pay($input: ExecutePaymentInput!) {
  executePayment(input: $input) {
    payment {
      id
      status
      amount
      return_url
    }
  }
}
{
  "input": {
    "payment_id": "d4e5f6a7-b8c9-0123-4567-890abcdef012"
  }
}

createRefund#

Create a refund for an order payment.

Input: CreateRefundInput!

NameTypeRequiredDescription
payment_id
String!
RequiredThe payment ID to refund
amount
Int!
RequiredAmount to refund (in cents)
NameTypeRequiredDescription
payment
Payment
OptionalThe refund payment record

Example#

mutation Refund($input: CreateRefundInput!) {
  createRefund(input: $input) {
    payment {
      id
      amount
      status
      is_refund
    }
  }
}
{
  "input": {
    "payment_id": "d4e5f6a7-b8c9-0123-4567-890abcdef012",
    "amount": 2499
  }
}

Customer authentication#

logInCustomer#

Authenticate a customer with email and password. Returns a short-lived session token.

Input: LogInCustomerInput!

NameTypeRequiredDescription
email
String!
RequiredCustomer's email address
password
String!
RequiredCustomer's password
NameTypeRequiredDescription
token
String!
RequiredSession token (Bearer)
expires_at
Int64!
RequiredExpiry as Unix milliseconds

Example#

mutation LogIn($input: LogInCustomerInput!) {
  logInCustomer(input: $input) {
    token
    expires_at
  }
}
{
  "input": {
    "email": "jan@example.nl",
    "password": "s3cur3Pa$$w0rd"
  }
}

registerCustomer#

Register a new customer account. Returns a session token on success.

Input: RegisterCustomerInput!

NameTypeRequiredDescription
email
String!
RequiredEmail address
password
String!
RequiredPassword
given_name
String
OptionalFirst name
additional_name
String
OptionalMiddle name
family_name
String
OptionalLast name
NameTypeRequiredDescription
token
String!
RequiredSession token (Bearer)
expires_at
Int64!
RequiredExpiry as Unix milliseconds

Example#

mutation Register($input: RegisterCustomerInput!) {
  registerCustomer(input: $input) {
    token
    expires_at
  }
}
{
  "input": {
    "email": "jan@example.nl",
    "password": "s3cur3Pa$$w0rd",
    "given_name": "Jan",
    "family_name": "de Vries"
  }
}

requestCustomerPasswordReset#

Send a password reset email to a customer.

Input: RequestCustomerPasswordResetInput!

NameTypeRequiredDescription
email
String!
RequiredThe customer's email address
NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the reset email was sent

Example#

mutation RequestReset($input: RequestCustomerPasswordResetInput!) {
  requestCustomerPasswordReset(input: $input) {
    is_successful
  }
}
{
  "input": {
    "email": "jan@example.nl"
  }
}

resetCustomerPassword#

Reset a customer password using a token received by email.

Input: ResetCustomerPasswordInput!

NameTypeRequiredDescription
token
String!
RequiredThe reset token from the email link
password
String!
RequiredThe new password
NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the password was reset

Example#

mutation ResetPassword($input: ResetCustomerPasswordInput!) {
  resetCustomerPassword(input: $input) {
    is_successful
  }
}
{
  "input": {
    "token": "rst_a1b2c3d4e5f6789012345678901234567890abcd",
    "password": "newS3cur3Pa$$w0rd"
  }
}

Send a new verification link to an unverified customer.

Input: RequestCustomerVerificationLinkInput!

NameTypeRequiredDescription
email
String!
RequiredThe customer's email address
NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the link was sent

Example#

mutation RequestVerification($input: RequestCustomerVerificationLinkInput!) {
  requestCustomerVerificationLink(input: $input) {
    is_successful
  }
}
{
  "input": {
    "email": "jan@example.nl"
  }
}

verifyCustomer#

Verify a customer account using a token received by email.

Input: VerifyCustomerInput!

NameTypeRequiredDescription
token
String!
RequiredThe verification token from the email link
NameTypeRequiredDescription
token
String!
RequiredSession token (Bearer)
expires_at
Int64!
RequiredExpiry as Unix milliseconds

Example#

mutation Verify($input: VerifyCustomerInput!) {
  verifyCustomer(input: $input) {
    token
    expires_at
  }
}
{
  "input": {
    "token": "vfy_b2c3d4e5f6a7890123456789012345678901bcde"
  }
}

Account#

updateAccount#

Update the authenticated account's profile.

Input: UpdateAccountInput!

NameTypeRequiredDescription
given_name
String
OptionalFirst name
additional_name
String
OptionalMiddle name
family_name
String
OptionalLast name

Returns: Account

NameTypeRequiredDescription
email
String!
RequiredEmail address
given_name
String!
RequiredFirst name
additional_name
String!
RequiredMiddle name
family_name
String!
RequiredLast name

Example#

mutation UpdateAccount($input: UpdateAccountInput!) {
  updateAccount(input: $input) {
    account {
      given_name
      family_name
      email
    }
  }
}
{
  "input": {
    "given_name": "Jan",
    "family_name": "de Vries"
  }
}

reorder#

Reorder a previous order. Adds all items from the referenced order to a new cart.

Input: ReorderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order to reorder

Returns: Cart

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the cart
number
String!
RequiredCart number
total
Money!
RequiredTotal value
subtotal
Money!
RequiredTotal before discounts

Example#

mutation Reorder($input: ReorderInput!) {
  reorder(input: $input) {
    cart {
      id
      items {
        sku
        quantity
      }
    }
  }
}
{
  "input": {
    "order_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a"
  }
}

setPasswordForAccount#

Change the password of the signed-in account by providing the current password and the new one. Returns the account.

Input: SetPasswordForAccountInput!

NameTypeRequiredDescription
password
String!
RequiredThe current password of the account
new_password
String!
RequiredThe new password to set

Returns: SetPasswordForAccountPayload!

NameTypeRequiredDescription
account
Account
OptionalThe updated account

Example#

mutation SetPasswordForAccount($input: SetPasswordForAccountInput!) {
  setPasswordForAccount(input: $input) {
    account {
      email
      given_name
      family_name
      updated_at
    }
  }
}
{
  "input": {
    "password": "current-password-123",
    "new_password": "n3w-Str0ng-p4ssword!"
  }
}

Contact#

createContact#

Create a new contact.

Input: ContactInput!

NameTypeRequiredDescription
email
String!
RequiredEmail address
is_guest
Boolean!
RequiredWhether this is a guest contact (no password)
given_name
String!
RequiredFirst name
family_name
String!
RequiredLast name
additional_name
String
OptionalMiddle name
password
String
OptionalPassword (when not a guest)
locale
String
OptionalLocale (e.g. nl_NL)
channel_id
String
OptionalChannel to associate this contact with
price_list_id
String
OptionalPrice list to attach

Returns: Contact

NameTypeRequiredDescription
id
ID!
RequiredThe ID
email
String!
RequiredEmail address
given_name
String!
RequiredFirst name
family_name
String
OptionalLast name

Example#

mutation CreateContact($input: ContactInput!) {
  createContact(input: $input) {
    contact {
      id
      email
      given_name
      family_name
    }
  }
}
{
  "input": {
    "email": "lisa@example.nl",
    "is_guest": true,
    "given_name": "Lisa",
    "family_name": "Jansen"
  }
}

updateContact#

Update an existing contact.

Input: UpdateContactInput!

NameTypeRequiredDescription
id
String!
RequiredThe ID of the contact
given_name
String
OptionalFirst name
additional_name
String
OptionalMiddle name
family_name
String
OptionalLast name
locale
String
OptionalLocale

Returns: Contact

NameTypeRequiredDescription
id
ID!
RequiredThe ID
email
String!
RequiredEmail address
given_name
String!
RequiredFirst name
family_name
String
OptionalLast name

Example#

mutation UpdateContact($input: UpdateContactInput!) {
  updateContact(input: $input) {
    contact {
      id
      given_name
      family_name
    }
  }
}
{
  "input": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "given_name": "Lisa",
    "family_name": "Jansen-de Boer"
  }
}

addBillingAddressToContact#

Add a billing address to a contact.

Input: AddBillingAddressToContactInput!

NameTypeRequiredDescription
contact_id
String!
RequiredThe ID of the contact
address
AddressInput!
RequiredThe billing address

Returns: Contact

NameTypeRequiredDescription
id
ID!
RequiredThe ID
email
String!
RequiredEmail address
given_name
String!
RequiredFirst name
family_name
String
OptionalLast name

Example#

mutation AddBillingAddress($input: AddBillingAddressToContactInput!) {
  addBillingAddressToContact(input: $input) {
    contact {
      id
      addressing {
        billing {
          primary {
            address_line_1
            locality
            country_code
          }
        }
      }
    }
  }
}
{
  "input": {
    "contact_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "address": {
      "address_line_1": "Keizersgracht 313",
      "locality": "Amsterdam",
      "postal_code": "1016 EE",
      "country_code": "NL"
    }
  }
}

addShippingAddressToContact#

Add a shipping address to a contact.

Input: AddShippingAddressToContactInput!

NameTypeRequiredDescription
contact_id
String!
RequiredThe ID of the contact
address
AddressInput!
RequiredThe shipping address

Returns: Contact

NameTypeRequiredDescription
id
ID!
RequiredThe ID
email
String!
RequiredEmail address
given_name
String!
RequiredFirst name
family_name
String
OptionalLast name

Example#

mutation AddShippingAddress($input: AddShippingAddressToContactInput!) {
  addShippingAddressToContact(input: $input) {
    contact {
      id
      addressing {
        shipping {
          primary {
            address_line_1
            locality
            country_code
          }
        }
      }
    }
  }
}
{
  "input": {
    "contact_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "address": {
      "address_line_1": "Herengracht 401",
      "locality": "Amsterdam",
      "postal_code": "1017 BP",
      "country_code": "NL"
    }
  }
}

addConsentsToContact#

Register one or more consents (for example marketing opt-ins) on a contact by consent ID.

Input: AddConsentsToContactInput!

NameTypeRequiredDescription
contact_id
String!
RequiredThe ID of the contact
consent_ids
[ID]!
RequiredIDs of the consents to register on the contact

Returns: AddConsentsToContactPayload!

NameTypeRequiredDescription
contact
Contact
OptionalThe updated contact

Example#

mutation AddConsentsToContact($input: AddConsentsToContactInput!) {
  addConsentsToContact(input: $input) {
    contact {
      id
      email
      name
      consents {
        is_consented
      }
    }
  }
}
{
  "input": {
    "contact_id": "cnt_5RwK9d",
    "consent_ids": ["cns_2NpX7e", "cns_8QjM3a"]
  }
}

addPhoneNumberToContact#

Add a phone number to a contact, either by referencing an existing phone number by ID or by supplying a new one. The number can be marked as the contact's primary phone number.

Input: AddPhoneNumberToContactInput!

NameTypeRequiredDescription
contact_id
String!
RequiredThe ID of the contact
phone_number_id
String
OptionalThe ID of an existing phone number to attach
phone_number
PhoneNumberInput
OptionalA new phone number to attach — used when no `phone_number_id` is given
is_primary
Boolean!
RequiredWhether this is the contact's primary phone number

Returns: AddPhoneNumberToContactPayload!

NameTypeRequiredDescription
contact
Contact
OptionalThe updated contact

Example#

mutation AddPhoneNumberToContact($input: AddPhoneNumberToContactInput!) {
  addPhoneNumberToContact(input: $input) {
    contact {
      id
      name
      phone_numbers {
        primary {
          id
          country_code
          number
        }
      }
    }
  }
}
{
  "input": {
    "contact_id": "cnt_6XdF9s",
    "phone_number": {
      "country_code": "NL",
      "number": "+31612345678"
    },
    "is_primary": true
  }
}

blockContact#

Block a contact. The contact is flagged as blocked (is_blocked) on the contact record.

Input: BlockContactInput!

NameTypeRequiredDescription
contact_id
ID!
RequiredThe ID of the contact to block

Returns: BlockContactPayload!

NameTypeRequiredDescription
contact
Contact
OptionalThe updated contact

Example#

mutation BlockContact($input: BlockContactInput!) {
  blockContact(input: $input) {
    contact {
      id
      email
      name
      is_blocked
    }
  }
}
{
  "input": {
    "contact_id": "cnt_x9k2mQ"
  }
}

removeConsentsFromContact#

Withdraw one or more consents (for example marketing opt-ins) from a contact by consent ID.

Input: RemoveConsentsFromContactInput!

NameTypeRequiredDescription
contact_id
String!
RequiredThe ID of the contact
consent_ids
[ID]!
RequiredIDs of the consents to remove from the contact

Returns: RemoveConsentsFromContactPayload!

NameTypeRequiredDescription
contact
Contact
OptionalThe updated contact

Example#

mutation RemoveConsentsFromContact($input: RemoveConsentsFromContactInput!) {
  removeConsentsFromContact(input: $input) {
    contact {
      id
      email
      name
      consents {
        is_consented
      }
    }
  }
}
{
  "input": {
    "contact_id": "cnt_5RwK9d",
    "consent_ids": ["cns_2NpX7e", "cns_8QjM3a"]
  }
}

setContactTag#

Tag a contact by setting an option for a tag key on the contact. Tags let you segment contacts by predefined keys and their options.

Input: SetContactTagInput!

NameTypeRequiredDescription
contact_id
String!
RequiredThe ID of the contact to tag
key_id
String!
RequiredThe ID of the tag key
option_id
String!
RequiredThe ID of the option to set for the tag key

Returns: SetContactTagPayload!

NameTypeRequiredDescription
contact
Contact
OptionalThe updated contact

Example#

mutation SetContactTag($input: SetContactTagInput!) {
  setContactTag(input: $input) {
    contact {
      id
      name
      email
      updated_at
    }
  }
}
{
  "input": {
    "contact_id": "cnt_8kQw2p",
    "key_id": "key_4rTn8b",
    "option_id": "opt_7hFp3W"
  }
}

unblockContact#

Unblock a previously blocked contact, allowing them to place orders and sign in again.

Input: UnblockContactInput!

NameTypeRequiredDescription
contact_id
ID!
RequiredThe ID of the contact to unblock

Returns: UnblockContactPayload!

NameTypeRequiredDescription
contact
Contact
OptionalThe unblocked contact

Example#

mutation UnblockContact($input: UnblockContactInput!) {
  unblockContact(input: $input) {
    contact {
      id
      email
      name
      is_blocked
    }
  }
}
{
  "input": {
    "contact_id": "cnt_9wR4kM"
  }
}

Wishlist#

createWishlist#

Create a new wishlist. Returns a token used in subsequent wishlist operations.

Input: CreateWishlistInput!

NameTypeRequiredDescription
label
String!
RequiredDisplay label for the wishlist
expires_at
Int64!
RequiredUnix-ms timestamp at which the wishlist expires

Returns: Wishlist

NameTypeRequiredDescription
label
String!
RequiredLabel
token
String!
RequiredToken identifier
items
[WishlistItem!]!
RequiredItems on the wishlist
expires_at
DateTime!
RequiredExpiration date

Example#

mutation CreateWishlist($input: CreateWishlistInput!) {
  createWishlist(input: $input) {
    wishlist {
      token
      label
    }
  }
}
{
  "input": {
    "label": "Mijn verlanglijst",
    "expires_at": 1893456000000
  }
}

addItemToWishlist#

Add a product to a wishlist by SKU.

Input: AddItemToWishlistInput!

NameTypeRequiredDescription
token
String!
RequiredThe wishlist token
sku
String!
RequiredThe SKU to add
quantity
Int!
RequiredQuantity to add
expires_at
Int64!
RequiredUnix-ms timestamp at which the wishlist expires
meta_data
JsonObject
OptionalOptional metadata

Returns: Wishlist

NameTypeRequiredDescription
label
String!
RequiredLabel
token
String!
RequiredToken identifier
items
[WishlistItem!]!
RequiredItems on the wishlist
expires_at
DateTime!
RequiredExpiration date

Example#

mutation AddToWishlist($input: AddItemToWishlistInput!) {
  addItemToWishlist(input: $input) {
    wishlist {
      token
      items {
        sku
        added_at
      }
    }
  }
}
{
  "input": {
    "token": "c9d0e1f2-a3b4-5678-90ab-cdef01234567",
    "sku": "BLK-HOODIE-M",
    "quantity": 1,
    "expires_at": 1893456000000
  }
}

removeItemFromWishlist#

Remove a product from a wishlist.

Input: RemoveItemFromWishlistInput!

NameTypeRequiredDescription
token
String!
RequiredThe wishlist token
sku
String!
RequiredThe SKU to remove

Returns: Wishlist

NameTypeRequiredDescription
label
String!
RequiredLabel
token
String!
RequiredToken identifier
items
[WishlistItem!]!
RequiredItems on the wishlist
expires_at
DateTime!
RequiredExpiration date

Example#

mutation RemoveFromWishlist($input: RemoveItemFromWishlistInput!) {
  removeItemFromWishlist(input: $input) {
    wishlist {
      token
      items {
        sku
      }
    }
  }
}
{
  "input": {
    "token": "c9d0e1f2-a3b4-5678-90ab-cdef01234567",
    "sku": "BLK-HOODIE-M"
  }
}

updateWishlist#

Update the label of a wishlist.

Input: UpdateWishlistInput!

NameTypeRequiredDescription
token
String!
RequiredThe wishlist token
label
String!
RequiredNew label
expires_at
Int64!
RequiredUnix-ms timestamp at which the wishlist expires

Returns: Wishlist

NameTypeRequiredDescription
label
String!
RequiredLabel
token
String!
RequiredToken identifier
items
[WishlistItem!]!
RequiredItems on the wishlist
expires_at
DateTime!
RequiredExpiration date

Example#

mutation UpdateWishlist($input: UpdateWishlistInput!) {
  updateWishlist(input: $input) {
    wishlist {
      token
      label
    }
  }
}
{
  "input": {
    "token": "c9d0e1f2-a3b4-5678-90ab-cdef01234567",
    "label": "Verlanglijst voor Sint",
    "expires_at": 1893456000000
  }
}

deleteWishlist#

Delete a wishlist.

Input: DeleteWishlistInput!

NameTypeRequiredDescription
token
String!
RequiredThe wishlist token

Returns: Wishlist

NameTypeRequiredDescription
label
String!
RequiredLabel
token
String!
RequiredToken identifier
items
[WishlistItem!]!
RequiredItems on the wishlist
expires_at
DateTime!
RequiredExpiration date

Example#

mutation DeleteWishlist($input: DeleteWishlistInput!) {
  deleteWishlist(input: $input) {
    wishlist {
      token
    }
  }
}
{
  "input": {
    "token": "c9d0e1f2-a3b4-5678-90ab-cdef01234567"
  }
}

Product viewing history#

createProductViewingHistory#

Create a new product viewing history list. Returns a token used in subsequent calls.

Input: CreateProductViewingHistoryInput!

NameTypeRequiredDescription
label
String!
RequiredDisplay label for the history list
expires_at
Int64!
RequiredUnix-ms timestamp at which the history list expires
NameTypeRequiredDescription
productViewingHistory
ProductViewingHistory!
RequiredThe created history list

Example#

mutation CreateHistory($input: CreateProductViewingHistoryInput!) {
  createProductViewingHistory(input: $input) {
    productViewingHistory {
      token
    }
  }
}
{
  "input": {
    "label": "Recently viewed",
    "expires_at": 1893456000000
  }
}

addItemToProductViewingHistory#

Record a product view.

Input: AddItemToProductViewingHistoryInput!

NameTypeRequiredDescription
token
String!
RequiredThe viewing history token
sku
String!
RequiredThe SKU that was viewed
expires_at
Int64!
RequiredUnix-ms timestamp at which the history list expires
meta_data
JsonObject
OptionalOptional metadata (e.g. referrer, campaign)
NameTypeRequiredDescription
productViewingHistory
ProductViewingHistory!
RequiredThe updated history list

Example#

mutation RecordView($input: AddItemToProductViewingHistoryInput!) {
  addItemToProductViewingHistory(input: $input) {
    productViewingHistory {
      token
      items {
        sku
        viewed_at
      }
    }
  }
}
{
  "input": {
    "token": "b8c9d0e1-f2a3-4567-890a-bcdef0123456",
    "sku": "BLK-HOODIE-M",
    "expires_at": 1893456000000
  }
}

deleteProductViewingHistory#

Delete a product viewing history, identified by its token. Use this to clear the list of recently viewed products for a visitor.

Input: DeleteProductViewingHistoryInput!

NameTypeRequiredDescription
token
String!
RequiredThe token of the product viewing history to delete

Returns: DeleteProductViewingHistoryPayload!

NameTypeRequiredDescription
success
Boolean!
RequiredWhether the viewing history was deleted successfully

Example#

mutation DeleteProductViewingHistory($input: DeleteProductViewingHistoryInput!) {
  deleteProductViewingHistory(input: $input) {
    success
  }
}
{
  "input": {
    "token": "pvh_7dKw3nRq"
  }
}

updateProductViewingHistory#

Update a product viewing history's label and expiry date. The history is identified by the visitor token it was created with.

Input: UpdateProductViewingHistoryInput!

NameTypeRequiredDescription
token
String!
RequiredThe visitor token identifying the viewing history
label
String!
RequiredLabel for the viewing history (e.g. "recently-viewed")
expires_at
Int64!
RequiredNew expiry as a Unix timestamp in milliseconds

Returns: UpdateProductViewingHistoryPayload!

NameTypeRequiredDescription
productViewingHistory
ProductViewingHistory
OptionalThe updated viewing history

Example#

mutation UpdateProductViewingHistory($input: UpdateProductViewingHistoryInput!) {
  updateProductViewingHistory(input: $input) {
    productViewingHistory {
      token
      label
      expires_at
      items {
        viewed_at
        product {
          sku
          label
        }
      }
    }
  }
}
{
  "input": {
    "token": "pvh_9f3kLm",
    "label": "recently-viewed",
    "expires_at": 1782950400000
  }
}

Products#

createItemPreferences#

Create stock preferences for one or more SKUs in a warehouse — minimum, optimal and maximum quantities, reorder points and backorder rules that drive replenishment.

Input: CreateItemPreferencesInput!

NameTypeRequiredDescription
preferences
[ItemPreferenceInput]!
RequiredStock preferences to create, one per SKU/warehouse combination

Returns: CreateItemPreferencesPayload!

NameTypeRequiredDescription
preferences
[StockPreference]!
RequiredThe created stock preferences

Example#

mutation CreateItemPreferences($input: CreateItemPreferencesInput!) {
  createItemPreferences(input: $input) {
    preferences {
      id
      sku
      minimum_quantity
      optimal_quantity
      maximum_quantity
      reorder_point
      is_backorder_allowed
    }
  }
}
{
  "input": {
    "preferences": [
      {
        "sku": "TSHIRT-BLK-M",
        "warehouse_id": "wrh_3Kf7dQ",
        "business_id": "bsn_4Tk8vN",
        "is_restricted_to_single_position": false,
        "minimum_quantity": 10,
        "optimal_quantity": 50,
        "maximum_quantity": 100,
        "reorder_point": 15,
        "is_backorder_allowed": true
      }
    ]
  }
}

createProduct#

Create a product identified by its SKU, including catalog information, pricing, suppliers, inventory options, order units and optional bundle composition.

Input: ProductInput!

NameTypeRequiredDescription
sku
String!
RequiredUnique SKU identifying the product
channel_id
String
OptionalRestrict the product to a specific channel
information
ProductInformationInput
OptionalCatalog information for the product
pricing
[ProductPricingInput]
OptionalSelling prices for the product
vat_rate
Float
OptionalVAT rate as a percentage (e.g. 21)
suppliers
[SupplierInput]
OptionalSuppliers of this product
options
ProductOptionsInput
OptionalInventory tracking requirements for the product
bundle
ProductBundleInput
OptionalBundle composition when the product is a bundle of other SKUs
units
[UnitInput]
OptionalOrder and receive units for the product

Returns: CreateProductPayload!

NameTypeRequiredDescription
product
Product!
RequiredThe created product

Example#

mutation CreateProduct($input: ProductInput!) {
  createProduct(input: $input) {
    product {
      sku
      label
      brand
      slug
      gtin
      created_at
    }
  }
}
{
  "input": {
    "sku": "TSHIRT-BLK-M",
    "information": {
      "label": "Black T-shirt (M)",
      "gtin": ["8712345678906"],
      "slug": "black-t-shirt-m",
      "mpn": "TS-BLK-M",
      "brand": "Acme",
      "images": ["https://cdn.example.com/tshirt-blk-m.jpg"],
      "filters": [{ "key": "color", "value": "black" }],
      "i18n": [
        {
          "locale": "nl-NL",
          "label": "Zwart T-shirt (M)",
          "slug": "zwart-t-shirt-m",
          "filters": [{ "key": "kleur", "value": "zwart" }]
        }
      ]
    },
    "pricing": [{ "amount": 2499 }],
    "vat_rate": 21
  }
}

deleteProduct#

Permanently delete a product by SKU, optionally removing its inventory records and any bundle items that reference it.

Input: DeleteProductInput!

NameTypeRequiredDescription
sku
String!
RequiredThe SKU of the product to delete
remove_inventory
Boolean!
RequiredWhether to also remove the inventory records for this SKU
remove_bundle_items
Boolean!
RequiredWhether to also remove bundle items that reference this product

Returns: DeleteProductPayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the product was deleted successfully

Example#

mutation DeleteProduct($input: DeleteProductInput!) {
  deleteProduct(input: $input) {
    is_successful
  }
}
{
  "input": {
    "sku": "TSHIRT-BLK-M",
    "remove_inventory": true,
    "remove_bundle_items": false
  }
}

removeItemPreferences#

Delete stock preferences — the replenishment rules (minimum, optimal and maximum quantities) for SKUs in a warehouse — by their IDs.

Input: RemoveItemPreferencesInput!

NameTypeRequiredDescription
preferences
[ID]!
RequiredIDs of the item preferences to remove

Returns: RemoveItemPreferencesPayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the preferences were removed successfully

Example#

mutation RemoveItemPreferences($input: RemoveItemPreferencesInput!) {
  removeItemPreferences(input: $input) {
    is_successful
  }
}
{
  "input": {
    "preferences": ["prf_3TnW8b", "prf_6JqX2d"]
  }
}

saveProduct#

Create or update a product identified by its SKU, including catalog information, pricing, suppliers, inventory options, order units and optional bundle composition.

Input: ProductInput!

NameTypeRequiredDescription
sku
String!
RequiredUnique SKU identifying the product
channel_id
String
OptionalRestrict the product to a specific channel
information
ProductInformationInput
OptionalCatalog information for the product
pricing
[ProductPricingInput]
OptionalSelling prices for the product
vat_rate
Float
OptionalVAT rate as a percentage (e.g. 21)
suppliers
[SupplierInput]
OptionalSuppliers of this product
options
ProductOptionsInput
OptionalInventory tracking requirements for the product
bundle
ProductBundleInput
OptionalBundle composition when the product is a bundle of other SKUs
units
[UnitInput]
OptionalOrder and receive units for the product

Returns: CreateProductPayload!

NameTypeRequiredDescription
product
Product!
RequiredThe saved product

Example#

mutation SaveProduct($input: ProductInput!) {
  saveProduct(input: $input) {
    product {
      sku
      label
      brand
      slug
      gtin
      updated_at
    }
  }
}
{
  "input": {
    "sku": "TSHIRT-BLK-M",
    "information": {
      "label": "Black T-shirt (M)",
      "gtin": ["8712345678906"],
      "slug": "black-t-shirt-m",
      "mpn": "TS-BLK-M",
      "brand": "Acme",
      "images": ["https://cdn.example.com/tshirt-blk-m.jpg"],
      "filters": [{ "key": "color", "value": "black" }],
      "i18n": [
        {
          "locale": "nl-NL",
          "label": "Zwart T-shirt (M)",
          "slug": "zwart-t-shirt-m",
          "filters": [{ "key": "kleur", "value": "zwart" }]
        }
      ]
    },
    "pricing": [{ "amount": 2499 }],
    "vat_rate": 21
  }
}

updateItemPreferences#

Update stock preferences for one or more items in a warehouse — minimum, optimal and maximum quantities, reorder point, backorder policy and position restrictions.

Input: UpdateItemPreferencesInput!

NameTypeRequiredDescription
preferences
[ItemPreferenceUpdateInput]!
RequiredThe stock preferences to update

Returns: UpdateItemPreferencesPayload!

NameTypeRequiredDescription
preferences
[StockPreference]!
RequiredThe updated stock preferences

Example#

mutation UpdateItemPreferences($input: UpdateItemPreferencesInput!) {
  updateItemPreferences(input: $input) {
    preferences {
      id
      sku
      minimum_quantity
      optimal_quantity
      maximum_quantity
      reorder_point
      is_backorder_allowed
      warehouse {
        id
        label
      }
    }
  }
}
{
  "input": {
    "preferences": [
      {
        "id": "stp_8Nc5tR",
        "warehouse_id": "wrh_2Km7dV",
        "is_restricted_to_single_position": false,
        "minimum_quantity": 10,
        "optimal_quantity": 50,
        "maximum_quantity": 100,
        "reorder_point": 15,
        "is_backorder_allowed": true
      }
    ]
  }
}

updateItemPrices#

Override the unit prices of specific items on an order. The new prices are reflected in the order totals.

Input: UpdateItemPricesInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
prices
[ItemPricesInput]!
RequiredThe new prices per order item

Returns: UpdateItemPricesPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation UpdateItemPrices($input: UpdateItemPricesInput!) {
  updateItemPrices(input: $input) {
    order {
      id
      number
      subtotal {
        amount
        formatted
      }
      total {
        amount
        formatted
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "prices": [
      {
        "item_id": "itm_7GhQ2w",
        "price": 2250
      }
    ]
  }
}

updateProduct#

Update an existing product identified by SKU — its information, pricing, VAT rate, tracking options, bundle composition and order units.

Input: ProductUpdateInput!

NameTypeRequiredDescription
sku
String!
RequiredSKU of the product to update
channel_id
String
OptionalChannel to scope the update to
information
ProductInformationInput
OptionalDescriptive product information
pricing
[ProductPricingInput]
OptionalPrices of the product
vat_rate
Float
OptionalVAT rate as a percentage (e.g. 21)
options
ProductOptionsInput
OptionalInventory tracking requirements
bundle
ProductBundleInput
OptionalBundle composition when the product is a bundle
units
[UnitInput]
OptionalOrder and receive units of the product

Returns: UpdateProductPayload!

NameTypeRequiredDescription
product
Product!
RequiredThe updated product

Example#

mutation UpdateProduct($input: ProductUpdateInput!) {
  updateProduct(input: $input) {
    product {
      sku
      label
      brand
      slug
      gtin
      images
      updated_at
    }
  }
}
{
  "input": {
    "sku": "TSHIRT-BLK-M",
    "information": {
      "label": "Classic T-shirt Black M",
      "gtin": ["8712345678901"],
      "slug": "classic-t-shirt-black-m",
      "mpn": "CT-BLK-M",
      "brand": "Acme Apparel",
      "images": ["https://cdn.example.com/tshirt-black-m.jpg"],
      "filters": [
        { "key": "color", "value": "black" },
        { "key": "size", "value": "M" }
      ],
      "i18n": [
        {
          "locale": "nl-NL",
          "label": "Klassiek T-shirt Zwart M",
          "slug": "klassiek-t-shirt-zwart-m",
          "filters": []
        }
      ]
    },
    "vat_rate": 21,
    "pricing": [
      { "amount": 2499 }
    ]
  }
}

Inventory#

markItemsAsAllocated#

Mark specific order items as allocated, recording that inventory has been reserved for them so they can move on to fulfilment. Returns the updated order.

Input: MarkItemsAsAllocatedInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order whose items are allocated
items
[AllocatedItemInput]!
RequiredThe order items to mark as allocated

Returns: MarkItemsAsAllocatedPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation MarkItemsAsAllocated($input: MarkItemsAsAllocatedInput!) {
  markItemsAsAllocated(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": [
      { "item_id": "itm_2mQx9k" },
      { "item_id": "itm_7bTn4w" }
    ]
  }
}

markItemsAsAvailable#

Mark order items as available at a specific inventory location, indicating stock is on hand for them at that location. Returns the updated order.

Input: MarkItemsAvailableInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order whose items are available
items
[AvailableItemInput]!
RequiredThe order items to mark as available

Returns: MarkItemsAvailablePayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation MarkItemsAsAvailable($input: MarkItemsAvailableInput!) {
  markItemsAsAvailable(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": [
      { "item_id": "itm_2mQx9k", "location_id": "loc_3Fh7jP" },
      { "item_id": "itm_7bTn4w", "location_id": "loc_3Fh7jP" }
    ]
  }
}

markItemsAsDeallocated#

Mark order items as deallocated, releasing the inventory that was reserved for them. Returns the updated order.

Input: MarkItemsAsDeallocatedInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order whose items are deallocated
items
[DeallocatedItemInput]!
RequiredThe order items to mark as deallocated

Returns: MarkItemsAsDeallocatedPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation MarkItemsAsDeallocated($input: MarkItemsAsDeallocatedInput!) {
  markItemsAsDeallocated(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": [
      { "item_id": "itm_2mQx9k" }
    ]
  }
}

markItemsAsMissing#

Report order items as missing during fulfilment, for example when stock cannot be found in the warehouse. Optionally reference a contra item that replaces the missing one. Returns the updated order.

Input: MarkItemsAsMissingInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order whose items are missing
items
[MissingItemInput]!
RequiredThe order items to mark as missing

Returns: MarkItemsAsMissingPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation MarkItemsAsMissing($input: MarkItemsAsMissingInput!) {
  markItemsAsMissing(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": [
      { "item_id": "itm_2mQx9k", "contra_item_id": "itm_8cVp5z" }
    ]
  }
}

markItemsAsUnavailable#

Mark order items as unavailable, indicating stock is not on hand to fulfil them. Returns the updated order.

Input: MarkItemsAsUnavailableInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order whose items are unavailable
items
[UnavailableItemInput]!
RequiredThe order items to mark as unavailable

Returns: MarkItemsAsUnavailablePayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation MarkItemsAsUnavailable($input: MarkItemsAsUnavailableInput!) {
  markItemsAsUnavailable(input: $input) {
    order {
      id
      number
      state
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_9GtRfK",
    "items": [
      { "item_id": "itm_2mQx9k" }
    ]
  }
}

removeInventoryFromProduct#

Remove inventory records from a product by their IDs. Returns the updated product.

Input: RemoveInventoryFromProductInput!

NameTypeRequiredDescription
sku
String!
RequiredThe SKU of the product to remove inventory from
ids
[String]!
RequiredIDs of the inventory records to remove

Returns: RemoveInventoryFromProductPayload!

NameTypeRequiredDescription
product
Product
OptionalThe updated product

Example#

mutation RemoveInventoryFromProduct($input: RemoveInventoryFromProductInput!) {
  removeInventoryFromProduct(input: $input) {
    product {
      sku
      label
      brand
      inventory {
        id
        quantity
      }
    }
  }
}
{
  "input": {
    "sku": "TSHIRT-BLUE-M",
    "ids": ["inv_7GhQ2w", "inv_9KpR4t"]
  }
}

Stock & supplies#

addOverage#

Register an overage on a supply — an item that was received but not expected, identified by SKU and the warehouse position where it was found.

Input: AddOverageInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the supply to register the overage on
item
AddOverageItemInput!
RequiredThe unexpected item that was received

Returns: AddOveragePayload!

NameTypeRequiredDescription
supply
Supply
OptionalThe updated supply

Example#

mutation AddOverage($input: AddOverageInput!) {
  addOverage(input: $input) {
    supply {
      id
      number
      status
      overages {
        sku
        position
      }
    }
  }
}
{
  "input": {
    "id": "sup_2WcN6j",
    "item": {
      "id": "ovg_4YtK1m",
      "sku": "TSHIRT-BLUE-M",
      "position": "A-03-12"
    }
  }
}

addSkuToSupplier#

Link a product SKU to a supplier, so the product can be purchased from that supplier.

Input: AddSkuToSupplierInput!

NameTypeRequiredDescription
sku
String!
RequiredThe SKU of the product to link
supplier_id
ID!
RequiredThe ID of the supplier to link the SKU to

Returns: AddSkuToSupplierPayload!

NameTypeRequiredDescription
product
Product!
RequiredThe linked product
supplier
Business!
RequiredThe supplier the SKU was linked to

Example#

mutation AddSkuToSupplier($input: AddSkuToSupplierInput!) {
  addSkuToSupplier(input: $input) {
    product {
      sku
      label
      brand
    }
    supplier {
      id
      name
      email
    }
  }
}
{
  "input": {
    "sku": "TSH-BLK-M",
    "supplier_id": "sup_6JvB3n"
  }
}

approveStockUpdateSubscription#

Confirm a stock update subscription (e.g. a back-in-stock notification) using the confirmation token that was sent to the subscriber.

Input: ApproveStockUpdateSubscriptionInput!

NameTypeRequiredDescription
token
String!
RequiredThe confirmation token sent to the subscriber

Returns: ApproveStockUpdateSubscriptionPayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the subscription was successfully approved

Example#

mutation ApproveStockUpdateSubscription($input: ApproveStockUpdateSubscriptionInput!) {
  approveStockUpdateSubscription(input: $input) {
    is_successful
  }
}
{
  "input": {
    "token": "sub_tok_4Zr8pWq1"
  }
}

createReorderNotificationSettings#

Configure scheduled reorder notifications for a warehouse. On the configured weekdays and times, the listed recipients receive an email with reorder advice for the selected businesses.

Input: CreateReorderNotificationSettingsInput!

NameTypeRequiredDescription
id
String
OptionalOptional ID to assign to the settings record
is_enabled
Boolean!
RequiredWhether the reorder notifications are active
warehouse_id
String!
RequiredThe ID of the warehouse to generate reorder advice for
business_ids
[String]!
RequiredIDs of the businesses (suppliers/vendors) to include in the advice
schedules
[ReorderNotificationScheduleInput]!
RequiredWhen the notification emails are sent
recipients
[ReorderNotificationRecipientInput]!
RequiredWho receives the notification emails

Returns: CreateReorderNotificationSettingsPayload!

NameTypeRequiredDescription
reorder_notification
ReorderNotification
OptionalThe created reorder notification settings

Example#

mutation CreateReorderNotificationSettings($input: CreateReorderNotificationSettingsInput!) {
  createReorderNotificationSettings(input: $input) {
    reorder_notification {
      id
      is_enabled
      warehouse {
        id
        label
      }
      schedules {
        week_day
        hour
        minute
        timezone
      }
      recipients {
        email_address
        name
      }
      created_at
    }
  }
}
{
  "input": {
    "is_enabled": true,
    "warehouse_id": "wh_x9k2mQ",
    "business_ids": ["bus_7hFp3W"],
    "schedules": [
      {
        "week_day": 1,
        "hour": 8,
        "minute": 0,
        "time_zone": "Europe/Amsterdam"
      }
    ],
    "recipients": [
      {
        "email": "purchasing@example.com",
        "name": "Purchasing team"
      }
    ]
  }
}

createStockUpdateSubscription#

Subscribe an email address to a back-in-stock notification for a product. The subscriber is notified when the SKU becomes available again on the channel.

Input: CreateStockUpdateSubscriptionInput!

NameTypeRequiredDescription
channel_id
String
OptionalThe sales channel to watch stock on
email
String!
RequiredEmail address to notify when the product is back in stock
sku
String!
RequiredSKU of the product to watch

Returns: CreateStockUpdateSubscriptionPayload!

NameTypeRequiredDescription
subscription
StockNotificationSubscription
OptionalThe created stock notification subscription

Example#

mutation CreateStockUpdateSubscription($input: CreateStockUpdateSubscriptionInput!) {
  createStockUpdateSubscription(input: $input) {
    subscription {
      email
      products {
        sku
        label
      }
      expires_at
      created_at
    }
  }
}
{
  "input": {
    "channel_id": "chn_4rTn8b",
    "email": "customer@example.com",
    "sku": "SKU-001"
  }
}

createSupply#

Start a supply (goods receipt) from one or more announcements. The settings control how received items are processed — plainly registered, distributed to positions, or matched against cross-dock orders or purchases.

Input: CreateSupplyInput!

NameTypeRequiredDescription
id
String
OptionalOptional ID to assign to the supply
announcement_ids
[String]!
RequiredThe announcements (expected deliveries) this supply receives
location_id
String
OptionalThe location where the goods are received
due_at
Int64
OptionalWhen the supply is due — Unix timestamp in milliseconds
settings
SupplySettingsInput!
RequiredHow received items are processed

Returns: CreateSupplyPayload!

NameTypeRequiredDescription
supply
Supply
OptionalThe created supply

Example#

mutation CreateSupply($input: CreateSupplyInput!) {
  createSupply(input: $input) {
    supply {
      id
      number
      state
      due_at
      announcements {
        id
        number
      }
      created_at
    }
  }
}
{
  "input": {
    "announcement_ids": ["ann_3vBn6L"],
    "location_id": "loc_9pDk1S",
    "due_at": 1767225600000,
    "settings": {
      "processing": "MATCH_PURCHASE"
    }
  }
}

removeReorderNotificationSettings#

Delete reorder notification settings by ID, stopping the associated replenishment notifications.

Input: RemoveReorderNotificationSettingsInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the reorder notification settings to remove

Returns: RemoveReorderNotificationSettingsPayload!

NameTypeRequiredDescription
success
Boolean!
RequiredWhether the settings were removed successfully

Example#

mutation RemoveReorderNotificationSettings($input: RemoveReorderNotificationSettingsInput!) {
  removeReorderNotificationSettings(input: $input) {
    success
  }
}
{
  "input": {
    "id": "rns_5QwZ8j"
  }
}

removeSkuFromSupplier#

Unlink a product SKU from a supplier, so the product can no longer be purchased from that supplier.

Input: RemoveSkuFromSupplierInput!

NameTypeRequiredDescription
sku
String!
RequiredThe SKU of the product to unlink
supplier_id
ID!
RequiredThe ID of the supplier to remove the SKU from

Returns: RemoveSkuFromSupplierPayload!

NameTypeRequiredDescription
product
Product!
RequiredThe unlinked product
supplier
Business!
RequiredThe supplier the SKU was removed from

Example#

mutation RemoveSkuFromSupplier($input: RemoveSkuFromSupplierInput!) {
  removeSkuFromSupplier(input: $input) {
    product {
      sku
      label
      brand
    }
    supplier {
      id
      name
      email
    }
  }
}
{
  "input": {
    "sku": "TSH-BLK-M",
    "supplier_id": "sup_6JvB3n"
  }
}

removeStockUpdateSubscription#

Remove a stock update subscription using its subscription token, stopping further stock update notifications.

Input: RemoveStockUpdateSubscriptionInput!

NameTypeRequiredDescription
token
String!
RequiredThe token identifying the stock update subscription to remove

Returns: RemoveStockUpdateSubscriptionPayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the subscription was removed successfully

Example#

mutation RemoveStockUpdateSubscription($input: RemoveStockUpdateSubscriptionInput!) {
  removeStockUpdateSubscription(input: $input) {
    is_successful
  }
}
{
  "input": {
    "token": "sub_tok_8fKq2Zr41"
  }
}

removeSupply#

Remove a supply record from inventory by its ID.

Input: RemoveSupplyInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the supply to remove

Returns: RemoveSupplyPayload!

NameTypeRequiredDescription
success
Boolean!
RequiredWhether the supply was removed successfully
removed_supply_id
String
OptionalThe ID of the removed supply

Example#

mutation RemoveSupply($input: RemoveSupplyInput!) {
  removeSupply(input: $input) {
    success
    removed_supply_id
  }
}
{
  "input": {
    "id": "sup_9mKx4Tq"
  }
}

updateReorderNotificationSettings#

Update the reorder notification settings for a warehouse: enable or disable the notifications and set which businesses they cover, when they are sent and who receives them.

Input: UpdateReorderNotificationSettingsInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the reorder notification configuration
is_enabled
Boolean!
RequiredWhether reorder notifications are enabled
business_ids
[String]!
RequiredIDs of the businesses the notifications apply to
schedules
[ReorderNotificationScheduleInput]!
RequiredWhen the notifications are sent
recipients
[ReorderNotificationRecipientInput]!
RequiredWho receives the notifications

Returns: UpdateReorderNotificationSettingsPayload!

NameTypeRequiredDescription
reorder_notification
ReorderNotification
OptionalThe updated reorder notification configuration

Example#

mutation UpdateReorderNotificationSettings($input: UpdateReorderNotificationSettingsInput!) {
  updateReorderNotificationSettings(input: $input) {
    reorder_notification {
      id
      is_enabled
      schedules {
        week_day
        hour
        minute
        timezone
      }
      recipients {
        name
        email_address
      }
    }
  }
}
{
  "input": {
    "id": "ron_2xQm9V",
    "is_enabled": true,
    "business_ids": ["bus_7pLk3N"],
    "schedules": [
      { "week_day": 1, "hour": 8, "minute": 0, "time_zone": "Europe/Amsterdam" }
    ],
    "recipients": [
      { "email": "purchasing@example.com", "name": "Purchasing team" }
    ]
  }
}

updateSupply#

Update a supply (an incoming goods run in a warehouse): change its due date and how received items are processed and matched to orders, purchases or cross-dock flows.

Input: UpdateSupplyInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the supply to update
due_at
Int64!
RequiredDue date as a Unix timestamp in milliseconds
settings
UpdateSupplySettingsInput!
RequiredProcessing settings for the supply

Returns: UpdateSupplyPayload!

NameTypeRequiredDescription
supply
Supply
OptionalThe updated supply

Example#

mutation UpdateSupply($input: UpdateSupplyInput!) {
  updateSupply(input: $input) {
    supply {
      id
      number
      status
      due_at
      settings {
        processing
      }
    }
  }
}
{
  "input": {
    "id": "sup_8mKd3W",
    "due_at": 1752537600000,
    "settings": {
      "processing": "MATCH_ORDER",
      "orders": {
        "order_by": "CREATED_AT",
        "filters": []
      }
    }
  }
}

Locations#

createLocation#

Create a physical location — such as a store, warehouse site or pickup point — including its address, opening hours and order cut-off times.

Input: CreateLocationInput!

NameTypeRequiredDescription
id
String
OptionalOptional client-supplied ID for the location
name
String!
RequiredName of the location
address_id
String
OptionalID of an existing address to link to the location
address
AddressInput
OptionalAddress to create for the location (alternative to address_id)
openings
[LocationOpeningInput]!
RequiredOpening hours per weekday
cut_off_times
[CutOffTimeInput]!
RequiredOrder cut-off time per weekday
inventory_integration_id
String
OptionalID of the inventory management integration for this location

Returns: CreateLocationPayload!

NameTypeRequiredDescription
location
Location
OptionalThe created location

Example#

mutation CreateLocation($input: CreateLocationInput!) {
  createLocation(input: $input) {
    location {
      id
      name
      address {
        address_line_1
        locality
        postal_code
        country_code
      }
      created_at
    }
  }
}
{
  "input": {
    "name": "Groningen store",
    "address": {
      "country_code": "NL",
      "locality": "Groningen",
      "postal_code": "9711 LM",
      "thoroughfare": "Herestraat",
      "premise_number": 12
    },
    "openings": [
      {
        "weekday": 1,
        "windows": [{ "start": "09:00", "end": "18:00" }]
      }
    ],
    "cut_off_times": [
      { "weekday": 1, "time": "16:00" }
    ]
  }
}

updateLocation#

Update a location — its name, address, opening hours and carrier cut-off times.

Input: UpdateLocationInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the location to update
name
String!
RequiredName of the location
address_id
String
OptionalID of an existing address to use for the location
address
AddressInput
OptionalThe address of the location — alternative to `address_id`
openings
[LocationOpeningInput]!
RequiredOpening hours per weekday
cut_off_times
[CutOffTimeInput]!
RequiredCut-off times per weekday for same-day processing

Returns: UpdateLocationPayload!

NameTypeRequiredDescription
location
Location
OptionalThe updated location

Example#

mutation UpdateLocation($input: UpdateLocationInput!) {
  updateLocation(input: $input) {
    location {
      id
      name
      address {
        address_line_1
        locality
        postal_code
        country_code
      }
      cut_off_times {
        day_of_week
        time
      }
    }
  }
}
{
  "input": {
    "id": "loc_4Wq8bZ",
    "name": "Warehouse Groningen",
    "address": {
      "address_line_1": "Industrieweg 12",
      "locality": "Groningen",
      "postal_code": "9723 AS",
      "country_code": "NL"
    },
    "openings": [
      {
        "weekday": 1,
        "windows": [
          { "start": "09:00", "end": "17:30" }
        ]
      }
    ],
    "cut_off_times": [
      {
        "weekday": 1,
        "time": "16:00"
      }
    ]
  }
}

Delivery & parcels#

addItemsToParcel#

Add order items to a parcel for shipping. When no parcel_id is given, the items are packed into a new parcel; the payload returns both the updated items and the affected parcels.

Input: AddItemsToParcelInput!

NameTypeRequiredDescription
parcel_id
String
OptionalThe ID of an existing parcel to add the items to — omit to create a new parcel
items
[String]!
RequiredIDs of the items to add to the parcel

Returns: AddItemsToParcelPayload!

NameTypeRequiredDescription
items
[ParcelItem]!
RequiredThe items that were added
parcels
[Parcel]!
RequiredThe affected parcels

Example#

mutation AddItemsToParcel($input: AddItemsToParcelInput!) {
  addItemsToParcel(input: $input) {
    items {
      id
      sku
      label
    }
    parcels {
      id
      number
      status
    }
  }
}
{
  "input": {
    "parcel_id": "prc_8LmV3q",
    "items": ["itm_7GhQ2w", "itm_9KpR4t"]
  }
}

addProviderOptionToItems#

Assign a carrier provider option (a specific carrier service, e.g. a signed or same-day delivery product) to a set of parcel items, so the resulting parcel is shipped with that carrier service.

Input: AddProviderOptionToItems!

NameTypeRequiredDescription
provider_option_id
String!
RequiredThe ID of the carrier provider option to apply
items
[String]!
RequiredThe IDs of the items to apply the provider option to

Returns: AddProviderOptionToItemsPayload!

NameTypeRequiredDescription
items
[ParcelItem]!
RequiredThe updated parcel items
parcel
Parcel
OptionalThe parcel the items belong to
delivery
Delivery
OptionalThe delivery the items are shipped with

Example#

mutation AddProviderOptionToItems($input: AddProviderOptionToItems!) {
  addProviderOptionToItems(input: $input) {
    items {
      id
      sku
      label
      progress
    }
    parcel {
      id
      number
      status
    }
    delivery {
      id
      number
      expected_at
    }
  }
}
{
  "input": {
    "provider_option_id": "pro_2WqK8d",
    "items": ["itm_7hRp2W", "itm_9kTn4B"]
  }
}

addShippingMethodToItems#

Assign a shipping method to a specific set of items on an order, leaving the other items untouched. Use this when different items of one order should ship with different methods.

Input: AddShippingMethodToItemsInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order the items belong to
items
[String]!
RequiredThe IDs of the order items to assign the shipping method to
shipping_method_id
String!
RequiredThe ID of the shipping method to apply

Returns: AddShippingMethodToItemsPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation AddShippingMethodToItems($input: AddShippingMethodToItemsInput!) {
  addShippingMethodToItems(input: $input) {
    order {
      id
      number
      status
      items {
        id
        sku
        label
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "items": ["itm_7hRp2W", "itm_9kTn4B"],
    "shipping_method_id": "shm_3DcF6a"
  }
}

addTrackTraceToItems#

Attach a track & trace number and tracking URL to a set of parcel items, so the shipment can be followed by the customer and in the fulfilment flow.

Input: AddTrackTraceToItemsInput!

NameTypeRequiredDescription
track_trace_url
String!
RequiredThe carrier tracking URL for the shipment
track_trace_number
String!
RequiredThe track & trace number issued by the carrier
items
[String]!
RequiredThe IDs of the items the track & trace applies to

Returns: AddTrackTraceToItemsPayload

NameTypeRequiredDescription
parcels
[Parcel!]!
RequiredParcels carrying the updated track & trace
items
[CollectionItem!]!
RequiredItems the track & trace was attached to

Example#

mutation AddTrackTraceToItems($input: AddTrackTraceToItemsInput!) {
  addTrackTraceToItems(input: $input) {
    items {
      id
      sku
      label
      progress
    }
    parcels {
      id
      number
      status
      track_trace {
        number
        url
      }
    }
  }
}
{
  "input": {
    "track_trace_number": "3SABCD123456789",
    "track_trace_url": "https://tracking.example-carrier.com/3SABCD123456789",
    "items": ["itm_7hRp2W", "itm_9kTn4B"]
  }
}

createParcelForDelivery#

Create a parcel for a delivery and assign specific delivery items to it, so the parcel can be announced to a carrier and shipped.

Input: CreateParcelForDeliveryInput!

NameTypeRequiredDescription
delivery_id
String!
RequiredThe ID of the delivery to create the parcel for
items
[String]!
RequiredIDs of the delivery items to pack into the parcel

Returns: CreateParcelForDeliveryPayload

NameTypeRequiredDescription
parcels
[Parcel!]!
RequiredParcels created for the delivery
items
[CollectionItem!]!
RequiredItems assigned to the new parcel

Example#

mutation CreateParcelForDelivery($input: CreateParcelForDeliveryInput!) {
  createParcelForDelivery(input: $input) {
    parcel {
      id
      status
    }
  }
}
{
  "input": {
    "delivery_id": "dlv_8Fq2nW",
    "items": ["ditm_3Vp7kL", "ditm_6Jd4mX"]
  }
}

createShippingLabelForParcel#

Create a shipping label for an existing parcel. Optionally send the label straight to a connected label printer.

Input: CreateShippingLabelForParcelInput!

NameTypeRequiredDescription
parcel_id
String!
RequiredThe ID of the parcel to create a shipping label for
printer_id
Int64
OptionalID of the printer to send the label to directly

Returns: CreateShippingLabelForParcelPayload!

NameTypeRequiredDescription
parcel
Parcel
OptionalThe parcel including its new label

Example#

mutation CreateShippingLabelForParcel($input: CreateShippingLabelForParcelInput!) {
  createShippingLabelForParcel(input: $input) {
    parcel {
      id
      number
      status
      track_trace {
        url
        number
      }
      labels {
        id
        label_url
        tracking_code
      }
    }
  }
}
{
  "input": {
    "parcel_id": "prc_x9k2mQ",
    "printer_id": 42
  }
}

removeItemsFromParcel#

Remove items from a parcel, for example when repacking a shipment. Returns the updated parcel.

Input: RemoveItemsFromParcelInput!

NameTypeRequiredDescription
parcel_id
String!
RequiredThe ID of the parcel to remove the items from
items
[String]!
RequiredIDs of the items to remove from the parcel

Returns: RemoveItemsFromParcelPayload!

NameTypeRequiredDescription
parcel
Parcel
OptionalThe updated parcel

Example#

mutation RemoveItemsFromParcel($input: RemoveItemsFromParcelInput!) {
  removeItemsFromParcel(input: $input) {
    parcel {
      id
      number
      status
      items {
        id
        sku
      }
    }
  }
}
{
  "input": {
    "parcel_id": "prc_8LmV3q",
    "items": ["itm_7GhQ2w", "itm_9KpR4t"]
  }
}

setDeliveryStatusForItems#

Set the delivery status for one or more parcel items. Returns the updated items and the parcels they belong to.

Input: SetDeliveryStatusForItemsInput!

NameTypeRequiredDescription
status
String!
RequiredThe delivery status to set on the items
items
[String]!
RequiredIDs of the items to update

Returns: SetDeliveryStatusForItemsPayload!

NameTypeRequiredDescription
items
[ParcelItem]!
RequiredThe updated items
parcels
[Parcel]!
RequiredThe parcels the items belong to

Example#

mutation SetDeliveryStatusForItems($input: SetDeliveryStatusForItemsInput!) {
  setDeliveryStatusForItems(input: $input) {
    items {
      id
      sku
      label
      progress
    }
    parcels {
      id
      number
      status
    }
  }
}
{
  "input": {
    "status": "DELIVERED",
    "items": ["itm_7GhQ2w", "itm_9KpR4t"]
  }
}

setMethodForDelivery#

Change the shipping method of an existing delivery, for example to switch a shipment to a different carrier service.

Input: SetMethodForDeliveryInput!

NameTypeRequiredDescription
delivery_id
String!
RequiredThe ID of the delivery
method_id
String!
RequiredThe ID of the shipping method to set

Returns: SetMethodForDeliveryPayload!

NameTypeRequiredDescription
delivery
Delivery
OptionalThe updated delivery

Example#

mutation SetMethodForDelivery($input: SetMethodForDeliveryInput!) {
  setMethodForDelivery(input: $input) {
    delivery {
      id
      number
      status
      method {
        id
        name
      }
      expected_at
      updated_at
    }
  }
}
{
  "input": {
    "delivery_id": "dlv_4mKt8Z",
    "method_id": "shm_2xVb9L"
  }
}

setParcelStatus#

Set the status of a parcel, for example to mark it as delivered or ready to collect. Returns the updated parcel.

Input: SetParcelStatusInput!

NameTypeRequiredDescription
parcel_id
String!
RequiredThe ID of the parcel
status
ParcelStatus!
RequiredThe status to set

Returns: SetParcelStatusPayload!

NameTypeRequiredDescription
parcel
Parcel
OptionalThe updated parcel

Example#

mutation SetParcelStatus($input: SetParcelStatusInput!) {
  setParcelStatus(input: $input) {
    parcel {
      id
      number
      status
      track_trace {
        url
        number
      }
    }
  }
}
{
  "input": {
    "parcel_id": "prc_8LmV3q",
    "status": "DELIVERED"
  }
}

setProviderOptionForDelivery#

Set the carrier (provider) option for a delivery, for example to switch a shipment to a different carrier service. Returns the updated delivery.

Input: SetProviderOptionForDeliveryInput!

NameTypeRequiredDescription
delivery_id
String!
RequiredThe ID of the delivery
provider_option_id
String!
RequiredThe ID of the carrier option to use for the delivery
provider_option_name
String
OptionalOptional display name for the carrier option

Returns: SetProviderOptionForDeliveryPayload!

NameTypeRequiredDescription
delivery
Delivery
OptionalThe updated delivery

Example#

mutation SetProviderOptionForDelivery($input: SetProviderOptionForDeliveryInput!) {
  setProviderOptionForDelivery(input: $input) {
    delivery {
      id
      number
      status
      provider_option {
        id
        name
        carrier
      }
    }
  }
}
{
  "input": {
    "delivery_id": "dlv_6WqN8r",
    "provider_option_id": "pro_2XcJ5m",
    "provider_option_name": "DHL Same Day"
  }
}

setShippingAddressForDelivery#

Set the destination shipping address for a delivery. Provide a pickup point ID (spid), an existing address ID, or a full address object.

Input: SetShippingAddressForDeliveryInput!

NameTypeRequiredDescription
delivery_id
String!
RequiredThe ID of the delivery
spid
String
OptionalService point (pickup point) ID to deliver to
address_id
String
OptionalID of an existing address to use
address
AddressInput
OptionalA new shipping address

Returns: SetShippingAddressForDeliveryPayload!

NameTypeRequiredDescription
delivery
Delivery
OptionalThe updated delivery

Example#

mutation SetShippingAddress($input: SetShippingAddressForDeliveryInput!) {
  setShippingAddressForDelivery(input: $input) {
    delivery {
      id
      number
      status
      to {
        address {
          address_line_1
          locality
          postal_code
          country_code
        }
      }
    }
  }
}
{
  "input": {
    "delivery_id": "dlv_5rT8nK",
    "address": {
      "address_line_1": "Keizersgracht 313",
      "locality": "Amsterdam",
      "postal_code": "1016 EE",
      "country_code": "NL",
      "given_name": "Jane",
      "family_name": "Doe"
    }
  }
}

Announcements#

addItemsToAnnouncement#

Add items to an inbound announcement, the notice of goods expected to arrive at a warehouse. Each item is identified by SKU and can carry a specification with cost, batch/serial numbers, weight and expiry.

Input: AddItemsToAnnouncementInput!

NameTypeRequiredDescription
announcement_id
String!
RequiredThe ID of the announcement to add the items to
items
[AnnouncementItemInput]!
RequiredThe items to add to the announcement

Returns: AddItemsToAnnouncementPayload!

NameTypeRequiredDescription
announcement
Announcement
OptionalThe updated announcement

Example#

mutation AddItemsToAnnouncement($input: AddItemsToAnnouncementInput!) {
  addItemsToAnnouncement(input: $input) {
    announcement {
      id
      number
      status
      expected_at
      items {
        id
        sku
        status
      }
    }
  }
}
{
  "input": {
    "announcement_id": "ann_5RwT7k",
    "items": [
      {
        "sku": "TSHIRT-BLUE-M",
        "specification": {
          "cost": {
            "amount": 1250,
            "currency": "EUR"
          },
          "batch_number": "B-2026-114"
        }
      }
    ]
  }
}

createAnnouncement#

Announce an inbound shipment of goods to a warehouse location, for example a purchase delivery from a supplier or vendor. The announcement tells the receiving location what to expect and when.

Input: CreateAnnouncementInput!

NameTypeRequiredDescription
id
String
OptionalOptional client-supplied ID for the announcement
description
String
OptionalFree-form description of the announced delivery
currency
Currency
OptionalISO 4217 currency code for the announced goods
expected_at
Int64
OptionalExpected arrival time as a Unix timestamp in milliseconds
buyer_id
String!
RequiredID of the business buying / receiving the goods
location_id
String!
RequiredID of the location where the goods will arrive
from
AnnouncementFrom!
RequiredThe party sending the goods

Returns: CreateAnnouncementPayload!

NameTypeRequiredDescription
announcement
Announcement
OptionalThe created announcement

Example#

mutation CreateAnnouncement($input: CreateAnnouncementInput!) {
  createAnnouncement(input: $input) {
    announcement {
      id
      number
      state
      description
      expected_at
      created_at
    }
  }
}
{
  "input": {
    "buyer_id": "bsn_4Tk8vN",
    "location_id": "loc_9mB2xQ",
    "description": "Weekly replenishment from main supplier",
    "currency": "EUR",
    "expected_at": 1767187200000,
    "from": {
      "entity_id": "sup_6Pw3rD",
      "entity_type": "SUPPLIER"
    }
  }
}

removeItemsFromAnnouncement#

Remove items from an inbound announcement — the notice of goods expected to arrive at a warehouse. Returns the updated announcement.

Input: RemoveItemsFromAnnouncementInput!

NameTypeRequiredDescription
announcement_id
String!
RequiredThe ID of the announcement to remove the items from
item_ids
[String]!
RequiredIDs of the announcement items to remove

Returns: RemoveItemsFromAnnouncementPayload!

NameTypeRequiredDescription
announcement
Announcement
OptionalThe updated announcement

Example#

mutation RemoveItemsFromAnnouncement($input: RemoveItemsFromAnnouncementInput!) {
  removeItemsFromAnnouncement(input: $input) {
    announcement {
      id
      number
      status
      expected_at
      items {
        id
        sku
      }
    }
  }
}
{
  "input": {
    "announcement_id": "ann_5RwT7k",
    "item_ids": ["ani_2FdK9p", "ani_8MzL4v"]
  }
}

setBuyerForAnnouncement#

Change the buying business on an announcement — the inbound shipment notice for a warehouse location. Optionally update the receiving location at the same time.

Input: SetBuyerForAnnouncementInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the announcement
buyer_id
String!
RequiredID of the business buying / receiving the goods
location_id
String
OptionalID of the location where the goods will arrive

Returns: SetBuyerForAnnouncementPayload!

NameTypeRequiredDescription
announcement
Announcement
OptionalThe updated announcement

Example#

mutation SetBuyerForAnnouncement($input: SetBuyerForAnnouncementInput!) {
  setBuyerForAnnouncement(input: $input) {
    announcement {
      id
      number
      state
      buyer {
        id
        name
      }
      updated_at
    }
  }
}
{
  "input": {
    "id": "ann_2Vw8kR",
    "buyer_id": "bsn_4Tk8vN",
    "location_id": "loc_9mB2xQ"
  }
}

setExpectedDateForAnnouncement#

Update the expected arrival date of an inbound announcement — the notice of goods expected to arrive at a warehouse.

Input: SetExpectedDateForAnnouncementInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the announcement
expected_at
Int64!
RequiredExpected arrival date — Unix timestamp in milliseconds

Returns: SetExpectedDateForAnnouncementPayload!

NameTypeRequiredDescription
announcement
Announcement
OptionalThe updated announcement

Example#

mutation SetExpectedDateForAnnouncement($input: SetExpectedDateForAnnouncementInput!) {
  setExpectedDateForAnnouncement(input: $input) {
    announcement {
      id
      number
      status
      expected_at
      updated_at
    }
  }
}
{
  "input": {
    "id": "ann_5RwT7k",
    "expected_at": 1767225600000
  }
}

setSupplierForAnnouncement#

Set the supplier on an inbound stock announcement, identifying which business the announced goods are coming from.

Input: SetSupplierForAnnouncementInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the announcement
supplier
AnnouncementFrom!
RequiredThe supplying entity

Returns: SetSupplierForAnnouncementPayload!

NameTypeRequiredDescription
announcement
Announcement
OptionalThe updated announcement

Example#

mutation SetSupplier($input: SetSupplierForAnnouncementInput!) {
  setSupplierForAnnouncement(input: $input) {
    announcement {
      id
      number
      status
      supplier {
        id
        name
      }
      expected_at
    }
  }
}
{
  "input": {
    "id": "ann_3jP7wR",
    "supplier": {
      "entity_id": "bus_6mX2kQ",
      "entity_type": "SUPPLIER"
    }
  }
}

Picklists#

markPicklistItemAsCollected#

Mark a single item on a picklist as collected, registering the warehouse position (for example a collection slot or tote) where it was placed. Returns the updated picklist.

Input: MarkPicklistItemAsCollectedInput!

NameTypeRequiredDescription
picklist_id
String!
RequiredThe ID of the picklist
item_id
String!
RequiredThe ID of the picklist item to mark as collected
position
String!
RequiredThe position where the item was collected (e.g. a slot or tote code)

Returns: MarkPicklistItemAsCollectedPayload!

NameTypeRequiredDescription
picklist
Picklist
OptionalThe updated picklist

Example#

mutation MarkPicklistItemAsCollected($input: MarkPicklistItemAsCollectedInput!) {
  markPicklistItemAsCollected(input: $input) {
    picklist {
      id
      number
      state
      items {
        id
        sku
        is_collected
      }
    }
  }
}
{
  "input": {
    "picklist_id": "pkl_x9k2mQ",
    "item_id": "pki_5nT3wY",
    "position": "A-01-03"
  }
}

markPicklistItemAsPicked#

Mark a single item on a picklist as picked, for example after it has been taken from its warehouse location. Returns the updated picklist.

Input: MarkPicklistItemAsPickedInput!

NameTypeRequiredDescription
picklist_id
String!
RequiredThe ID of the picklist
item_id
String!
RequiredThe ID of the picklist item to mark as picked

Returns: MarkPicklistItemAsPickedPayload!

NameTypeRequiredDescription
picklist
Picklist
OptionalThe updated picklist

Example#

mutation MarkPicklistItemAsPicked($input: MarkPicklistItemAsPickedInput!) {
  markPicklistItemAsPicked(input: $input) {
    picklist {
      id
      number
      state
      items {
        id
        sku
        is_picked
      }
    }
  }
}
{
  "input": {
    "picklist_id": "pkl_x9k2mQ",
    "item_id": "pki_5nT3wY"
  }
}

markPicklistItemAsUnpicked#

Revert a picked picklist item back to unpicked, for example when the wrong item was scanned or the item needs to go back to its location. Returns the updated picklist.

Input: MarkPicklistItemAsUnpickedInput!

NameTypeRequiredDescription
picklist_id
String!
RequiredThe ID of the picklist
item_id
String!
RequiredThe ID of the picklist item to mark as unpicked

Returns: MarkPicklistItemAsUnpickedPayload!

NameTypeRequiredDescription
picklist
Picklist
OptionalThe updated picklist

Example#

mutation MarkPicklistItemAsUnpicked($input: MarkPicklistItemAsUnpickedInput!) {
  markPicklistItemAsUnpicked(input: $input) {
    picklist {
      id
      number
      state
      items {
        id
        sku
        is_picked
      }
    }
  }
}
{
  "input": {
    "picklist_id": "pkl_x9k2mQ",
    "item_id": "pki_5nT3wY"
  }
}

markPicklistItemsAsCollected#

Mark multiple picklist items as collected in one call, registering the warehouse position (for example a collection slot or tote) where they were placed. Returns the updated picklist.

Input: MarkPicklistItemsAsCollectedInput!

NameTypeRequiredDescription
picklist_id
String!
RequiredThe ID of the picklist
items
[CollectPicklistItemInput]!
RequiredThe picklist items to mark as collected
position
String!
RequiredThe position where the items were collected (e.g. a slot or tote code)

Returns: MarkPicklistItemsAsCollectedPayload!

NameTypeRequiredDescription
picklist
Picklist
OptionalThe updated picklist

Example#

mutation MarkPicklistItemsAsCollected($input: MarkPicklistItemsAsCollectedInput!) {
  markPicklistItemsAsCollected(input: $input) {
    picklist {
      id
      number
      state
      items {
        id
        sku
        is_collected
      }
    }
  }
}
{
  "input": {
    "picklist_id": "pkl_x9k2mQ",
    "items": [
      { "item_id": "pki_5nT3wY" },
      { "item_id": "pki_8cVp4z" }
    ],
    "position": "A-01-03"
  }
}

markPicklistItemsAsPicked#

Mark multiple picklist items as picked in one call, for example after they have been taken from their warehouse locations. Returns the updated picklist.

Input: MarkPicklistItemsAsPickedInput!

NameTypeRequiredDescription
picklist_id
String!
RequiredThe ID of the picklist
items
[PickPicklistItemInput]!
RequiredThe picklist items to mark as picked

Returns: MarkPicklistItemsAsPickedPayload!

NameTypeRequiredDescription
picklist
Picklist
OptionalThe updated picklist

Example#

mutation MarkPicklistItemsAsPicked($input: MarkPicklistItemsAsPickedInput!) {
  markPicklistItemsAsPicked(input: $input) {
    picklist {
      id
      number
      state
      items {
        id
        sku
        is_picked
      }
    }
  }
}
{
  "input": {
    "picklist_id": "pkl_x9k2mQ",
    "items": [
      { "item_id": "pki_5nT3wY" },
      { "item_id": "pki_8cVp4z" }
    ]
  }
}

markPicklistItemsAsUnpicked#

Revert one or more items on a warehouse picklist back to the unpicked state, for example when an item was scanned by mistake or needs to be re-picked.

Input: MarkPicklistItemsAsUnpickedInput!

NameTypeRequiredDescription
picklist_id
String!
RequiredThe ID of the picklist
items
[UnpickPicklistItemInput]!
RequiredThe picklist items to mark as unpicked

Returns: MarkPicklistItemsAsUnpickedPayload!

NameTypeRequiredDescription
picklist
Picklist
OptionalThe updated picklist

Example#

mutation MarkPicklistItemsAsUnpicked($input: MarkPicklistItemsAsUnpickedInput!) {
  markPicklistItemsAsUnpicked(input: $input) {
    picklist {
      id
      number
      status
      items {
        id
        sku
        position
        is_picked
      }
    }
  }
}
{
  "input": {
    "picklist_id": "pkl_7Hn3wQr",
    "items": [
      { "item_id": "itm_x9k2mQ" },
      { "item_id": "itm_4Tp8vLc" }
    ]
  }
}

setPicklistTag#

Set a tag on a picklist by picking an option for a tagging key, for example to mark a picklist for a specific carrier cut-off or picking zone. Returns the updated picklist.

Input: SetPicklistTagInput!

NameTypeRequiredDescription
picklist_id
String!
RequiredThe ID of the picklist to tag
key_id
String!
RequiredThe ID of the tagging key
option_id
String!
RequiredThe ID of the option to set for the tagging key

Returns: SetPicklistTagPayload!

NameTypeRequiredDescription
picklist
Picklist
OptionalThe updated picklist

Example#

mutation SetPicklistTag($input: SetPicklistTagInput!) {
  setPicklistTag(input: $input) {
    picklist {
      id
      number
      state
      tags {
        id
        label
      }
    }
  }
}
{
  "input": {
    "picklist_id": "pkl_x9k2mQ",
    "key_id": "key_3Fp7Lx",
    "option_id": "opt_9RwB5n"
  }
}

Drawers#

closeDrawer#

Close a POS cash drawer, recording the counted (actual) amount and any skimmed amount. Returns the closed drawer together with a closing report.

Input: CloseDrawerInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the drawer to close
user_id
String!
RequiredThe ID of the user closing the drawer
actual_amount
Int64!
RequiredCounted cash amount in cents
skimmed_amount
Int64!
RequiredAmount removed (skimmed) from the drawer in cents

Returns: CloseDrawerPayload!

NameTypeRequiredDescription
drawer
Drawer
OptionalThe closed drawer
report
DrawerReport
OptionalThe closing report for the drawer session

Example#

mutation CloseDrawer($input: CloseDrawerInput!) {
  closeDrawer(input: $input) {
    drawer {
      id
      label
      status
    }
    report {
      id
      expected_amount
      actual_amount
      skimmed_amount
      closing_amount
    }
  }
}
{
  "input": {
    "id": "drw_3Fh7kNp",
    "user_id": "usr_5tW2rVx",
    "actual_amount": 48250,
    "skimmed_amount": 30000
  }
}

createDrawer#

Create a cash drawer for a point-of-sale channel. A drawer tracks cash amounts across register sessions and can be opened and closed per shift.

Input: CreateDrawerInput!

NameTypeRequiredDescription
id
String
OptionalOptional client-supplied ID for the drawer
label
String!
RequiredDisplay label for the drawer (e.g. "Register 1")
channel_id
String!
RequiredID of the POS channel the drawer belongs to

Returns: CreateDrawerPayload!

NameTypeRequiredDescription
drawer
Drawer
OptionalThe created drawer

Example#

mutation CreateDrawer($input: CreateDrawerInput!) {
  createDrawer(input: $input) {
    drawer {
      id
      label
      status
      starting_amount
      expected_amount
      created_at
    }
  }
}
{
  "input": {
    "label": "Register 1",
    "channel_id": "chn_5Rw8kP"
  }
}

deleteDrawer#

Delete a POS cash drawer. Returns whether the deletion succeeded.

Input: DeleteDrawerInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the drawer to delete

Returns: DeleteDrawerPayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the drawer was deleted

Example#

mutation DeleteDrawer($input: DeleteDrawerInput!) {
  deleteDrawer(input: $input) {
    is_successful
  }
}
{
  "input": {
    "id": "drw_x9k2mQ"
  }
}

depositIntoDrawer#

Deposit a cash amount into an open POS drawer, with a note explaining the deposit. The drawer's expected amount is increased accordingly.

Input: DepositIntoDrawerInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the drawer to deposit into
deposit_id
String
OptionalOptional client-supplied ID for the deposit (for idempotency)
note
String!
RequiredNote explaining the deposit (e.g. "Change float top-up")
amount
Int64!
RequiredAmount to deposit in cents

Returns: DepositIntoDrawerPayload!

NameTypeRequiredDescription
drawer
Drawer
OptionalThe updated drawer

Example#

mutation DepositIntoDrawer($input: DepositIntoDrawerInput!) {
  depositIntoDrawer(input: $input) {
    drawer {
      id
      label
      status
      expected_amount {
        amount
        formatted
      }
      updated_at
    }
  }
}
{
  "input": {
    "id": "drw_4kNp7Rc",
    "note": "Change float top-up",
    "amount": 5000
  }
}

openDrawer#

Open a POS cash drawer for a new session, recording the counted starting amount. Returns the opened drawer together with the session report.

Input: OpenDrawerInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the drawer to open
user_id
String!
RequiredThe ID of the user opening the drawer
starting_amount
Int64!
RequiredCounted cash amount at the start of the session, in cents

Returns: OpenDrawerPayload!

NameTypeRequiredDescription
drawer
Drawer
OptionalThe opened drawer
report
DrawerReport
OptionalThe report for the opened drawer session

Example#

mutation OpenDrawer($input: OpenDrawerInput!) {
  openDrawer(input: $input) {
    drawer {
      id
      label
      status
      starting_amount {
        amount
        formatted
      }
    }
    report {
      id
      start_at
      starting_amount {
        amount
        formatted
      }
    }
  }
}
{
  "input": {
    "id": "drw_3Fh7kNp",
    "user_id": "usr_5tW2rVx",
    "starting_amount": 15000
  }
}

updateDrawer#

Update the label of a point-of-sale cash drawer.

Input: UpdateDrawerInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the drawer to update
label
String!
RequiredNew display label for the drawer (e.g. "Register 1")

Returns: UpdateDrawerPayload!

NameTypeRequiredDescription
drawer
Drawer
OptionalThe updated drawer

Example#

mutation UpdateDrawer($input: UpdateDrawerInput!) {
  updateDrawer(input: $input) {
    drawer {
      id
      label
      status
      updated_at
    }
  }
}
{
  "input": {
    "id": "drw_3Vp9sK",
    "label": "Register 2"
  }
}

withdrawFromDrawer#

Withdraw cash from a POS drawer, recording the amount and a note (for example a bank deposit). Returns the drawer with its updated expected amount.

Input: WithdrawFromDrawerInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the drawer to withdraw from
withdrawal_id
String
OptionalOptional ID to reference this withdrawal
note
String!
RequiredReason for the withdrawal (e.g. "Cash deposit to bank")
amount
Int64!
RequiredAmount to withdraw, in cents

Returns: WithdrawFromDrawerPayload!

NameTypeRequiredDescription
drawer
Drawer
OptionalThe drawer after the withdrawal

Example#

mutation WithdrawFromDrawer($input: WithdrawFromDrawerInput!) {
  withdrawFromDrawer(input: $input) {
    drawer {
      id
      label
      status
      expected_amount {
        amount
        currency
        formatted
      }
    }
  }
}
{
  "input": {
    "id": "drw_5hPx2S",
    "note": "Cash deposit to bank",
    "amount": 25000
  }
}

Returns (RMA)#

addTrackTraceToReturnItems#

Attach a track & trace number to a set of return items, so the inbound return shipment can be followed until it arrives back at the warehouse.

Input: AddTrackTraceToReturnItemsInput!

NameTypeRequiredDescription
track_trace_number
String!
RequiredThe track & trace number issued by the carrier for the return shipment
items
[String]!
RequiredThe IDs of the return items the track & trace applies to

Returns: AddTrackTraceToReturnItemsPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe updated return items

Example#

mutation AddTrackTraceToReturnItems($input: AddTrackTraceToReturnItemsInput!) {
  addTrackTraceToReturnItems(input: $input) {
    items {
      id
      sku
      label
      status
      is_returned
    }
  }
}
{
  "input": {
    "track_trace_number": "3SABCD987654321",
    "items": ["itm_7hRp2W", "itm_9kTn4B"]
  }
}

attachPhotoToRma#

Attach a photo to an item on an RMA (return), identified by its SKU — for example to document the condition of a returned product.

Input: AttachPhotoToRmaInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA
sku
String!
RequiredSKU of the RMA item to attach the photo to
photo
Upload!
RequiredThe photo file to upload

Returns: AttachPhotoToRmaPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA

Example#

mutation AttachPhotoToRma($input: AttachPhotoToRmaInput!) {
  attachPhotoToRma(input: $input) {
    rma {
      id
      number
      status
      items {
        id
        is_received
      }
    }
  }
}
{
  "input": {
    "rma_id": "rma_6Yw3nBq",
    "sku": "SKU-001-BLK",
    "photo": null
  }
}

authorizeRmaItems#

Authorize or reject individual items on an RMA (return), optionally marking them as received and adding notes for the contact or vendor.

Input: AuthorizeRmaItemsInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA
items
[AuthorizeRmaItemInput]!
RequiredThe RMA items to update

Returns: AuthorizeRmaItemsPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA

Example#

mutation AuthorizeRmaItems($input: AuthorizeRmaItemsInput!) {
  authorizeRmaItems(input: $input) {
    rma {
      id
      number
      status
      items {
        id
        status
        is_received
      }
    }
  }
}
{
  "input": {
    "rma_id": "rma_6Yw3nBq",
    "items": [
      {
        "id": "rmi_1cV8sLp",
        "status": "AUTHORIZED",
        "is_received": true,
        "vendor_note": "Item received in good condition"
      }
    ]
  }
}

createRma#

Create a new RMA (return merchandise authorisation) to register a customer return. The RMA starts empty — add the returned products with createRmaItems.

Input: CreateRmaInput!

NameTypeRequiredDescription
id
String
OptionalOptional ID to assign to the RMA
contact_id
String
OptionalThe contact returning the goods
organisation_id
String
OptionalThe organisation returning the goods
channel_id
String
OptionalThe sales channel the return belongs to
due_at
Int64
OptionalWhen the return is due — Unix timestamp in milliseconds
status
RmaStatus
OptionalInitial status of the RMA

Returns: CreateRmaPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe created RMA

Example#

mutation CreateRma($input: CreateRmaInput!) {
  createRma(input: $input) {
    rma {
      id
      number
      status
      due_at
      contact {
        id
        email
      }
      created_at
    }
  }
}
{
  "input": {
    "contact_id": "cnt_8kQw2p",
    "channel_id": "chn_4rTn8b",
    "due_at": 1767225600000,
    "status": "OPEN"
  }
}

createRmaItems#

Add returned products to an existing RMA. Each item links a SKU to the original order it was bought on, optionally with a return reason and a note from the customer.

Input: CreateRmaItemsInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA to add items to
items
[CreateRmaItemInput]!
RequiredThe products being returned

Returns: CreateRmaItemsPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA including the new items

Example#

mutation CreateRmaItems($input: CreateRmaItemsInput!) {
  createRmaItems(input: $input) {
    rma {
      id
      number
      status
      items {
        id
        is_received
        contact_note
      }
      updated_at
    }
  }
}
{
  "input": {
    "rma_id": "rma_x9k2mQ",
    "items": [
      {
        "sku": "SKU-001",
        "order_id": "ord_5tGh7Y",
        "reason": "SIZE_TOO_SMALL",
        "contact_note": "Would like to exchange for a size L"
      }
    ]
  }
}

createRmaLabel#

Generate a return shipping label for an RMA through a shipping integration. The label is created for the selected carrier option and covers the returned items from the given orders.

Input: CreateRmaLabelInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA to create a label for
id
String
OptionalOptional ID to assign to the label
integration_id
String!
RequiredThe shipping integration that generates the label
email
String!
RequiredEmail address of the customer shipping the return
option_id
String!
RequiredThe carrier option to ship the return with
meta_data
JsonObject
OptionalArbitrary metadata to attach to the label
order_ids
[String]!
RequiredThe orders whose items are covered by this return label

Returns: CreateRmaLabelPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA

Example#

mutation CreateRmaLabel($input: CreateRmaLabelInput!) {
  createRmaLabel(input: $input) {
    rma {
      id
      number
      status
      provider_option {
        id
        name
        carrier
      }
      updated_at
    }
  }
}
{
  "input": {
    "rma_id": "rma_x9k2mQ",
    "integration_id": "int_2wEr9K",
    "email": "customer@example.com",
    "option_id": "opt_6yUj4N",
    "order_ids": ["ord_5tGh7Y"]
  }
}

deleteRma#

Permanently delete an RMA (return merchandise authorisation) by ID.

Input: DeleteRmaInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the RMA to delete

Returns: DeleteRmaPayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the RMA was deleted successfully

Example#

mutation DeleteRma($input: DeleteRmaInput!) {
  deleteRma(input: $input) {
    is_successful
  }
}
{
  "input": {
    "id": "rma_6xPn4Tq"
  }
}

deleteRmaItems#

Remove one or more items from an RMA (return merchandise authorisation). Returns the updated RMA without the removed items.

Input: DeleteRmaItemsInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA to remove items from
items
[String]!
RequiredIDs of the RMA items to remove

Returns: DeleteRmaItemsPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA

Example#

mutation DeleteRmaItems($input: DeleteRmaItemsInput!) {
  deleteRmaItems(input: $input) {
    rma {
      id
      number
      status
      items {
        id
        is_received
      }
      updated_at
    }
  }
}
{
  "input": {
    "rma_id": "rma_6xPn4Tq",
    "items": ["rmi_9wLk2Vd", "rmi_3cHt7Jm"]
  }
}

reviewRma#

Review a return (RMA) by authorizing or rejecting the returned quantities per SKU, optionally with a note per decision.

Input: ReviewRmaInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA to review
decisions
[RmaDecision]!
RequiredOne decision per SKU being reviewed

Returns: ReviewRmaPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe reviewed RMA

Example#

mutation ReviewRma($input: ReviewRmaInput!) {
  reviewRma(input: $input) {
    rma {
      id
      number
      status
      updated_at
    }
  }
}
{
  "input": {
    "rma_id": "rma_7Hn3Pw",
    "decisions": [
      {
        "sku": "TSH-BLK-M",
        "quantity": 1,
        "status": "AUTHORIZED",
        "note": "Item received in original condition"
      }
    ]
  }
}

sendReturnEmail#

Send a return confirmation email to the customer for specific items of an order.

Input: SendReturnEmailInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
item_ids
[String]!
RequiredThe IDs of the returned order items to include in the email

Returns: SendReturnEmailPayload!

NameTypeRequiredDescription
order
Order
OptionalThe order the email was sent for

Example#

mutation SendReturnEmail($input: SendReturnEmailInput!) {
  sendReturnEmail(input: $input) {
    order {
      id
      number
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "item_ids": ["itm_4Fq8Zw"]
  }
}

setProviderOptionForRma#

Set the carrier (provider) option a return (RMA) will be shipped back with. Returns the updated RMA.

Input: SetProviderOptionForRmaInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA
provider_option
ProviderOptionOnRmaInput!
RequiredThe carrier option to use for the return shipment

Returns: SetProviderOptionForRmaPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA

Example#

mutation SetProviderOptionForRma($input: SetProviderOptionForRmaInput!) {
  setProviderOptionForRma(input: $input) {
    rma {
      id
      number
      status
      provider_option {
        id
        name
        carrier
      }
    }
  }
}
{
  "input": {
    "rma_id": "rma_7Hn3Pw",
    "provider_option": {
      "id": "pro_2XcJ5m",
      "name": "PostNL Standard Return",
      "integration_id": "int_4Yt8vN"
    }
  }
}

setReturnMethodForRma#

Assign a return method to an RMA (return merchandise authorisation), determining how the customer sends the items back.

Input: SetReturnMethodForRmaInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA
return_method_id
String!
RequiredThe ID of the return method to use

Returns: SetReturnMethodForRmaPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA

Example#

mutation SetReturnMethod($input: SetReturnMethodForRmaInput!) {
  setReturnMethodForRma(input: $input) {
    rma {
      id
      number
      status
      return_method {
        id
        name
        carrier
      }
    }
  }
}
{
  "input": {
    "rma_id": "rma_4tW8nP",
    "return_method_id": "rtm_9xK2mQ"
  }
}

startItemReturnProcess#

Start the return process for one or more items on an order. Optionally pass a contra_id per item to link the return to a contra (compensating) item.

Input: StartItemReturnProcessInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order the items belong to
location_id
String
OptionalLocation where the return is processed
items
[ItemReturnProcessInput]!
RequiredThe items to return

Returns: StartItemReturnProcessPayload!

NameTypeRequiredDescription
items
[CollectionItem]!
RequiredThe items with the return process started

Example#

mutation StartItemReturn($input: StartItemReturnProcessInput!) {
  startItemReturnProcess(input: $input) {
    items {
      id
      sku
      label
      status
      is_returned
    }
  }
}
{
  "input": {
    "order_id": "ord_2kV8mT",
    "location_id": "loc_5nB4wJ",
    "items": [
      { "id": "itm_7hK3mR" }
    ]
  }
}

updateRma#

Update an RMA (return merchandise authorisation): change its status, the linked contact or organisation, the return address, or the due date. Only the fields you provide are changed.

Input: UpdateRmaInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the RMA to update
status
RmaStatus
OptionalNew status for the RMA
address_id
String
OptionalID of the return address
contact_id
String
OptionalID of the contact the RMA belongs to
organisation_id
String
OptionalID of the organisation the RMA belongs to
due_at
Int64
OptionalDue date as a Unix timestamp in milliseconds

Returns: UpdateRmaPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe updated RMA

Example#

mutation UpdateRma($input: UpdateRmaInput!) {
  updateRma(input: $input) {
    rma {
      id
      number
      status
      due_at
      items {
        id
        reason
        is_received
      }
    }
  }
}
{
  "input": {
    "id": "rma_6tYw4J",
    "status": "OPEN",
    "due_at": 1751932800000
  }
}

updateRmaItems#

Update items on an RMA, for example to change the return reason or the customer note per item.

Input: UpdateRmaItemsInput!

NameTypeRequiredDescription
rma_id
String!
RequiredThe ID of the RMA the items belong to
items
[UpdateRmaItemInput]!
RequiredItems to update

Returns: UpdateRmaItemsPayload!

NameTypeRequiredDescription
rma
Rma
OptionalThe RMA with the updated items

Example#

mutation UpdateRmaItems($input: UpdateRmaItemsInput!) {
  updateRmaItems(input: $input) {
    rma {
      id
      number
      status
      items {
        id
        reason
        status
        contact_note
      }
    }
  }
}
{
  "input": {
    "rma_id": "rma_6tYw4J",
    "items": [
      {
        "id": "rmi_2cVb8L",
        "reason": "SIZE_TOO_SMALL",
        "contact_note": "Fits too tight, I need one size up"
      }
    ]
  }
}

Reservations#

createReservation#

Reserve stock in a warehouse for a customer. The reservation claims the requested quantities of each SKU for a business and sales channel until it expires.

Input: CreateReservationInput!

NameTypeRequiredDescription
id
String
OptionalOptional ID to assign to the reservation
notes
String
OptionalFree-form notes on the reservation
customer
SetReservationContactInput!
RequiredThe customer the stock is reserved for — pass an existing contact ID or a new contact
channel_id
String!
RequiredThe sales channel the reservation is made through
warehouse_id
String!
RequiredThe warehouse to reserve stock in
business_id
String!
RequiredThe business the stock is reserved for
expires_at
Int64!
RequiredWhen the reservation expires — Unix timestamp in milliseconds
items
[ReservationItemInput]!
RequiredThe SKUs and quantities to reserve

Returns: CreateReservationPayload!

NameTypeRequiredDescription
reservation
Reservation
OptionalThe created reservation

Example#

mutation CreateReservation($input: CreateReservationInput!) {
  createReservation(input: $input) {
    reservation {
      id
      number
      notes
      items {
        quantity
      }
      expires_at
      created_at
    }
  }
}
{
  "input": {
    "customer": {
      "contact_id": "cnt_8kQw2p"
    },
    "channel_id": "chn_4rTn8b",
    "warehouse_id": "wh_x9k2mQ",
    "business_id": "bus_7hFp3W",
    "expires_at": 1767225600000,
    "items": [
      { "sku": "SKU-001", "quantity": 2 }
    ],
    "notes": "Hold for pickup on Friday"
  }
}

removeReservation#

Remove a stock reservation by its ID, releasing the items it holds at the warehouse.

Input: RemoveReservationInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the reservation to remove

Returns: RemoveReservationPayload!

NameTypeRequiredDescription
success
Boolean!
RequiredWhether the reservation was removed successfully

Example#

mutation RemoveReservation($input: RemoveReservationInput!) {
  removeReservation(input: $input) {
    success
  }
}
{
  "input": {
    "id": "res_x9k2mQ"
  }
}

setContactForReservation#

Set the customer on a stock reservation — either by referencing an existing contact by ID or by supplying a new contact to create.

Input: SetContactForReservationInput!

NameTypeRequiredDescription
reservation_id
String!
RequiredThe ID of the reservation
customer
SetReservationContactInput!
RequiredThe customer to set on the reservation — pass an existing contact ID or a new contact

Returns: SetContactForReservationPayload!

NameTypeRequiredDescription
reservation
Reservation
OptionalThe updated reservation

Example#

mutation SetContactForReservation($input: SetContactForReservationInput!) {
  setContactForReservation(input: $input) {
    reservation {
      id
      number
      contact {
        id
        name
        email
      }
      expires_at
      updated_at
    }
  }
}
{
  "input": {
    "reservation_id": "rsv_3Np7dK",
    "customer": {
      "contact_id": "cnt_8kQw2p"
    }
  }
}

setNotesForReservation#

Set the notes on a stock reservation. The notes replace any previously set notes.

Input: SetNotesForReservationInput!

NameTypeRequiredDescription
reservation_id
String!
RequiredThe ID of the reservation
notes
String!
RequiredThe notes to set on the reservation

Returns: SetNotesForReservationPayload!

NameTypeRequiredDescription
reservation
Reservation
OptionalThe updated reservation

Example#

mutation SetNotesForReservation($input: SetNotesForReservationInput!) {
  setNotesForReservation(input: $input) {
    reservation {
      id
      number
      notes
      expires_at
      updated_at
    }
  }
}
{
  "input": {
    "reservation_id": "rsv_6bNc3F",
    "notes": "Customer will collect the items on Friday."
  }
}

setReferencingNumberForReservation#

Set or update the external referencing number on a stock reservation, so you can link the reservation to a record in your own system (e.g. a quote or order number).

Input: SetReferencingNumberForReservationInput!

NameTypeRequiredDescription
reservation_id
String!
RequiredThe ID of the reservation to update
referencing_number
String!
RequiredYour external reference number to attach to the reservation

Returns: SetReferencingNumberForReservationPayload!

NameTypeRequiredDescription
reservation
Reservation
OptionalThe updated reservation

Example#

mutation SetReferencingNumber($input: SetReferencingNumberForReservationInput!) {
  setReferencingNumberForReservation(input: $input) {
    reservation {
      id
      number
      referencing_number
      expires_at
      items {
        quantity
      }
    }
  }
}
{
  "input": {
    "reservation_id": "rsv_8kQ2mX",
    "referencing_number": "QUOTE-2026-0042"
  }
}

Services#

createService#

Define a new service — such as gift wrapping, customisation or assembly — that can be offered on order items. The schema describes the configuration options a customer can choose when adding the service.

Input: CreateServiceInput!

NameTypeRequiredDescription
id
ID
OptionalOptional ID to assign to the service
name
String!
RequiredService name (default locale)
description
String!
RequiredDescription shown to the customer
instruction
String!
RequiredInstruction for the warehouse on how to perform the service
i18n
[InternationalizationInput]!
RequiredLocalised name, description and instruction per locale
type
ServiceType!
RequiredThe kind of service
priority
Int
OptionalExecution priority relative to other services
schema
JsonObject!
RequiredJSON schema describing the configurable options of the service

Returns: CreateServicePayload!

NameTypeRequiredDescription
service
Service
OptionalThe created service

Example#

mutation CreateService($input: CreateServiceInput!) {
  createService(input: $input) {
    service {
      id
      name
      type
      priority
      version
      created_at
    }
  }
}
{
  "input": {
    "name": "Gift wrapping",
    "description": "Have your order wrapped as a present",
    "instruction": "Wrap the item in the branded gift paper and add a ribbon",
    "i18n": [
      {
        "locale": "nl-NL",
        "name": "Cadeauverpakking",
        "description": "Laat je bestelling inpakken als cadeau",
        "instruction": "Verpak het artikel in het cadeaupapier en voeg een lint toe"
      }
    ],
    "type": "GIFTWRAP",
    "priority": 1,
    "schema": {
      "type": "object",
      "properties": {
        "message": { "type": "string", "title": "Gift message" }
      }
    }
  }
}

markServiceTaskAsFailed#

Mark a service task on an order item (e.g. engraving, assembly or another value-added service) as failed, indicating the task could not be completed.

Input: MarkServiceTaskAsFailedInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the service task to mark as failed

Returns: MarkServiceTaskAsFailedPayload!

NameTypeRequiredDescription
task
ServiceItemTask
OptionalThe updated service task

Example#

mutation MarkServiceTaskAsFailed($input: MarkServiceTaskAsFailedInput!) {
  markServiceTaskAsFailed(input: $input) {
    task {
      id
      status
      started_at
      ended_at
      service {
        id
        name
      }
      order_item {
        id
        sku
      }
    }
  }
}
{
  "input": {
    "id": "tsk_9Bv4nRe"
  }
}

markServiceTaskAsFinished#

Mark a service task on an order item (e.g. engraving, assembly or another value-added service) as finished, recording when work on the task was completed.

Input: MarkServiceTaskAsFinishedInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the service task to mark as finished

Returns: MarkServiceTaskAsFinishedPayload!

NameTypeRequiredDescription
task
ServiceItemTask
OptionalThe updated service task

Example#

mutation MarkServiceTaskAsFinished($input: MarkServiceTaskAsFinishedInput!) {
  markServiceTaskAsFinished(input: $input) {
    task {
      id
      status
      started_at
      ended_at
      service {
        id
        name
      }
      order_item {
        id
        sku
      }
    }
  }
}
{
  "input": {
    "id": "tsk_9Bv4nRe"
  }
}

markServiceTaskAsStarted#

Mark a service task on an order item (e.g. engraving, assembly or another value-added service) as started, recording when work on the task began.

Input: MarkServiceTaskAsStartedInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the service task to mark as started

Returns: MarkServiceTaskAsStartedPayload!

NameTypeRequiredDescription
task
ServiceItemTask
OptionalThe updated service task

Example#

mutation MarkServiceTaskAsStarted($input: MarkServiceTaskAsStartedInput!) {
  markServiceTaskAsStarted(input: $input) {
    task {
      id
      status
      started_at
      service {
        id
        name
      }
      order_item {
        id
        sku
      }
    }
  }
}
{
  "input": {
    "id": "tsk_9Bv4nRe"
  }
}

removeService#

Delete a service definition — such as gift wrapping or installation — by its ID.

Input: RemoveServiceInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the service to remove

Returns: RemoveServicePayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the service was removed successfully

Example#

mutation RemoveService($input: RemoveServiceInput!) {
  removeService(input: $input) {
    is_successful
  }
}
{
  "input": {
    "id": "svc_6HrT3m"
  }
}

sortServices#

Reorder the services (e.g. gift wrapping, assembly, customisation) by passing their IDs in the desired priority order.

Input: SortServicesInput!

NameTypeRequiredDescription
ids
[ID]!
RequiredService IDs in the desired order — the position in the array determines the priority

Returns: SortServicesPayload!

NameTypeRequiredDescription
services
[Service]!
RequiredThe services in their new order

Example#

mutation SortServices($input: SortServicesInput!) {
  sortServices(input: $input) {
    services {
      id
      name
      type
      priority
    }
  }
}
{
  "input": {
    "ids": ["srv_x9k2mQ", "srv_4bT7nW", "srv_8pL3vD"]
  }
}

updateService#

Update a service (such as gift wrapping, assembly or customisation): its name, description, instruction, translations, priority and configuration schema.

Input: UpdateServiceInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the service to update
name
String!
RequiredName of the service
description
String!
RequiredDescription of the service
instruction
String!
RequiredInstruction shown when the service is applied
i18n
[InternationalizationInput]!
RequiredTranslations per locale
priority
Int
OptionalPriority used to order services
schema
JsonObject!
RequiredJSON schema describing the configuration options for the service

Returns: UpdateServicePayload!

NameTypeRequiredDescription
service
Service
OptionalThe updated service

Example#

mutation UpdateService($input: UpdateServiceInput!) {
  updateService(input: $input) {
    service {
      id
      name
      type
      description
      instruction
      priority
      updated_at
    }
  }
}
{
  "input": {
    "id": "svc_4nRt7X",
    "name": "Gift wrapping",
    "description": "Wrap the item in festive gift paper",
    "instruction": "Add a personal message of up to 120 characters",
    "i18n": [
      {
        "locale": "nl-NL",
        "name": "Cadeauverpakking",
        "description": "Verpak het artikel in feestelijk cadeaupapier",
        "instruction": "Voeg een persoonlijk bericht toe van maximaal 120 tekens"
      }
    ],
    "priority": 10,
    "schema": { "type": "object", "properties": { "message": { "type": "string", "maxLength": 120 } } }
  }
}

Projects#

createProject#

Create a project — a time-boxed container for orders tied to an audience, such as a B2B ordering window — with an optional organisation, shipping addresses and metadata.

Input: CreateProjectInput!

NameTypeRequiredDescription
id
String
OptionalOptional client-supplied ID for the project
audience_id
String!
RequiredID of the audience the project belongs to
name
String!
RequiredName of the project
description
String
OptionalDescription of the project
organisation_id
String
OptionalID of the organisation the project is for
shipping
[CreateProjectShippingAddressInput]
OptionalShipping addresses available within the project
metadata
JsonObject
OptionalArbitrary metadata for the project
starts_at
Int64!
RequiredProject start as a Unix timestamp in milliseconds
ends_at
Int64!
RequiredProject end as a Unix timestamp in milliseconds

Returns: CreateProjectPayload!

NameTypeRequiredDescription
project
Project
OptionalThe created project

Example#

mutation CreateProject($input: CreateProjectInput!) {
  createProject(input: $input) {
    project {
      id
      number
      name
      description
      starts_at
      ends_at
      audience {
        id
        name
      }
    }
  }
}
{
  "input": {
    "audience_id": "aud_2Hn6tW",
    "name": "Spring staff uniforms 2026",
    "description": "Ordering window for spring uniforms",
    "organisation_id": "org_7Lp4cV",
    "starts_at": 1772323200000,
    "ends_at": 1774915200000
  }
}

deleteProject#

Permanently delete a project by ID.

Input: DeleteProjectInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the project to delete

Returns: DeleteProjectPayload!

NameTypeRequiredDescription
is_successful
Boolean!
RequiredWhether the project was deleted successfully

Example#

mutation DeleteProject($input: DeleteProjectInput!) {
  deleteProject(input: $input) {
    is_successful
  }
}
{
  "input": {
    "id": "prj_2mKq8Wx"
  }
}

updateProject#

Update an existing project's details, such as its name, description, linked organisation, shipping addresses and start/end dates. Only the fields you provide are changed.

Input: UpdateProjectInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the project to update
name
String
OptionalNew name for the project
description
String
OptionalNew description
organisation_id
String
OptionalID of the organisation the project belongs to
shipping
[CreateProjectShippingAddressInput]
OptionalShipping addresses for the project
metadata
JsonObject
OptionalArbitrary JSON metadata to store on the project
starts_at
Int64
OptionalProject start as a Unix timestamp in milliseconds
ends_at
Int64
OptionalProject end as a Unix timestamp in milliseconds

Returns: UpdateProjectPayload!

NameTypeRequiredDescription
project
Project
OptionalThe updated project

Example#

mutation UpdateProject($input: UpdateProjectInput!) {
  updateProject(input: $input) {
    project {
      id
      number
      name
      description
      starts_at
      ends_at
    }
  }
}
{
  "input": {
    "id": "prj_k2Bv9Q",
    "name": "Office refurbishment 2026",
    "description": "Furniture and fittings for the new Amsterdam office",
    "starts_at": 1767225600000,
    "ends_at": 1782950400000
  }
}

updateProjectContacts#

Replace the set of contacts linked to a project. The provided list of contact IDs becomes the project's full contact list.

Input: UpdateProjectContactsInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the project
contacts
[String]!
RequiredIDs of the contacts to link to the project

Returns: UpdateProjectContactsPayload!

NameTypeRequiredDescription
project
Project
OptionalThe updated project

Example#

mutation UpdateProjectContacts($input: UpdateProjectContactsInput!) {
  updateProjectContacts(input: $input) {
    project {
      id
      number
      name
      contacts {
        id
        name
        email
      }
    }
  }
}
{
  "input": {
    "id": "prj_k2Bv9Q",
    "contacts": ["cnt_8dHw2K", "cnt_5rTz7P"]
  }
}

Agreements#

createAgreement#

Create a payment agreement — such as a down payment, post-paid or cash-on-delivery arrangement — with one or more conditions that define how and when amounts become due.

Input: CreateAgreementInput!

NameTypeRequiredDescription
id
ID
OptionalOptional client-supplied ID for the agreement
is_default_enabled
Boolean!
RequiredWhether the agreement is enabled by default
enabled_rule_set_id
ID
OptionalID of a rule set that determines when the agreement is enabled
type
AgreementType!
RequiredThe kind of agreement
conditions
[AgreementConditionInput]!
RequiredPayment conditions that make up the agreement
name
String!
RequiredName of the agreement
instruction
String
OptionalInstruction text shown to the customer
description
String
OptionalDescription of the agreement
i18n
[InternationalizationInput]!
RequiredLocalized name, description and instruction per locale

Returns: CreateAgreementPayload!

NameTypeRequiredDescription
agreement
Agreement
OptionalThe created agreement

Example#

mutation CreateAgreement($input: CreateAgreementInput!) {
  createAgreement(input: $input) {
    agreement {
      id
      name
      type
      is_default_enabled
      conditions {
        type
        amount
        is_percentage
      }
      created_at
    }
  }
}
{
  "input": {
    "name": "30% down payment",
    "type": "DOWN_PAYMENT",
    "is_default_enabled": true,
    "conditions": [
      {
        "type": "DOWN_PAYMENT",
        "amount": 30,
        "is_percentage": true
      }
    ],
    "i18n": [
      {
        "locale": "nl-NL",
        "name": "30% aanbetaling",
        "description": "Betaal 30% vooraf, de rest bij levering.",
        "instruction": "Voldoe de aanbetaling om de bestelling te bevestigen."
      }
    ]
  }
}

removeAgreement#

Delete an agreement by its ID. Returns whether the removal succeeded.

Input: RemoveAgreementInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the agreement to remove

Returns: RemoveAgreementPayload!

NameTypeRequiredDescription
is_success
Boolean!
RequiredWhether the agreement was removed successfully

Example#

mutation RemoveAgreement($input: RemoveAgreementInput!) {
  removeAgreement(input: $input) {
    is_success
  }
}
{
  "input": {
    "id": "agr_3KpN9v"
  }
}

removeAgreementTemplateForCart#

Remove the agreement template that was set on a cart, so no agreement is generated from it for that cart.

Input: RemoveAgreementTemplateForCartInput!

NameTypeRequiredDescription
cart_id
String!
RequiredThe ID of the cart

Returns: RemoveAgreementTemplateForCartPayload!

NameTypeRequiredDescription
cart
Cart
OptionalThe updated cart

Example#

mutation RemoveAgreementTemplateForCart($input: RemoveAgreementTemplateForCartInput!) {
  removeAgreementTemplateForCart(input: $input) {
    cart {
      id
      number
      total {
        amount
        formatted
      }
      updated_at
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a"
  }
}

removeAgreementTemplateForOrder#

Remove the agreement template that was set on an order, so no agreement is generated from it for that order.

Input: RemoveAgreementTemplateForOrderInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order

Returns: RemoveAgreementTemplateForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation RemoveAgreementTemplateForOrder($input: RemoveAgreementTemplateForOrderInput!) {
  removeAgreementTemplateForOrder(input: $input) {
    order {
      id
      number
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ"
  }
}

setAgreementTemplateForCart#

Attach an agreement template to a cart, so the customer is asked to accept the agreement during checkout.

Input: SetAgreementTemplateForCartInput!

NameTypeRequiredDescription
cart_id
ID!
RequiredThe ID of the cart
agreement_id
ID!
RequiredThe ID of the agreement template to attach

Returns: SetAgreementTemplateForCartPayload!

NameTypeRequiredDescription
cart
Cart
OptionalThe updated cart

Example#

mutation SetAgreementTemplateForCart($input: SetAgreementTemplateForCartInput!) {
  setAgreementTemplateForCart(input: $input) {
    cart {
      id
      number
      total {
        amount
        formatted
      }
      updated_at
    }
  }
}
{
  "input": {
    "cart_id": "72fca344-2a6f-4c3e-b4ca-029920b2522a",
    "agreement_id": "agr_5Tk9Wn"
  }
}

setAgreementTemplateForOrder#

Attach an agreement template to an order, so the customer is asked to accept the agreement as part of the order.

Input: SetAgreementTemplateForOrderInput!

NameTypeRequiredDescription
order_id
ID!
RequiredThe ID of the order
agreement_id
ID!
RequiredThe ID of the agreement template to attach

Returns: SetAgreementTemplateForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetAgreementTemplateForOrder($input: SetAgreementTemplateForOrderInput!) {
  setAgreementTemplateForOrder(input: $input) {
    order {
      id
      number
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "agreement_id": "agr_5Tk9Wn"
  }
}

setAgreementsForOrder#

Set the payment agreements for an order, such as a down payment, post-paid terms, cash on delivery or marketplace settlement. Each agreement defines an amount (or percentage) and when it becomes due.

Input: SetAgreementsForOrderInput!

NameTypeRequiredDescription
order_id
ID!
RequiredThe ID of the order
agreements
[AgreementInput]!
RequiredThe payment agreements to set on the order

Returns: SetAgreementsForOrderPayload!

NameTypeRequiredDescription
order
Order
OptionalThe updated order

Example#

mutation SetAgreementsForOrder($input: SetAgreementsForOrderInput!) {
  setAgreementsForOrder(input: $input) {
    order {
      id
      number
      total {
        amount
        formatted
      }
      status
      updated_at
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "agreements": [
      {
        "type": "DOWN_PAYMENT",
        "Amount": 30,
        "due_after": 1767225600000,
        "is_percentage": true
      },
      {
        "type": "POST_PAID",
        "Amount": 70,
        "due_after": 1769904000000,
        "is_percentage": true
      }
    ]
  }
}

updateAgreement#

Update an existing payment agreement — for example post-paid or down-payment terms — including its conditions, name, instruction and translations.

Input: UpdateAgreementInput!

NameTypeRequiredDescription
id
ID!
RequiredThe ID of the agreement to update
is_default_enabled
Boolean!
RequiredWhether the agreement is enabled by default
enabled_rule_set_id
ID
OptionalID of the rule set that determines when the agreement is enabled
conditions
[AgreementConditionInput]!
RequiredThe payment conditions of the agreement
type
AgreementType!
RequiredThe kind of agreement
name
String!
RequiredName of the agreement
instruction
String
OptionalInstruction shown to the customer
description
String
OptionalDescription of the agreement
i18n
[InternationalizationInput]!
RequiredTranslations of the agreement per locale

Returns: UpdateAgreementPayload!

NameTypeRequiredDescription
agreement
Agreement
OptionalThe updated agreement

Example#

mutation UpdateAgreement($input: UpdateAgreementInput!) {
  updateAgreement(input: $input) {
    agreement {
      id
      name
      type
      is_default_enabled
      updated_at
    }
  }
}
{
  "input": {
    "id": "agr_5Kp2vX",
    "is_default_enabled": true,
    "type": "POST_PAID",
    "name": "Pay after delivery",
    "instruction": "You will receive an invoice after your order has been delivered.",
    "conditions": [
      {
        "type": "POST_PAID",
        "amount": 100,
        "is_percentage": true
      }
    ],
    "i18n": [
      {
        "locale": "nl-NL",
        "name": "Betalen na levering",
        "description": "Betaal binnen 14 dagen na levering.",
        "instruction": "Je ontvangt een factuur nadat je bestelling is geleverd."
      }
    ]
  }
}

Business#

addIntegrationToBusiness#

Link an integration to a business, for either purchase or order processing. The business then uses that integration for the given flow.

Input: AddIntegrationToBusinessInput!

NameTypeRequiredDescription
business_id
String!
RequiredThe ID of the business to link the integration to
integration_id
String!
RequiredThe ID of the integration to link
type
BusinessIntegrationType!
RequiredThe flow the integration is used for

Returns: AddIntegrationToBusinessPayload!

NameTypeRequiredDescription
business
Business
OptionalThe updated business

Example#

mutation AddIntegrationToBusiness($input: AddIntegrationToBusinessInput!) {
  addIntegrationToBusiness(input: $input) {
    business {
      id
      type
      name
      email
      integrations {
        type
      }
    }
  }
}
{
  "input": {
    "business_id": "bus_4TnW8p",
    "integration_id": "int_2QkX5r",
    "type": "PURCHASE"
  }
}

removeIntegrationFromBusiness#

Unlink an integration from a business, so the business no longer uses it for its purchase or order flow.

Input: RemoveIntegrationFromBusinessInput!

NameTypeRequiredDescription
business_id
String!
RequiredThe ID of the business to unlink the integration from
integration_id
String!
RequiredThe ID of the integration to unlink

Returns: RemoveIntegrationFromBusinessPayload!

NameTypeRequiredDescription
business
Business
OptionalThe updated business

Example#

mutation RemoveIntegrationFromBusiness($input: RemoveIntegrationFromBusinessInput!) {
  removeIntegrationFromBusiness(input: $input) {
    business {
      id
      type
      name
      integrations {
        type
      }
    }
  }
}
{
  "input": {
    "business_id": "bus_4TnW8p",
    "integration_id": "int_2QkX5r"
  }
}

Addresses & phone numbers#

createAddress#

Create a standalone address record that can later be linked to contacts, organisations, orders or locations. The response includes validation results for the submitted address.

Input: AddressInput!

NameTypeRequiredDescription
country_code
String
OptionalISO 3166-1 alpha-2 country code (e.g. NL, DE)
administrative_area
String
OptionalState, province or region
locality
String
OptionalCity or town
dependent_locality
String
OptionalNeighbourhood or district within the locality
postal_code
String
OptionalPostal / ZIP code
sorting_code
String
OptionalPostal sorting code (used in some countries)
address_line_1
String
OptionalFull first line of the address
address_line_2
String
OptionalSecond address line
address_line_3
String
OptionalThird address line
thoroughfare
String
OptionalStreet name
premise_number
PremiseNumber
OptionalHouse number — string or integer
premise_number_suffix
String
OptionalApartment/unit suffix (e.g. A, 2B)
organisation
String
OptionalCompany or organisation name at this address
given_name
String
OptionalFirst name on address
additional_name
String
OptionalMiddle name(s) on address
family_name
String
OptionalLast name on address
override
Boolean
OptionalSkip address validation and store the address as-is

Returns: CreateAddressPayload!

NameTypeRequiredDescription
address
Address
OptionalThe created address

Example#

mutation CreateAddress($input: AddressInput!) {
  createAddress(input: $input) {
    address {
      id
      address_line_1
      locality
      postal_code
      country_code
      is_valid
      errors
    }
  }
}
{
  "input": {
    "country_code": "NL",
    "locality": "Groningen",
    "postal_code": "9712 HM",
    "thoroughfare": "Oude Boteringestraat",
    "premise_number": 44,
    "given_name": "Emma",
    "family_name": "de Vries"
  }
}

createPhoneNumber#

Create a phone number record that can be linked to contacts, organisations or orders. The number is parsed and returned in both international and national formats.

Input: PhoneNumberInput!

NameTypeRequiredDescription
country_code
String
OptionalISO 3166-1 alpha-2 country code used to parse national numbers (e.g. NL)
number
String!
RequiredThe phone number, in international (+31612345678) or national format

Returns: CreatePhoneNumberPayload!

NameTypeRequiredDescription
phone_number
PhoneNumber
OptionalThe created phone number

Example#

mutation CreatePhoneNumber($input: PhoneNumberInput!) {
  createPhoneNumber(input: $input) {
    phone_number {
      id
      country_code
      number
      national
      type
    }
  }
}
{
  "input": {
    "country_code": "NL",
    "number": "0612345678"
  }
}

Emails#

sendCancellationEmail#

Send a cancellation confirmation email to the customer for specific items of an order.

Input: SendCancellationEmailInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order
item_ids
[String]!
RequiredThe IDs of the cancelled order items to include in the email

Returns: SendCancellationEmailPayload!

NameTypeRequiredDescription
order
Order
OptionalThe order the email was sent for

Example#

mutation SendCancellationEmail($input: SendCancellationEmailInput!) {
  sendCancellationEmail(input: $input) {
    order {
      id
      number
      status
      is_cancelled
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ",
    "item_ids": ["itm_4Fq8Zw", "itm_9Lp2Vc"]
  }
}

sendQuotationEmail#

Send a quotation email for an order to the customer.

Input: SendQuotationEmailInput!

NameTypeRequiredDescription
order_id
String!
RequiredThe ID of the order to send the quotation for

Returns: SendQuotationEmailPayload!

NameTypeRequiredDescription
order
Order
OptionalThe order the quotation was sent for

Example#

mutation SendQuotationEmail($input: SendQuotationEmailInput!) {
  sendQuotationEmail(input: $input) {
    order {
      id
      number
      status
      total {
        amount
        formatted
      }
    }
  }
}
{
  "input": {
    "order_id": "ord_x9k2mQ"
  }
}

Files#

uploadFile#

Upload a single file and store it at the given path. The file itself is sent as a multipart upload (GraphQL multipart request); the variables carry the path and visibility.

Input: UploadFileInput!

NameTypeRequiredDescription
file
FileUpload!
RequiredThe file to upload

Returns: UploadFilePayload!

NameTypeRequiredDescription
uploaded_file
File
OptionalThe stored file

Example#

mutation UploadFile($input: UploadFileInput!) {
  uploadFile(input: $input) {
    uploaded_file {
      id
      filename
      url
      mime
      is_public
      created_at
    }
  }
}
{
  "input": {
    "file": {
      "is_public": true,
      "path": "/products/images",
      "file": null
    }
  }
}

uploadFiles#

Upload multiple files in a single request. Each file is sent as a multipart upload (GraphQL multipart request) with its own path and visibility.

Input: UploadFilesInput!

NameTypeRequiredDescription
files
[FileUpload]!
RequiredThe files to upload

Returns: UploadFilesPayload!

NameTypeRequiredDescription
uploaded_files
[File]!
RequiredThe stored files, in the same order as the input

Example#

mutation UploadFiles($input: UploadFilesInput!) {
  uploadFiles(input: $input) {
    uploaded_files {
      id
      filename
      url
      mime
      is_public
    }
  }
}
{
  "input": {
    "files": [
      { "is_public": true, "path": "/products/images", "file": null },
      { "is_public": false, "path": "/invoices", "file": null }
    ]
  }
}
Query Runnerhttps://afosto.app/graphql

No query loaded

Click play on any code block in the docs to load a query here.