Skip to main content

521 posts tagged with "API"

View All Tags

: Staging

: Production

✨ New

Payouts

Financial ledgers with queryable journals​

Added a new financial modelling system, using double-entry accounting that automatically records data to a balanced ledger through various order and payout related events.

This updated model aligns with ASC 606 revenue recognition standards, providing a clear and auditable financial trail of how revenue is recognized and split between the marketplace and its sellers. Central to this feature is the MarketplaceConfiguration.revenueAccrualStrategy field, which determines how revenue is recognized in alignment with your operational needs.

Feature Enablement

For marketplaces to benefit from this new feature, a Nautical representative must enable it. Contact Nautical Support for assistance.

You can leverage the journalEntries query to view journal entries, using filters like order ID or journal entry type via JournalEntryFilterInput. Here's a sample GraphQL query and response that demonstrates how you can retrieve the first 10 journalEntries related to a marketplace order:

Request
query {
journalEntries(
filter: { nauticalOrderIds: "TmF1dGljYWxPcmRlcjoxNjU4" }
first: 10
sortBy: { direction: ASC, field: DATE }
) {
edges {
node {
id
type
description
createdAt
order {
id
}
ledgerEntries {
ledgerBalance {
baseAmount
}
ledger {
id
type
accountType
balance {
baseAmount
}
}
}
}
}
}
}
Show more ↓
Response
{
"data": {
"journalEntries": {
"edges": [
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyNzk=",
"type": "ORDER_PLACED",
"description": "NauticalOrder TmF1dGljYWxPcmRlcjoxNjU4 placed",
"createdAt": "2024-03-12T13:28:47.755267+00:00",
"order": null,
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": -9552473
},
"ledger": {
"id": "TGVkZ2VyOjM=",
"type": "DEFERRED_SALES_REVENUE",
"accountType": "REVENUE",
"balance": {
"baseAmount": -10014369
}
}
},
{
"ledgerBalance": {
"baseAmount": -975237
},
"ledger": {
"id": "TGVkZ2VyOjEw",
"type": "SALES_TAX",
"accountType": "LIABILITY",
"balance": {
"baseAmount": -1024184
}
}
},
{
"ledgerBalance": {
"baseAmount": -274000
},
"ledger": {
"id": "TGVkZ2VyOjI=",
"type": "DEFERRED_SHIPPING_REVENUE",
"accountType": "REVENUE",
"balance": {
"baseAmount": -314000
}
}
},
{
"ledgerBalance": {
"baseAmount": 8681638
},
"ledger": {
"id": "TGVkZ2VyOjE1OQ==",
"type": "CUSTOMER_RECEIVABLE",
"accountType": "ASSET",
"balance": {
"baseAmount": 8617168
}
}
}
]
}
},
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyODA=",
"type": "PAYMENT_CAPTURED",
"description": "Payment UGF5bWVudDoxMjkx captured",
"createdAt": "2024-03-12T13:29:05.541593+00:00",
"order": null,
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": 10050882
},
"ledger": {
"id": "TGVkZ2VyOjU=",
"type": "FUNDS_PAYMENTS",
"accountType": "ASSET",
"balance": {
"baseAmount": 10183826
}
}
},
{
"ledgerBalance": {
"baseAmount": 8362918
},
"ledger": {
"id": "TGVkZ2VyOjE1OQ==",
"type": "CUSTOMER_RECEIVABLE",
"accountType": "ASSET",
"balance": {
"baseAmount": 8617168
}
}
}
]
}
},
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyODE=",
"type": "ORDER_ACCRUED",
"description": "OrderLine T3JkZXJMaW5lOjU2MTQ= accrued",
"createdAt": "2024-03-12T13:29:15.517609+00:00",
"order": {
"id": "T3JkZXI6Mjg5NQ=="
},
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": -9531073
},
"ledger": {
"id": "TGVkZ2VyOjM=",
"type": "DEFERRED_SALES_REVENUE",
"accountType": "REVENUE",
"balance": {
"baseAmount": -10014369
}
}
},
{
"ledgerBalance": {
"baseAmount": 124120
},
"ledger": {
"id": "TGVkZ2VyOjY0",
"type": "SELLER_PAYABLE",
"accountType": "LIABILITY",
"balance": {
"baseAmount": 181900
}
}
}
]
}
},
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyODI=",
"type": "COMMISSION",
"description": "OrderLine T3JkZXJMaW5lOjU2MTQ= commission",
"createdAt": "2024-03-12T13:29:15.517719+00:00",
"order": {
"id": "T3JkZXI6Mjg5NQ=="
},
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": 127330
},
"ledger": {
"id": "TGVkZ2VyOjY0",
"type": "SELLER_PAYABLE",
"accountType": "LIABILITY",
"balance": {
"baseAmount": 181900
}
}
},
{
"ledgerBalance": {
"baseAmount": -2939495
},
"ledger": {
"id": "TGVkZ2VyOjc=",
"type": "MARKETPLACE_COMMISSION",
"accountType": "REVENUE",
"balance": {
"baseAmount": -2997415
}
}
}
]
}
},
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyODM=",
"type": "SHIPPING_ACCRUED",
"description": "Order T3JkZXI6Mjg5NQ== shipping accrued",
"createdAt": "2024-03-12T13:29:15.517770+00:00",
"order": {
"id": "T3JkZXI6Mjg5NQ=="
},
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": -272000
},
"ledger": {
"id": "TGVkZ2VyOjI=",
"type": "DEFERRED_SHIPPING_REVENUE",
"accountType": "REVENUE",
"balance": {
"baseAmount": -314000
}
}
},
{
"ledgerBalance": {
"baseAmount": -541850
},
"ledger": {
"id": "TGVkZ2VyOjk=",
"type": "MARKETPLACE_FEES",
"accountType": "REVENUE",
"balance": {
"baseAmount": -536950
}
}
}
]
}
},
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyODQ=",
"type": "ORDER_ACCRUED",
"description": "OrderLine T3JkZXJMaW5lOjU2MTU= accrued",
"createdAt": "2024-03-12T13:29:15.691871+00:00",
"order": {
"id": "T3JkZXI6Mjg5Ng=="
},
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": -9256073
},
"ledger": {
"id": "TGVkZ2VyOjM=",
"type": "DEFERRED_SALES_REVENUE",
"accountType": "REVENUE",
"balance": {
"baseAmount": -10014369
}
}
},
{
"ledgerBalance": {
"baseAmount": 978750
},
"ledger": {
"id": "TGVkZ2VyOjY1",
"type": "SELLER_PAYABLE",
"accountType": "LIABILITY",
"balance": {
"baseAmount": 1572500
}
}
}
]
}
},
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyODU=",
"type": "COMMISSION",
"description": "OrderLine T3JkZXJMaW5lOjU2MTU= commission",
"createdAt": "2024-03-12T13:29:15.692001+00:00",
"order": {
"id": "T3JkZXI6Mjg5Ng=="
},
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": 1020000
},
"ledger": {
"id": "TGVkZ2VyOjY1",
"type": "SELLER_PAYABLE",
"accountType": "LIABILITY",
"balance": {
"baseAmount": 1572500
}
}
},
{
"ledgerBalance": {
"baseAmount": -2980745
},
"ledger": {
"id": "TGVkZ2VyOjc=",
"type": "MARKETPLACE_COMMISSION",
"accountType": "REVENUE",
"balance": {
"baseAmount": -2997415
}
}
}
]
}
},
{
"node": {
"id": "Sm91cm5hbEVudHJ5OjEyODY=",
"type": "SHIPPING_ACCRUED",
"description": "Order T3JkZXI6Mjg5Ng== shipping accrued",
"createdAt": "2024-03-12T13:29:15.692050+00:00",
"order": {
"id": "T3JkZXI6Mjg5Ng=="
},
"ledgerEntries": [
{
"ledgerBalance": {
"baseAmount": -266500
},
"ledger": {
"id": "TGVkZ2VyOjI=",
"type": "DEFERRED_SHIPPING_REVENUE",
"accountType": "REVENUE",
"balance": {
"baseAmount": -314000
}
}
},
{
"ledgerBalance": {
"baseAmount": -547350
},
"ledger": {
"id": "TGVkZ2VyOjk=",
"type": "MARKETPLACE_FEES",
"accountType": "REVENUE",
"balance": {
"baseAmount": -536950
}
}
}
]
}
}
]
}
}
}
Show more ↓

