Skip to main content

Changelog

Developer Changelog

We regularly update our API and provide detailed notes on each release. We first release to staging, then to production about a week later. Learn more about our release process.

: Staging

: Production

💎 Changed

Webhooks

Webhook event type and timestamp in payload body

The nautical_event_type and nautical_event_timestamp fields are now part of every webhook payload body, whereas previously this information was only accessible from the header. For example:

  "nautical_event_type": "nautical_order_created",
"nautical_event_timestamp": "2024-02-22T15:24:19.374608-05:00",

: Staging

: Production

✨ New

Integrations

Firebase Authentication plugin

Added support to connect to Firebase authentication, a tool that supports various sign-in methods, including social logins and email/password combinations. This plugin leverages Firebase's secure user token to authenticate users within Nautical, proving a seamless sign-on experience.

Learn more ->

Integrations

Available shipping methods API field

Added the availableShippingStrategy field to the MarketplaceConfiguration model. This field determines how available shipping methods are calculated for price-based shipping rates.

  • When SELLER_LINES (default), the calculation of available shipping methods for each seller is based solely on that seller's order total.
  • When MARKETPLACE_LINES, the calculation includes the entire marketplace order total for determining available shipping methods for each seller.

🪲 Fixed

Emails

Fixed an issue where the vendor_payout_confirmation email was not being sent after processing payouts.

Vendor mgmt

Fixed an issue where you could not filter sellers with the PAUSED status.

Orders

Fixed an issue where a customer user could use another customer's order token to access details of that order via the API.

: Staging

: Production

🚫 Deprecated

Payouts

Deprecated the payout.penalties field in favor of negative adjustments. This field is scheduled for removal after July 1, 2024.

: Staging

: Production

✨ New

Refunds

Generate refund receipts

Added the ability to generate refund receipts with the invoiceRequest mutation. You must provide the refundId as an argument, for example:

mutation {
invoiceRequest(refundId: "UmVmdW5kOjUzOA==") {
invoice {
id
url
}
}
}
Integrations

PayPal payout plugin

Added the nautical.payments.paypal plugin for using PayPal as the payout gateway.

Integrations

Trolley payout plugin

Added the nautical.payments.trolley plugin for using Trolley as the payout gateway.

💎 Changed

Webhooks

Webhook queue manager logging improvements

Improved the logging of webhook events for queue management plugins, such as Google PubSub. Whereas previously logs were only created for failed transmissions, we now also capture and log successful webhook events.

Webhooks

Seller order number in webhooks

Order webhooks now include the number field, which is populated with the seller order number.

🪲 Fixed

Discounts

Fixed an issue where voucher discounts requiring a minimum order value were applied based on the gross total, including tax, rather than the net order total.

: Staging

: Production

✨ New

Refunds

Order line refunds API

Refund lines can now be scoped to an OrderLine, allowing you to target refunds to specific individual order lines. To achieve this, use the refundLinesAdd mutation and set the refundScope to the id of the desired order line. Additionally, specify the quantity of the order line that should be included in the refund.

Learn more ->

Orders

Draft order lines CSV upload API fields

Added the following mutations for uploading a CSV file to create draft order lines:

  • nauticalOrderLinesCsvUpload
  • orderLinesCsvUpload

The CSV file must have at least three columns: id_type, id, and quantity. See the following sample format:

Example CSV
id_type, id, quantity
NSN, 5669abb7-8c4f-477f-8662-4540af3bcdac, 5
ID, UHJvZHVjdFZhcmlhbnQ6MjEx, 5
SKU, 998323573, 5
ID, UHJvZHVjdFZhcmlhbnQ6MjEz, 5
Taxes

Test taxes plugin

Added a "Nautical Test Taxes" plugin, which can be used for development and testing with taxes.

Within the plugin settings, you can input a single tax percentage, which should fall within the range of 0 to 100%. This plugin respects tax settings such as "Charge taxes on shipping rates" and "All products prices are entered with tax included."

caution

This plugin is intended solely for development and testing and is not for use in production environments.

💎 Changed

Refunds

Tax changes on manual fixed-amount refunds

When processing a manual refund for a fixed amount, taxes are no longer added separately. The fixed amount entered is the after-tax amount.

Fixed amount refunds do not automatically adjust records in the tax engine, such as Avalara. If you need to modify the amount of tax to remit, you must manually create a tax adjustment within Avalara.

: Staging

: Production

💎 Changed

Webhooks

Updated webhook payloads

Updated webhook payloads for the following events to be more structured and robust. The structure and contents of the following webhook payloads have been changed:

  • order_created
  • order_updated
  • order_cancelled
  • order_fully_paid
  • order_fulfilled
  • payment_created

