💎 Changed
Enhanced invoice header with marketplace information
When the marketplace logo is unavailable, the upper left header of customer and proforma invoices now displays the marketplace name and contact information.
When the marketplace logo is unavailable, the upper left header of customer and proforma invoices now displays the marketplace name and contact information.
New webhooks have been added for the STOCK_CREATED
and STOCK_UPDATED
events.
Toggle the following tabs to see example webhook payloads:
[
{
"id": "U3RvY2s6MzU5",
"new": {
"quantity": 110,
"quantity_allocated": 0,
"quantity_available": 110,
},
"old": {
"quantity": 10,
"quantity_allocated": 0,
"quantity_available": 10,
},
"type": "Stock",
"warehouse_id": "V2FyZWhvd...",
"warhouse_name": "Americas",
"product_variant_id": "UHJvZHVj..."
}
]
[
{
"id": "U3RvY2s6MzU5",
"new": {
"quantity": 10,
"quantity_allocated": 0,
"quantity_available": 10,
},
"old": {},
"type": "Stock",
"warehouse_id": "V2FyZWhvd...",
"warhouse_name": "Americas",
"product_variant_id": "UHJvZHVj..."
}
]
Document handling has been enhanced for greater security. Documents are now stored in a private container, accessible through secure URLs with time-limited access tokens.
By default, these URLs are valid for one day but can be adjusted upon request. When sharing URLs with customers, they will have a limited timeframe to access them. The document URL stored in the API and Dashboard will always return the most recent signed URL.
This change applies to digital_contents
on products, documents
attached to objects such as customers or products, export_files
, import_files
, and invoices
. Previously added documents remain compatible with this change.
The updated
datetime field has been added to the fulfillment
object model and related webhooks.
ShippyPro is no longer supported and it has been removed from the list of natively supported applications.
Fixed an issue where the "Price" column on customer and proforma invoices displayed the price including tax instead of the net price of the product.
Fixed an issue that prevented customers from checking out when all products in the cart had taxes turned off.
Fixed an issue where a seller admin was unable to assign an image to a product variant they owned if the marketplace operator had previously attempted to assign the same image.
Fixed an issue where marketplace operators were unable to upload or assign images for a product or variant owned by a seller when strict product image handling was enabled.
Extended the accountRegister
mutation to support new input fields and adding default addresses when creating accounts.
The following fields have been added to the AccountRegisterInput
:
firstName
lastName
defaultBillingAddress
defaultShippingAddress
Extended the sellerWithOwnerCreate
mutation to accept metadata for the seller
or the user
being created as part of the mutation, through the metadata
field.
Furthermore, the sellerWithOwnerCreate
mutation can now be run with a custom app bearer authentication token.
The DetailedSellerInput.status
field, which is used in the sellerWithOwnerCreate
mutation, has been deprecated.
Going forward, this field will be ignored. The seller will always be created in the PENDING
state.
Fixed an issue where the API could return a 500 error and prevent checkout after receiving a 404 error from Stripe when trying to find a PaymentIntent
.
A new HTTP_COUNTRYCODE
header is supported, which allows you to override the default IP-based customer location detection and specify the country directly.
Performance has been improved for checkouts requiring currency conversion.
Fixed an issue where orders containing only untaxed items resulted in an Avalara error.
Fixed a permission issue with querying microsites with a JWT token associated with a buyer account.
Release notes for version 1.4.1 were skipped due to an internal deployment. Changes from version 1.4.1 are included in these notes.
Added warehouseStats
to the product
query, which will return aggregated stock quantities for all of a product's variants.
query {
products(last: 15) {
edges {
node {
id
name
warehousesStats {
warehouseId
quantity
quantityAllocated
quantityAvailable
}
}
}
}
}
Fixed a permission check issue with the retrieving the identification
field through a seller query.
Fixed an issue where you could not query products for a seller.
Added more control over the visibility of product variants in the storefront through the API. To accomplish this, a new isPublished
field has been added to the variant
object.
This field behaves similarly to the same field for products to control the visibility of each variant in your storefront. When the isPublished
flag is set to true, the variant will be displayed to your customers. Conversely, setting the flag to false will hide the variant from the storefront.
mutation {
productVariantUpdate(
id: "UHJvZHVjdFZhcmlhbnQ6MzU0Mg=="
input: { isPublished: false }
) {
productVariant {
name
id
description
isPublished
product {
name
id
isPublished
}
}
}
}
The parent product's published status takes precedence over all variants' published status. In other words, if a product has its isPublished
flag set to false, regardless of the isPublished
value of its variants, all variants will remain hidden from the storefront until the product itself is published.
Added validation logic to prevent the deletion of a product or variant if it is associated with an active order, including draft, quote, or offer orders. An order is considered active when it is not in the fulfilled, delivered, or cancelled state.
Added the vendorPayout
query to return information about a single vendor payout.
{
vendorPayout(id: "VmVuZG9yUGF5b3V0OjY4") {
seller {
id
companyName
}
gross
taxes
net
shipping
commission
payoutAmount
currency
status
statusMessage
orders(first: 15) {
totalCount
edges {
node {
lines {
productName
}
}
}
}
}
}
The customerTaxCertificates
query can now return the download URL for an image of a customer's Avalara tax certificate.
query {
customerTaxCertificates(
id: "VXNlcjox"
)
{
documentExists
id
filename
downloadUrl
}
}
The ORDER_FULFILLED
webhook payload has been updated to return information about the associated seller and warehouse.
Fixed an issue where editing product descriptions could lead to errors with the DescriptionHTML
field when paragraphs were not wrapped in a <p>
tag.
Fixed an issue with ShipStation integrations where orders could be blocked from being created or updated in certain circumstances.
Fixed an issue with Avalara integrations where the tax_included
value sent to Avalara was not respecting the marketplace global tax treatment setting.
Fixed an issue where the taxRate
for order lines could be slightly rounded, due to supporting a numeric value with only two decimal points of precision. Now, tax rates are returned with six decimal point precision.
This feature allows for personalized sorting of products according to their designated sort priority weight.
You can assign a value to each product using the newly introduced sortPriorityWeight
field. You can then arrange the products in ascending or descending order, based on their priority weights, through the SORT_PRIORITY_WEIGHT
sorting method.
This new sorting feature gives you more freedom to arrange your products the way you want in your storefront. For example, you can make popular or sponsored products appear first by assigning them higher priority weights.
{
products(
first: 25
sortBy: {
field: SORT_PRIORITY_WEIGHT,
direction: ASC
}
) {
edges {
node {
id
name
description
sortPriorityWeight
}
}
}
}
Significant performance improvements have been made to the checkout process, resulting in faster speeds, particularly for shopping carts with a large number of line items (25 or more).
Fixed a security vulnerability issue with the password reset flow, where the system would present an error if the email was incorrect or inactive.
Fixed an issue where changing the quantity of an order line in a draft order reduced the variant's price for the order.
Added the checkoutNoteUpdate
mutation to update a given checkout with a note.
Added the checkoutSellerShippingMethodsBulkUpdate
mutation to update the shipping method of multiple sellers on the same checkout.
Added the ability to add and delete granular commissions to marketplace agreements through the agreementCommissionCreate
and agreementCommissionDelete
mutations. Currently, the only supported type of granular commission is category
.
Various performance improvements have been made to improve speeds of checkout and order related operations.
Added the discountType
field to the checkout
object, which can be queried to return the type of discount applied to a given checkout.
Added the availableImages
field on the ProductVariant object, which can be queried to list the images available for assignment to a given variant.
shop.builderKey
field could cause a GraphQL error of 'NoneType' object has no attribute 'replace'
. productBulkPublish
and productBulkSetCategory
mutations check for the seller's ownership before allowing them to run the mutation. ORDER_UPDATE
webhook job did not capture tracking information when the fulfillment was triggered from a 3rd-party source, such as Shopify.