Learn more ->

💎 Changed

Webhooks

Voucher data in order webhooks​

The voucher field is now part of all order and nauticalOrder webhook payloads, providing the following voucher data: id, name, type, discountValue, and discountValueType.

Emails

Order line metadata in email payloads​

Non-private metadata for orderLines and nauticalOrderLines will now be included in all order-related email payloads. Update your email templates to make use of order line metadata.

🪲 Fixed

Discounts

Fixed an issue where vouchers created with the option "Specific products" selected caused items to be discounted automatically without entering the voucher code.

: Staging

: Production

✨ New

Orders

Order payouts summary​

Added a new payoutsSummary field on the Order object, providing a quick overview of payout status and amounts for marketplace orders.

Orders

Refund ledger tracking​

Refunds are now automatically recorded in financial ledgers, providing better accounting and auditability for order refunds across sellers.

✨ New

Attributes

Custom field templates​

Introduced custom field templates for product attributes, allowing you to define reusable attribute configurations and apply them consistently across your catalog.

Attributes

Date attribute values​

Attribute values can now be resolved as dates, enabling more flexible product data modeling for time-based attributes.

✨ New

API

Ledger data backfill​

Added a mutation to backfill historical ledger data, helping ensure financial records are complete for existing orders and refunds.

💎 Changed