As a result of these changes, existing logic that utilizes the above webhooks should be updated to align with this new webhook format.

Learn more ->

Performance

Performance improvements

Made several API performance improvements around handling orders and refunds, including:

  • Updating shipping on an order
  • Deleting a draft order and deleting draft order lines
  • Processing a refund, including managing refund lines, updating refunds, deleting refunds, and processing refund payments

🪲 Fixed

Checkout

Fixed an issue where the userOverride argument on the checkoutComplete mutation did not override the user assigned to the checkout. Marketplace operators can now override the user during checkout completion using this argument.

Checkout

Fixed an issue where buyers were unable to add digital products to the checkout, particularly when it was the first item being added to the checkout.

Webhooks

Fixed an issue where the order_number, created, and total_gross_amounts fields were missing from the recently updated NauticalOrder webhooks.

Orders

Fixed an issue that could prevent marketplace operators from finalizing draft orders in multi-currency environments, with a 'NoneType' object has no attribute 'unit_price_net' error message.

: Staging

: Production

✨ New

Orders

Metadata on checkout and order lines

Added support for storing metadata on the CheckoutLine, OrderLine, and NauticalOrderLine objects, providing more flexibility in adding custom line-level data within an order.

💎 Changed

Orders

Improved order filtering with the me query

Enhanced the ability for users to filter orders retrieved from the me query. The CustomerOrderFilterInput, which previously only supported filtering by status, now supports many different filter fields.

One such is the ids filter field, which allows users to find a specific order by id.

Learn more ->
Emails

Customer name in order email payloads

Updated the order-related customer SendGrid email payloads to include the recipient_first_name and recipient_last_name fields. If the order is for a guest, these fields will be empty.

Learn more ->

Webhooks

Webhook improvements

Made the following improvements to webhooks:

  • Added the checkout token to checkout webhook payloads.
  • Improved performance for webhooks containing product image URLs.

Learn more ->

Performance

Performance improvements

Made several performance improvements around order management, including:

  • Creating, updating and finalizing draft orders.
  • Completing a checkout.
  • Refreshing taxes on an order.
  • Cancelling a marketplace order, seller order, or quote order.
  • Capturing or voiding a payment on an order.
Payments

Enhanced payment source storage

Improved the ability to store payment sources for Stripe payments:

  • Credit card brand, expMonth, and expYear can now be stored.
  • ACH payment methods can now be saved as a paymentMethodType.

🪲 Fixed

Orders

Fixed an issue where event notifications were not being sent during the NauticalDraftOrderLinesBulkDelete mutation.

Refunds

Fixed an issue preventing full refunds of orders with declined fulfillments.

: Staging

: Production

✨ New

Customer mgmt

Filter customers by active status

Added the isActive boolean filter to the customers query.

Seller mgmt

New seller information fields

Added the following fields to the Seller model:

  • approvedDate
  • firstOrderPlaedDate
  • firstProductCreatedDate

💎 Changed

Webhooks

Updated webhook payloads

Updated webhook payloads for the following events to be more structured and robust. The structure and contents of the following webhook payloads have been changed:

  • nautical_order_created
  • nautical_order_updated
  • nautical_order_fully_paid
  • nautical_order_cancelled

As a result of these changes, existing logic that utilizes the above webhooks should be updated to align with this new webhook format.

Learn more ->

🪲 Fixed

Payouts

Fixed an issue where volume discounts were being incorrectly deducted from seller order payouts.

Integrations

Fixed an issue with the Yotpo Ratings and Reviews app not properly utilizing ProductSchema fields.

Webhooks

Fixed an issue where the variant_created webhook was not triggered upon bulk creation of product variants.

: Staging

As Nautical continues to evolve, APIs undergo periodic reorganization and improvement. Over time, certain APIs that have been deprecated are removed.

We want to make sure you have advanced notice that we are removing a number of deprecated APIs in January 2024. You will need to update any code using the types, inputs, queries, and mutations outlined below.

Many of the API entities being removed have already been replaced with new entities. To ensure your code remains up to date with the latest API, we have provided guidance below on how to update your code accordingly.

These changes will start rolling out on January 19, 2024.