Products

Product type input simplification​

When creating products, the productType ID is now specified directly in the ProductInput rather than nested in ProductCreateInput, simplifying the mutation structure.

🪲 Fixed

Orders

Fixed an issue where cancelled refunds could be double-counted in order totals.

Orders

Fixed an issue where refunding cancelled orders would incorrectly adjust sales tax calculations.

Orders

Fixed an issue where refunding discounted orders that were later cancelled could result in incorrect ledger entries.

🪲 Fixed

Discounts

Fixed an issue where applying voucher codes could use invalid vouchers with the same code instead of the active one.

🪲 Fixed

Products

Fixed an issue where the is_visible field could not be updated via mutation.

🪲 Fixed

API

Fixed an issue where the JournalEntry.refund relationship was not accessible via the API.

: Staging

: Production

✨ New

Catalog

Visibility field for collections​

Added the isVisible boolean field to the collection object.

Vendor mgmt

New seller statuses​

Added the following statuses to the SellerStatus enum:

  • SUSPENDED
  • BANNED
  • DEACTIVATED

💎 Changed

Orders

Customer order count​

Changed customer.numOrders to resolve the total number of marketplace orders instead of seller orders.

🪲 Fixed

Emails

Fixed an issue preventing the order refund confirmation and CSV export emails from sending.

Integrations

Fixed an issue with Stripe webhook processing to handle webhook errors appropriately.

: Staging

: Production

✨ New

Payouts

Payout ledger integration​

Payouts are now tracked through the ledger system, providing improved accuracy and transparency. Payout data is now connected to orders, enabling better financial reporting and reconciliation.

Payouts

Payout fee visibility​

Fees associated with vendor payouts are now exposed in the payout summary, giving sellers clearer insight into their earnings.

✨ New

Orders

Order payout status tracking​

Orders now include a payoutStatus field that reflects the current payout state based on ledger data, making it easier to track which orders have been paid out to sellers.

Orders

Available payout balance​

Added availablePayoutBalance to orders, showing the amount that can be paid out to sellers at any given time.

Orders

Seller commission tracking​

Orders now include a sellerCommission field that calculates commission amounts directly from ledger data.

✨ New

Seller mgmt

Additional seller status options​

Added new seller status options including "Suspended," "Banned," and "Deactivated" to provide more granular control over seller accounts.

✨ New

Products

Product type cascading deletion​

When deleting a product type where require_product_types is enabled, all associated variants and products are now automatically removed, simplifying product type management.

Products

Collection visibility control​

Collections now include an isVisible field, allowing marketplace operators to control which collections are displayed to customers.

💎 Changed

Orders

Order fulfillment and cancellation improvements​

Made several improvements to order handling:

  • Fulfillment cancellations now update ledgers appropriately to maintain accurate financial records.
  • Order cancellations are properly recorded in the ledger system.
  • Declining fulfillments now correctly updates ledger entries.
  • The system now accurately determines when a seller's portion of an order is completely fulfilled.

🪲 Fixed

Orders

Fixed an issue where the nauticalOrderByToken query could allow sellers to access orders that didn't belong to them.

Orders

Fixed an issue where digital fulfillment revenue wasn't being accrued correctly in the ledger system.

🪲 Fixed

Customer mgmt

Fixed an issue where the customer.numOrders field was counting individual seller orders instead of marketplace-level orders.