Queries being removed
QueryUpgrade guidance
barcodeLookupN/A
draftOrders.createdUse the filter field instead.
drugLookupN/A
nauticalDraftOrders.createdUse the filter field instead.
NauticalOrders.createdUse the filter field instead.
NauticalOrders.statusUse the filter field instead.
Orders.createdUse the filter field instead.
Orders.statusUse the filter field instead.
serviceAccountUse the app query instead.
serviceAccountsUse the apps query instead.
upcItemDbN/A
webhooksUse the webhooks field on the app or apps query instead.
Mutations being removed
MutationUpgrade guidance
acceptBidUse the bidAccept mutation instead.
accountSetDefaultAddressUse the accountAddressSetDefault mutation instead.
acknowledgeSellerAgreementUse the sellerAgreementAcknowledge mutation instead.
attributeReorderValuesUse the attributeValuesReorder mutation instead.
bulkFulfillmentReturnUse the fulfillmentBulkReturn mutation instead.
checkoutShippingMethodUpdateUse the CheckoutSellerShippingMethodsUpdate mutation.
confirmAccountUse the accountConfirm mutation.
confirmEmailChangeUse the emailChangeConfirm mutation.
createCoreDataUse the coreDataCreate mutation.
createDesigerDataUse the designerDataCreate mutation.
createHashtagUse the hashtagCreate mutation.
createMentionUse the mentionCreate mutation.
createSellerDataUse the sellerDataCreate mutation.
createSellerShellUse the sellerShellCreate mutation.
createSellerUserMappingUse the sellerUserMappingCreate mutation.
createWarehouseUse the warehouseCreate mutation.
deleteBrandingImagesUse the brandingImagesDelete mutation.
deleteMetadataUse the metadataDelete mutation.
deletePrivateMetadataUse the privateMetadataDelete mutation.
deleteWarehouseUse the warehouseDelete mutation.
exportCatalogUse the catalogExport mutation.
exportProductsUse the productsExport mutation.
getPayoutOnboardingLinkUse the vendorPayoutOnboardingLinkRequest mutation.
importCatalogUse the catalogImport mutation.
importProductsUse the productsImport mutation.
nauticalOrderRefundUse the refundCreate mutation instead and then add the nautical order using the refundLinesAdd mutation.
orderCaptureDirect capture against seller orders is unsupported as Payments are only attached to the NauticalOrder. Use nauticalOrderCapture instead.
orderFulfillmentUpdateReturnStatusUse the fulfillmentBulkReturn mutation instead.
orderMarkAsPaidDirect update of seller orders to paid is unsupported as Payments are only attached to the NauticalOrder. Use nauticalOrderMarkAsPaid instead.
orderRefundUse the refundCreate mutation instead and then add the order using the refundLinesAdd mutation.
orderVoidDirect void against seller orders is unsupported as Payments are only attached to the NauticalOrder. Use nauticalOrderVoid instead.
paymentRefundUse the refundCreate mutation instead and then utilize the refundPaymentsAdd mutation.
productVariantReorderUse the productReorderVariants mutation.
rejectBidUse the bidReject mutation.
requestEmailChangeUse the emailChangeRequest mutation.
requestPasswordResetUse the passwordRequestReset field.
sellerAddNoteUse the sellerNoteCreate mutation.
sendQuoteToCustomerUse the nauticalQuoteOrderSendToCustomer mutation.
serviceAccountCreateUse the appCreate mutation instead.
serviceAccountDeleteUse the appDelete mutation instead.
serviceAccountTokenCreateUse the appTokenCreate mutation instead.
serviceAccountTokenDeleteUse the appTokenDelete mutation instead.
serviceAccountUpdateUse the appUpdate mutation instead.
setPasswordUse the passwordSet mutation.
setWishlistAsDefaultUse the wishlistSetDefault mutation.
submitRatingAndReviewUse the productReviewSubmit mutation instead.
updatebrandingUse the brandingUpdate mutation
updateCoreDataUse the coreDataUpdate mutation.
updateDesignerDataUse the designerDataUpdate mutation.
updateMetadataUse the metadataUpdate mutation.
updatePrivateMetadataUse the privateMetadataUpdate mutation.
updateSellerDataUse the sellerDataUpdate mutation.
updateSellerSettingsUse the sellerSettingsUpdate mutation.
updateWarehouseUse the warehouseUpdate mutation.
variantImageAssignUse the productVariantImageAssign mutation instead.
variantImageUnassignUse the productVariantImageUnassign mutation instead.
Inputs being removed
InputUpgrade guidance
AppInput.isActiveUse the appActivate and appDeactivate mutations instead.
AttributeInput.valueUse values instead.
CheckoutCustomerAttach.customer_idThe ID of the customer. To identify a customer you should authenticate with JWT.
DetailedSellerInput.statusThis field will be ignored in the mutation and a seller will be created in pending status
DocumentAdd.documentIdTo attach a document to related instances, use documentAttach mutation instead.
DocumentAdd.idsTo attach a document to related instances, use documentAttach mutation instead.
DraftOrderInput.discountUse nauticalOrderUpdateApplyVoucherCode mutation instead.
DraftOrderInput.shippingMethodUnsupported field. Use orderUpdateShipping mutation instead.
DraftOrderInput.voucherUse nauticalOrderUpdateApplyVoucherCode mutation instead.
NauticalHistoricalOrderInput.shippingMethodUse nauticalOrderUpdateShipping mutation instead.
WebhookCreateInput.serviceAccountUse the app field instead.
WebhookUpdateInput.serviceAccountUse the app field instead.
Types being removed
TypeUpgrade guidance
*.*.errorsRemoval impacts all mutations that have the errors field. Use typed errors with error codes, for example checkoutErrors.
Category.urlN/A
Checkout.availableShippingMethodsUse the availableShippingMethodsBySeller field instead.
Money.localizedPrice formatting according to the current locale should be handled by the frontend client.
NauticalOrder.availableShippingMethodsUse the availableShippingMethodsBySeller field instead.
NauticalOrderLine.quantityUse the more explicit quantityOrdered instead.
NauticalOrderLine.quantityFulfilledMarketplace Orders are not fulfilled. Use quantityFulfilled on the seller OrderLine instead.
NauticalSecondaryOrderLine.quantityUse the more explicit quantityOrdered instead.
OrderLine.quantityUse the more explicit quantityOrdered instead.
Product.urlN/A
ProductVariant.isAvailableUse the stocks field instead.
ProductVariant.quantityUse the stocks field instead.
ProductVariant.quantityAllocatedUse the stocks field instead.
ProductVariant.stockQuantityUse the quantityAvailable field instead.
SecondaryOrderLine.quantityUse the more explicit quantityOrdered instead.
Webhook.serviceAccountUse the app field instead.

: Staging

: Production

✨ New

Orders

Recurring billing (Alpha)

Introducing the ability to set up recurring orders, allowing you to create subscription-based offerings with customizable frequencies and durations. For example, you can offer subscriptions on a monthly, weekly, or daily basis.

Customers' payment information is securely stored in the payment gateway, such as Stripe, and used for future payments.

  • Transform a standard checkout into a recurring order using the checkoutConvertToSubscription. Learn more ->

  • Manually initiate a recurring order with the subscriptionCreate mutation. Learn more ->

  • Retrieve details of recurring orders using the subscriptions query. Learn more ->

Payments

Save cards for future payment (Alpha)

Introduced the ability to save and reuse payment methods for future transactions:

  • Within user.storedPaymentSources, you can now query the id field to retrieve a stored payment method token for a customer. Learn more ->

  • The paymentInformation.paymentMethodToken input field in the getClientSecret query enables processing payments using a payment source id obtained from user.storedPaymentSources, instead of entering full payment details. Learn more ->

Vendor mgmt

Sort sellers by creation date

Added the ability to sort sellers by the created field using the sortBy argument.

💎 Changed

Webhooks

Updated webhook payloads

Updated webhook payloads for the following events to be more structured and robust. The structure and contents of the following webhook payloads have been changed:

  • checkout_created
  • checkout_updated
  • fulfillment_created

As a result of these changes, existing logic that utilizes the above webhooks should be updated to align with this new webhook format.

Learn more ->

Catalog

Enhanced product pricing fields

All fields within the ProductPricingInfo and VariantPricingInfo types are now non-nullable.

Also, when multicurrency is disabled, the currency-related fields will now return values in the local domiciled currency.

Payments

Token required for payment gateways

All gateways now require tokens to be supplied to checkoutPaymentCreate or nauticalOrderPaymentCreate.

This should not impact any existing checkouts, as Stripe payments already required a payment token.

Integrations

Version for plugins

Added the version field to the plugins model.

🪲 Fixed

Integrations

Fixed an issue where Stripe webhooks could refund events to Nautical on cancellations in some cases.

Payments

Fixed an isse where capture_failed transactions sometimes failed to display an error message.

Checkout

Fixed an isse with converting a checkout to a quote ordder with a null shipping method.

🚫 Deprecated

Integrations

Removed VATLayer plugin

Removed the VATLayer plugin, which has not been supported for some time.

Payments

Removed purchase order plugin

The purchase_order payment gateway has been removed.

Payments

Removed credit limits model

Removed the CreditLimits model, which was not in use.

Webhooks

Removed invoice webhooks

Removed invoice webhooks, which were not in use.

Designer

Removed translations

Removed the translation model.

Permissions

Removed deprecated permissions

Removed the manage_gift_cards and manage_credit_limits permissions.

Was this page helpful?