🪲 Fixed

Emails

Fixed an issue with SendGrid email payloads that could cause emails to fail when data wasn't in the correct format.

: 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

Payouts

Ledger-based payout system​

Introduced a new ledger-based payout system that provides more accurate financial tracking and reporting. Payouts can now be connected to individual fulfillment lines, enabling more granular commission calculations and financial record-keeping.

API

Journal entry queries​

Added the ability to query journal entries through the API, providing visibility into financial transaction records for accounting and reconciliation purposes.

Emails

Analytics integration for internal testing​

Enabled analytics tracking on emails for internal testing purposes, allowing the team to monitor email performance and engagement.

💎 Changed

Payouts

Enhanced payout validation​

Added validation to prevent multiple draft payouts from being created simultaneously, ensuring data consistency and preventing potential conflicts in the payout workflow.

🪲 Fixed

API

Fixed several issues to improve system reliability:

  • Resolved ledger-related issues discovered during end-to-end testing
  • Corrected field definitions for the Ledger API type
  • Fixed data mapping issues that could cause inconsistencies
  • Resolved fixture file problems affecting development and testing environments

: 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

✨ New

Payments

Enhanced payment ledger tracking​

Payments can now be connected to journal entries, providing better tracking of payment transactions in the accounting system. When payments are captured, they are automatically recorded in the ledger, improving financial accuracy and reporting.

✨ New

Customer mgmt

Guest customer receivable ledger​

Added support for tracking receivables for guest customers, ensuring accurate financial records even when customers check out without creating an account.

✨ New

Orders

Automated ledger recording for orders​

Order finalization now automatically records transactions to the ledger, including:

  • Revenue recognition based on marketplace configuration
  • Commission calculations per seller order
  • Agreement fees tracking
  • Discount accruals
  • Manual fee recording

Marketplace operators can now configure when orders accrue revenue (on placement or finalization), giving more control over financial reporting.

✨ New

API

Refresh tokens for customer authentication​

The createCustomerToken mutation now returns refresh tokens along with JWT tokens, improving the authentication flow and session management for customers.

API

Enhanced user type differentiation​

Firebase registration now properly differentiates between buyers, sellers, and staff users, providing better user management and authentication handling.

✨ New

Shipping

Explicit shipping strategy configuration​

Marketplace operators can now explicitly configure the shipping calculation strategy (net vs. gross pricing) in marketplace settings, providing more control over how shipping costs are calculated and displayed.

💎 Changed

Performance

Performance improvements​

Made several performance improvements across the platform:

  • Commission calculations are now optimized for partial quantities
  • Ledger insertions are now batched, reducing database overhead
  • Journal entry creation during order placement is more efficient

🪲 Fixed

Payouts

Fixed issues with payout confirmation emails that could fail to send in certain scenarios.

Seller mgmt

Fixed an issue where filtering for paused sellers was not working correctly.

API

Fixed an issue where API requests on non-API routes could fail if the app context was not properly initialized.

Orders

Fixed permissions so that orders are now only accessible to users with manager-orders permissions, improving security and data access control.

Shipping

Fixed calculation issues with available shipping methods to use gross totals instead of net totals, ensuring accurate shipping cost calculations.

Discounts

Fixed an issue where sale discounts were not being included in ledger transactions.

: 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

Integrations

Firebase plugin OAuth support​

Added OAuth authentication support for the Firebase plugin, enabling more secure integration options.

Payouts

Ledger system foundation​

Introduced a new ledger system for tracking financial transactions across the marketplace. This includes:

  • Automatic ledger creation for all sellers and buyers
  • Feature flags to control ledger functionality rollout
  • Enhanced payout tracking capabilities

This foundational work will enable more detailed financial reporting and transaction tracking in future releases.

💎 Changed

Products

Document upload size increase​

Increased the maximum allowed document upload size from 5 MB to 15 MB, making it easier to upload larger product documentation and images.

Products

Default variant management improvements​

Product creation and updates now handle default variants more flexibly in certain edge cases, improving the product management experience.

🪲 Fixed

Payouts

Fixed an issue where vendor payout fees were using an incorrect field name, which could cause payout calculations to fail.

Payments

Resolved an issue affecting affiliate order handling when gross amounts and taxes were removed from calculations.

API

Fixed migration dependency issues that could prevent fresh installations from completing successfully.

Was this page helpful?