@mercurjs/docs 2.2.1 → 2.3.0-canary.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/content/home.mdx +107 -0
- package/content/learn/architecture.mdx +168 -83
- package/content/learn/introduction.mdx +161 -56
- package/content/learn/migration-to-2-0.mdx +187 -0
- package/content/learn/why-mercur.mdx +91 -0
- package/content/platform/attribute/concepts/attribute-types.mdx +59 -0
- package/content/platform/attribute/concepts/global-vs-inline.mdx +50 -0
- package/content/platform/attribute/concepts/variant-axes.mdx +61 -0
- package/content/platform/attribute/guides/attach-attributes-to-a-product.mdx +69 -0
- package/content/platform/attribute/guides/create-a-variant-axis.mdx +83 -0
- package/content/platform/attribute/guides/create-an-attribute.mdx +81 -0
- package/content/platform/attribute/overview.mdx +87 -0
- package/content/platform/attribute/reference/data-models.mdx +56 -0
- package/content/platform/attribute/reference/events.mdx +41 -0
- package/content/platform/attribute/reference/links.mdx +45 -0
- package/content/platform/attribute/reference/service.mdx +49 -0
- package/content/platform/attribute/reference/workflows.mdx +45 -0
- package/content/platform/catalog/concepts/master-products.mdx +54 -0
- package/content/platform/catalog/concepts/product-seller-allowlist.mdx +48 -0
- package/content/platform/catalog/concepts/status-lifecycle.mdx +58 -0
- package/content/platform/catalog/concepts/variants-categories-collections.mdx +49 -0
- package/content/platform/catalog/guides/allowlist-stores.mdx +59 -0
- package/content/platform/catalog/guides/create-a-master-product.mdx +70 -0
- package/content/platform/catalog/guides/publish-or-reject-a-product.mdx +79 -0
- package/content/platform/catalog/overview.mdx +90 -0
- package/content/platform/catalog/reference/data-models.mdx +66 -0
- package/content/platform/catalog/reference/events.mdx +41 -0
- package/content/platform/catalog/reference/links.mdx +44 -0
- package/content/platform/catalog/reference/service.mdx +52 -0
- package/content/platform/catalog/reference/workflows.mdx +40 -0
- package/content/platform/commission/concepts/order-commission-lines.mdx +65 -0
- package/content/platform/commission/concepts/rule-matching.mdx +86 -0
- package/content/platform/commission/concepts/rules-and-rates.mdx +84 -0
- package/content/platform/commission/guides/batch-update-rules.mdx +58 -0
- package/content/platform/commission/guides/create-a-rate.mdx +72 -0
- package/content/platform/commission/guides/refresh-order-commission-lines.mdx +55 -0
- package/content/platform/commission/overview.mdx +86 -0
- package/content/platform/commission/reference/data-models.mdx +75 -0
- package/content/platform/commission/reference/events.mdx +58 -0
- package/content/platform/commission/reference/links.mdx +45 -0
- package/content/platform/commission/reference/service.mdx +51 -0
- package/content/platform/commission/reference/workflows.mdx +40 -0
- package/content/platform/offer/concepts/pricing-and-inventory.mdx +72 -0
- package/content/platform/offer/concepts/shipping.mdx +48 -0
- package/content/platform/offer/concepts/what-is-an-offer.mdx +65 -0
- package/content/platform/offer/guides/bulk-create-offers.mdx +84 -0
- package/content/platform/offer/guides/create-an-offer.mdx +83 -0
- package/content/platform/offer/guides/manage-offer-inventory.mdx +53 -0
- package/content/platform/offer/overview.mdx +84 -0
- package/content/platform/offer/reference/data-models.mdx +56 -0
- package/content/platform/offer/reference/events.mdx +39 -0
- package/content/platform/offer/reference/links.mdx +60 -0
- package/content/platform/offer/reference/service.mdx +53 -0
- package/content/platform/offer/reference/workflows.mdx +38 -0
- package/content/platform/order-group/concepts/computed-totals.mdx +59 -0
- package/content/platform/order-group/concepts/order-splitting.mdx +61 -0
- package/content/platform/order-group/concepts/the-order-group.mdx +64 -0
- package/content/platform/order-group/guides/list-order-groups.mdx +67 -0
- package/content/platform/order-group/guides/retrieve-an-order-group.mdx +63 -0
- package/content/platform/order-group/guides/split-a-cart.mdx +58 -0
- package/content/platform/order-group/overview.mdx +83 -0
- package/content/platform/order-group/reference/data-models.mdx +40 -0
- package/content/platform/order-group/reference/events.mdx +37 -0
- package/content/platform/order-group/reference/links.mdx +45 -0
- package/content/platform/order-group/reference/service.mdx +50 -0
- package/content/platform/order-group/reference/workflows.mdx +39 -0
- package/content/platform/payout/concepts/account-lifecycle.mdx +75 -0
- package/content/platform/payout/concepts/accounts-and-onboarding.mdx +70 -0
- package/content/platform/payout/concepts/payout-pipeline.mdx +99 -0
- package/content/platform/payout/guides/create-a-payout-account.mdx +59 -0
- package/content/platform/payout/guides/process-a-provider-webhook.mdx +74 -0
- package/content/platform/payout/guides/start-provider-onboarding.mdx +50 -0
- package/content/platform/payout/overview.mdx +86 -0
- package/content/platform/payout/reference/data-models.mdx +61 -0
- package/content/platform/payout/reference/events.mdx +48 -0
- package/content/platform/payout/reference/links.mdx +36 -0
- package/content/platform/payout/reference/service.mdx +53 -0
- package/content/platform/payout/reference/workflows.mdx +32 -0
- package/content/platform/product-edit/concepts/change-actions.mdx +66 -0
- package/content/platform/product-edit/concepts/change-pipeline.mdx +69 -0
- package/content/platform/product-edit/concepts/status-and-auto-confirm.mdx +66 -0
- package/content/platform/product-edit/guides/confirm-or-decline-a-change.mdx +76 -0
- package/content/platform/product-edit/guides/edit-a-product.mdx +74 -0
- package/content/platform/product-edit/guides/request-a-revision.mdx +54 -0
- package/content/platform/product-edit/overview.mdx +85 -0
- package/content/platform/product-edit/reference/data-models.mdx +65 -0
- package/content/platform/product-edit/reference/events.mdx +47 -0
- package/content/platform/product-edit/reference/links.mdx +39 -0
- package/content/platform/product-edit/reference/service.mdx +43 -0
- package/content/platform/product-edit/reference/workflows.mdx +49 -0
- package/content/platform/review/concepts/product-vs-seller-reviews.mdx +63 -0
- package/content/platform/review/concepts/ratings-and-moderation.mdx +64 -0
- package/content/platform/review/concepts/the-review-model.mdx +56 -0
- package/content/platform/review/guides/compute-aggregate-ratings.mdx +57 -0
- package/content/platform/review/guides/create-a-review.mdx +55 -0
- package/content/platform/review/guides/moderate-a-review.mdx +58 -0
- package/content/platform/review/guides/respond-to-a-review.mdx +61 -0
- package/content/platform/review/overview.mdx +87 -0
- package/content/platform/review/reference/data-models.mdx +36 -0
- package/content/platform/review/reference/events.mdx +61 -0
- package/content/platform/review/reference/links.mdx +43 -0
- package/content/platform/review/reference/service.mdx +54 -0
- package/content/platform/review/reference/workflows.mdx +31 -0
- package/content/platform/store/concepts/lifecycle.mdx +62 -0
- package/content/platform/store/concepts/store-entity.mdx +53 -0
- package/content/platform/store/concepts/team.mdx +50 -0
- package/content/platform/store/guides/create-a-store.mdx +55 -0
- package/content/platform/store/guides/manage-the-team.mdx +55 -0
- package/content/platform/store/guides/moderate-a-store.mdx +59 -0
- package/content/platform/store/overview.mdx +86 -0
- package/content/platform/store/reference/data-models.mdx +89 -0
- package/content/platform/store/reference/events.mdx +43 -0
- package/content/platform/store/reference/links.mdx +71 -0
- package/content/platform/store/reference/service.mdx +51 -0
- package/content/platform/store/reference/workflows.mdx +35 -0
- package/content/references/api/admin/commission-rates/create-commission-rate.mdx +1 -1
- package/content/references/api/admin/commission-rates/list-commission-rates.mdx +2 -2
- package/content/references/api/admin/commission-rates/update-commission-rate.mdx +1 -1
- package/content/references/api/admin/offers/batch-create-offers.mdx +3 -3
- package/content/references/api/admin/order-groups/list-order-groups.mdx +1 -1
- package/content/references/api/admin/product-attributes/create-attribute-value.mdx +2 -2
- package/content/references/api/admin/product-attributes/create-product-attribute.mdx +1 -1
- package/content/references/api/admin/product-attributes/update-product-attribute.mdx +1 -1
- package/content/references/api/admin/product-changes/confirm-product-change.mdx +1 -1
- package/content/references/api/admin/products/batch-product-attributes.mdx +1 -1
- package/content/references/api/admin/products/create-product.mdx +1 -1
- package/content/references/api/admin/products/preview-product.mdx +1 -1
- package/content/references/api/admin.mdx +4 -5
- package/content/references/api/conventions.mdx +9 -7
- package/content/references/api/store/carts/add-line-item.mdx +1 -1
- package/content/references/api/store/offers/list-offers.mdx +1 -1
- package/content/references/api/store/order-groups/list-order-groups.mdx +1 -1
- package/content/references/api/store.mdx +4 -13
- package/content/references/api/vendor/members/accept-member-invite.mdx +1 -1
- package/content/references/api/vendor/offers/batch-create-offers.mdx +4 -0
- package/content/references/api/vendor/offers/batch-offer-inventory-items.mdx +2 -0
- package/content/references/api/vendor/offers/create-offer.mdx +13 -1
- package/content/references/api/vendor/offers/list-offers.mdx +4 -0
- package/content/references/api/vendor/offers/retrieve-offer.mdx +4 -0
- package/content/references/api/vendor/offers/update-offer.mdx +12 -0
- package/content/references/api/vendor/payout-accounts/create-onboarding.mdx +1 -1
- package/content/references/api/vendor/products/batch-product-attributes.mdx +1 -1
- package/content/references/api/vendor/products/create-product-variant.mdx +1 -1
- package/content/references/api/vendor/products/create-product.mdx +1 -1
- package/content/references/api/vendor/products/delete-product.mdx +1 -1
- package/content/references/api/vendor/products/update-product.mdx +1 -1
- package/content/references/api/vendor/sellers/create-seller.mdx +2 -2
- package/content/references/api/vendor/sellers/list-sellers.mdx +1 -1
- package/content/references/api/vendor.mdx +6 -5
- package/content/references/configuration.mdx +16 -33
- package/content/references/overview.mdx +34 -52
- package/content/references/panel-extensions/create-page.mdx +194 -0
- package/content/references/panel-extensions/custom-fields.mdx +256 -0
- package/content/references/panel-extensions/overview.mdx +102 -0
- package/content/references/panel-extensions/widgets.mdx +212 -0
- package/content/resources/ai/mcp.mdx +2 -2
- package/content/resources/ai/overview.mdx +21 -16
- package/content/resources/ai/skills.mdx +67 -0
- package/content/resources/best-practices/api-routes.mdx +55 -43
- package/content/resources/best-practices/custom-fields.mdx +116 -92
- package/content/resources/best-practices/frontend.mdx +62 -50
- package/content/resources/best-practices/module-links.mdx +48 -34
- package/content/resources/best-practices/modules.mdx +53 -27
- package/content/resources/best-practices/overview.mdx +45 -17
- package/content/resources/best-practices/subscribers-and-jobs.mdx +37 -24
- package/content/resources/best-practices/types.mdx +38 -23
- package/content/resources/best-practices/workflows.mdx +33 -21
- package/content/resources/customization/custom-fields.mdx +15 -15
- package/content/resources/customization/extend-a-workflow.mdx +7 -4
- package/content/resources/customization/extending-panels.mdx +55 -52
- package/content/resources/deployment/medusa-cloud.mdx +21 -20
- package/content/resources/deployment/self-host.mdx +123 -0
- package/content/resources/integrations/overview.mdx +38 -0
- package/content/resources/integrations/stripe-connect.mdx +39 -38
- package/content/resources/tutorials/add-a-block.mdx +25 -18
- package/content/resources/tutorials/add-a-widget.mdx +32 -23
- package/content/resources/tutorials/add-order-detail-button.mdx +33 -20
- package/content/resources/tutorials/attributes-and-variant-axes.mdx +28 -27
- package/content/resources/tutorials/build-a-block.mdx +26 -15
- package/content/resources/tutorials/custom-api-route.mdx +32 -20
- package/content/resources/tutorials/custom-panel-page.mdx +21 -12
- package/content/resources/tutorials/customize-navigation.mdx +30 -23
- package/content/resources/tutorials/extend-forms-and-tables.mdx +36 -28
- package/content/resources/tutorials/extend-onboarding.mdx +38 -35
- package/content/resources/tutorials/master-products-and-offers.mdx +28 -23
- package/content/telemetry.mdx +3 -3
- package/content/user-guide/admin/attributes/how-tos/create-an-attribute.mdx +64 -0
- package/content/user-guide/admin/attributes/how-tos/manage-possible-values.mdx +40 -0
- package/content/user-guide/admin/attributes/overview.mdx +22 -0
- package/content/user-guide/admin/commissions/how-tos/create-a-commission-rule.mdx +63 -0
- package/content/user-guide/admin/commissions/how-tos/edit-the-global-commission.mdx +48 -0
- package/content/user-guide/admin/commissions/how-tos/manage-a-commission-rule.mdx +45 -0
- package/content/user-guide/admin/commissions/overview.mdx +25 -0
- package/content/user-guide/admin/overview.mdx +20 -12
- package/content/user-guide/admin/product-requests/how-tos/review-a-new-product.mdx +58 -0
- package/content/user-guide/admin/product-requests/how-tos/review-a-product-edit.mdx +48 -0
- package/content/user-guide/admin/product-requests/overview.mdx +25 -0
- package/content/user-guide/vendor/offers/how-tos/create-an-offer.mdx +59 -0
- package/content/user-guide/vendor/offers/how-tos/update-prices-and-stock.mdx +40 -0
- package/content/user-guide/vendor/offers/overview.mdx +22 -0
- package/content/user-guide/vendor/onboarding.mdx +79 -0
- package/content/user-guide/vendor/orders/how-tos/fulfill-an-order.mdx +49 -0
- package/content/user-guide/vendor/orders/how-tos/mark-an-order-as-delivered.mdx +33 -0
- package/content/user-guide/vendor/orders/how-tos/process-a-return.mdx +42 -0
- package/content/user-guide/vendor/orders/how-tos/refund-an-order.mdx +38 -0
- package/content/user-guide/vendor/orders/how-tos/ship-an-order.mdx +40 -0
- package/content/user-guide/vendor/orders/overview.mdx +31 -0
- package/content/user-guide/vendor/overview.mdx +23 -12
- package/content/user-guide/vendor/products/how-tos/edit-a-product.mdx +44 -0
- package/content/user-guide/vendor/products/how-tos/submit-a-product.mdx +63 -0
- package/content/user-guide/vendor/products/overview.mdx +22 -0
- package/llms.txt +176 -142
- package/package.json +1 -1
- package/content/learn/concepts.mdx +0 -84
- package/content/learn/installation.mdx +0 -117
- package/content/learn/mirakl-alternative.mdx +0 -86
- package/content/migration/from-1-x-to-2-0.mdx +0 -152
- package/content/migration/from-2-0-to-2-1.mdx +0 -105
- package/content/migration/overview.mdx +0 -58
- package/content/references/api/store/search/search.mdx +0 -136
- package/content/references/modules/commission.mdx +0 -106
- package/content/references/modules/custom-fields.mdx +0 -45
- package/content/references/modules/media.mdx +0 -55
- package/content/references/modules/offer.mdx +0 -64
- package/content/references/modules/payout.mdx +0 -121
- package/content/references/modules/product-attribute.mdx +0 -111
- package/content/references/modules/product-edit.mdx +0 -80
- package/content/references/modules/search.mdx +0 -112
- package/content/references/modules/seller.mdx +0 -175
- package/content/references/panel-extension-api.mdx +0 -337
- package/content/references/workflows/cart/add-seller-shipping-method-to-cart.mdx +0 -48
- package/content/references/workflows/cart/complete-cart-with-split-orders.mdx +0 -36
- package/content/references/workflows/cart/list-seller-shipping-options-for-cart.mdx +0 -39
- package/content/references/workflows/cart/update-cart-seller-promotions.mdx +0 -42
- package/content/references/workflows/commission/batch-commission-rules.mdx +0 -49
- package/content/references/workflows/commission/create-commission-rates.mdx +0 -41
- package/content/references/workflows/commission/delete-commission-rates.mdx +0 -34
- package/content/references/workflows/commission/refresh-order-commission-lines.mdx +0 -30
- package/content/references/workflows/commission/update-commission-rates.mdx +0 -35
- package/content/references/workflows/media/set-category-images.mdx +0 -41
- package/content/references/workflows/media/set-collection-images.mdx +0 -41
- package/content/references/workflows/member/accept-member-invite.mdx +0 -33
- package/content/references/workflows/member/add-seller-member.mdx +0 -30
- package/content/references/workflows/member/create-member-invites.mdx +0 -34
- package/content/references/workflows/member/delete-member-invite.mdx +0 -24
- package/content/references/workflows/member/remove-seller-member.mdx +0 -28
- package/content/references/workflows/member/resend-member-invite.mdx +0 -28
- package/content/references/workflows/member/update-member-role.mdx +0 -28
- package/content/references/workflows/member/update-member.mdx +0 -35
- package/content/references/workflows/offer/batch-offer-inventory-items.mdx +0 -62
- package/content/references/workflows/offer/create-offers.mdx +0 -65
- package/content/references/workflows/offer/delete-offers.mdx +0 -35
- package/content/references/workflows/offer/update-offers.mdx +0 -53
- package/content/references/workflows/order/cancel-order-fulfillment.mdx +0 -34
- package/content/references/workflows/order/confirm-claim-request.mdx +0 -25
- package/content/references/workflows/order/confirm-exchange-request.mdx +0 -25
- package/content/references/workflows/order/confirm-order-edit-request.mdx +0 -25
- package/content/references/workflows/order/confirm-return-receive.mdx +0 -25
- package/content/references/workflows/order/create-order-fulfillment.mdx +0 -45
- package/content/references/workflows/order-group/get-order-group-detail.mdx +0 -29
- package/content/references/workflows/order-group/get-order-groups-list.mdx +0 -38
- package/content/references/workflows/overview.mdx +0 -72
- package/content/references/workflows/payout/create-onboarding.mdx +0 -36
- package/content/references/workflows/payout/create-payout-account.mdx +0 -33
- package/content/references/workflows/payout/create-payout.mdx +0 -30
- package/content/references/workflows/payout/process-payout-for-webhook.mdx +0 -34
- package/content/references/workflows/product/confirm-products.mdx +0 -48
- package/content/references/workflows/product/create-products.mdx +0 -63
- package/content/references/workflows/product/link-sellers-to-product-category.mdx +0 -40
- package/content/references/workflows/product/link-sellers-to-product.mdx +0 -40
- package/content/references/workflows/product/reject-product.mdx +0 -48
- package/content/references/workflows/product/request-product-change.mdx +0 -48
- package/content/references/workflows/product-attribute/add-product-attributes-to-product.mdx +0 -49
- package/content/references/workflows/product-attribute/create-and-link-product-attributes-to-product.mdx +0 -46
- package/content/references/workflows/product-attribute/create-product-attribute-values.mdx +0 -43
- package/content/references/workflows/product-attribute/create-product-attributes.mdx +0 -56
- package/content/references/workflows/product-attribute/delete-product-attribute-values.mdx +0 -30
- package/content/references/workflows/product-attribute/delete-product-attributes.mdx +0 -30
- package/content/references/workflows/product-attribute/remove-product-attributes-from-product.mdx +0 -29
- package/content/references/workflows/product-attribute/update-product-attribute-values.mdx +0 -44
- package/content/references/workflows/product-attribute/update-product-attributes-on-product.mdx +0 -41
- package/content/references/workflows/product-attribute/update-product-attributes.mdx +0 -48
- package/content/references/workflows/product-attribute/upsert-product-attribute-values.mdx +0 -43
- package/content/references/workflows/product-edit/auto-confirm-product-change.mdx +0 -39
- package/content/references/workflows/product-edit/cancel-product-change.mdx +0 -49
- package/content/references/workflows/product-edit/confirm-product-change.mdx +0 -57
- package/content/references/workflows/product-edit/create-product-change.mdx +0 -72
- package/content/references/workflows/product-edit/reject-product-change.mdx +0 -54
- package/content/references/workflows/product-edit/stage-product-change.mdx +0 -75
- package/content/references/workflows/seller/approve-seller.mdx +0 -36
- package/content/references/workflows/seller/create-seller-account.mdx +0 -59
- package/content/references/workflows/seller/create-seller-defaults.mdx +0 -22
- package/content/references/workflows/seller/create-sellers.mdx +0 -65
- package/content/references/workflows/seller/delete-seller-professional-details.mdx +0 -37
- package/content/references/workflows/seller/delete-sellers.mdx +0 -24
- package/content/references/workflows/seller/invite-seller.mdx +0 -28
- package/content/references/workflows/seller/suspend-seller.mdx +0 -37
- package/content/references/workflows/seller/terminate-seller.mdx +0 -37
- package/content/references/workflows/seller/unsuspend-seller.mdx +0 -36
- package/content/references/workflows/seller/unterminate-seller.mdx +0 -36
- package/content/references/workflows/seller/update-seller-address.mdx +0 -55
- package/content/references/workflows/seller/update-seller-payment-details.mdx +0 -52
- package/content/references/workflows/seller/update-seller-professional-details.mdx +0 -48
- package/content/references/workflows/seller/update-sellers.mdx +0 -57
- package/content/resources/ai/llms.mdx +0 -74
- package/content/resources/integrations/notifications.mdx +0 -39
- package/content/resources/integrations/search.mdx +0 -122
- package/content/resources/tutorials/configure-commissions.mdx +0 -127
- package/content/resources/tutorials/first-marketplace.mdx +0 -45
- package/content/resources/tutorials/handle-product-requests.mdx +0 -80
- package/content/resources/tutorials/import-export-products.mdx +0 -96
- package/content/resources/tutorials/seller-payouts-stripe.mdx +0 -89
- package/content/resources/tutorials/store-setup-checklist.mdx +0 -214
- package/content/tools/api-client.mdx +0 -155
- package/content/tools/cli.mdx +0 -196
- package/content/tools/dashboard-sdk.mdx +0 -35
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Team & members"
|
|
3
|
+
sidebarTitle: "Team & members"
|
|
4
|
+
description: "Members, roles, invites, and the many-to-many store relationship."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This page covers how a store's team is modeled and how access is structured.
|
|
8
|
+
|
|
9
|
+
## Member
|
|
10
|
+
|
|
11
|
+
A member is a dashboard user who can manage one or more stores. A member is
|
|
12
|
+
represented by the `Member` data model (table `member`, id prefix `mem`). Their
|
|
13
|
+
identity is tied to their `email`, which is unique across the system.
|
|
14
|
+
|
|
15
|
+
## Seller member
|
|
16
|
+
|
|
17
|
+
The relationship between stores and members is many-to-many. A store can have
|
|
18
|
+
several members, and a member can belong to several stores. Each membership is a
|
|
19
|
+
`SellerMember` record, the pivot between `Seller` and `Member`, unique on
|
|
20
|
+
`(seller_id, member_id)`.
|
|
21
|
+
|
|
22
|
+
```ts
|
|
23
|
+
await addSellerMemberWorkflow(container).run({
|
|
24
|
+
input: {
|
|
25
|
+
seller_id: "sel_123",
|
|
26
|
+
member: { email: "ops@acme.com" },
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Every membership carries a `role_id`, resolved against the RBAC roles module, and
|
|
32
|
+
an `is_owner` flag.
|
|
33
|
+
|
|
34
|
+
<Tip>
|
|
35
|
+
A store must always keep at least one member with admin access. The last admin
|
|
36
|
+
cannot be removed or demoted.
|
|
37
|
+
</Tip>
|
|
38
|
+
|
|
39
|
+
## Member invite
|
|
40
|
+
|
|
41
|
+
Pending invitations are represented by the `MemberInvite` data model. If an
|
|
42
|
+
invited email already belongs to a user, accepting the invite links the new store
|
|
43
|
+
association to their existing account instead of creating a new one.
|
|
44
|
+
|
|
45
|
+
## Store switcher
|
|
46
|
+
|
|
47
|
+
A user who belongs to several stores uses the store switcher in the Vendor panel
|
|
48
|
+
to change the active store. Each store context is fully isolated. Switching stores
|
|
49
|
+
shows only that store's offers, orders, and payouts, and it never leaks data
|
|
50
|
+
across stores.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Create a store"
|
|
3
|
+
sidebarTitle: "Create a store"
|
|
4
|
+
description: "Create a seller programmatically with createSellersWorkflow."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
In this guide, you'll learn how to create a store from your own server code. This
|
|
8
|
+
is useful in a seed script, a custom API route, or an onboarding flow.
|
|
9
|
+
|
|
10
|
+
Mercur exposes a `createSellersWorkflow` that creates the `Seller` record along
|
|
11
|
+
with its defaults. Run it from any place that has access to the Medusa container.
|
|
12
|
+
|
|
13
|
+
## Run the workflow
|
|
14
|
+
|
|
15
|
+
```ts title="src/api/custom/route.ts"
|
|
16
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
|
|
17
|
+
import { createSellersWorkflow } from "@mercurjs/core/workflows"
|
|
18
|
+
|
|
19
|
+
export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
20
|
+
const { result } = await createSellersWorkflow(req.scope).run({
|
|
21
|
+
input: {
|
|
22
|
+
sellers: [
|
|
23
|
+
{
|
|
24
|
+
name: "Acme Supplies",
|
|
25
|
+
email: "team@acme.com",
|
|
26
|
+
currency_code: "usd",
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
res.status(201).json({ seller: result[0] })
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
<Note>
|
|
37
|
+
An operator can set a new store to `open` right away. A store created through
|
|
38
|
+
the public self-registration flow starts in `pending_approval` and waits for
|
|
39
|
+
operator review. See [Moderate stores](/platform/store/guides/moderate-a-store).
|
|
40
|
+
</Note>
|
|
41
|
+
|
|
42
|
+
## Attach custom data
|
|
43
|
+
|
|
44
|
+
The workflow accepts an `additional_data` payload. It is passed to the workflow's
|
|
45
|
+
hooks, so you can persist marketplace-specific data alongside the store without
|
|
46
|
+
forking the workflow.
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
await createSellersWorkflow(req.scope).run({
|
|
50
|
+
input: {
|
|
51
|
+
sellers: [{ name: "Acme Supplies", email: "team@acme.com", currency_code: "usd" }],
|
|
52
|
+
additional_data: { referral_code: "SPRING25" },
|
|
53
|
+
},
|
|
54
|
+
})
|
|
55
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Manage the team"
|
|
3
|
+
sidebarTitle: "Manage the team"
|
|
4
|
+
description: "Invite and add store members from server code."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
In this guide, you'll learn how to manage a store's team from your own server
|
|
8
|
+
code. You can invite members, add them directly, and update their roles.
|
|
9
|
+
|
|
10
|
+
## Invite a member
|
|
11
|
+
|
|
12
|
+
`inviteSellerWorkflow` creates a `MemberInvite` and sends the invitation email.
|
|
13
|
+
The invitee sets up access and is linked to the store when they accept.
|
|
14
|
+
|
|
15
|
+
```ts title="src/api/custom/invite/route.ts"
|
|
16
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
|
|
17
|
+
import { inviteSellerWorkflow } from "@mercurjs/core/workflows"
|
|
18
|
+
|
|
19
|
+
export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
20
|
+
await inviteSellerWorkflow(req.scope).run({
|
|
21
|
+
input: {
|
|
22
|
+
email: "ops@acme.com",
|
|
23
|
+
seller_id: req.params.id,
|
|
24
|
+
},
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
res.sendStatus(200)
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Add a member directly
|
|
32
|
+
|
|
33
|
+
When you already have the user, for example during a migration, add them to a
|
|
34
|
+
store without the invite step. Use `addSellerMemberWorkflow`.
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
import { addSellerMemberWorkflow } from "@mercurjs/core/workflows"
|
|
38
|
+
|
|
39
|
+
await addSellerMemberWorkflow(container).run({
|
|
40
|
+
input: {
|
|
41
|
+
seller_id: "sel_123",
|
|
42
|
+
member: { email: "ops@acme.com" },
|
|
43
|
+
},
|
|
44
|
+
})
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
<Tip>
|
|
48
|
+
Every store must keep at least one admin member. A workflow that would remove or
|
|
49
|
+
demote the last admin fails instead of leaving a store unadministered.
|
|
50
|
+
</Tip>
|
|
51
|
+
|
|
52
|
+
## Accept an invite
|
|
53
|
+
|
|
54
|
+
The invitee's acceptance runs through `acceptMemberInviteWorkflow`. It links the
|
|
55
|
+
member to the store, and if the email already exists, it reuses their account.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Moderate stores"
|
|
3
|
+
sidebarTitle: "Moderate stores"
|
|
4
|
+
description: "Approve, suspend, and terminate stores from server code."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
In this guide, you'll learn how to drive a store through its lifecycle from your
|
|
8
|
+
own server code. Each transition has a dedicated workflow, so the side effects
|
|
9
|
+
(events, notifications, and compensation) run consistently.
|
|
10
|
+
|
|
11
|
+
## Approve a store
|
|
12
|
+
|
|
13
|
+
Move a `pending_approval` store to `open` with `approveSellerWorkflow`.
|
|
14
|
+
|
|
15
|
+
```ts title="src/api/custom/approve/route.ts"
|
|
16
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http"
|
|
17
|
+
import { approveSellerWorkflow } from "@mercurjs/core/workflows"
|
|
18
|
+
|
|
19
|
+
export async function POST(req: MedusaRequest, res: MedusaResponse) {
|
|
20
|
+
await approveSellerWorkflow(req.scope).run({
|
|
21
|
+
input: { seller_id: req.params.id },
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
res.sendStatus(200)
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Suspend and reinstate
|
|
29
|
+
|
|
30
|
+
Freeze an `open` store's operations, then reinstate it once the issue is resolved.
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import {
|
|
34
|
+
suspendSellerWorkflow,
|
|
35
|
+
unsuspendSellerWorkflow,
|
|
36
|
+
} from "@mercurjs/core/workflows"
|
|
37
|
+
|
|
38
|
+
await suspendSellerWorkflow(container).run({ input: { seller_id } })
|
|
39
|
+
// ...later
|
|
40
|
+
await unsuspendSellerWorkflow(container).run({ input: { seller_id } })
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Terminate a store
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { terminateSellerWorkflow } from "@mercurjs/core/workflows"
|
|
47
|
+
|
|
48
|
+
await terminateSellerWorkflow(container).run({ input: { seller_id } })
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
<Warning>
|
|
52
|
+
Termination is irreversible. All orders and payouts must be resolved first.
|
|
53
|
+
</Warning>
|
|
54
|
+
|
|
55
|
+
## React to lifecycle changes
|
|
56
|
+
|
|
57
|
+
To run your own side effects when a store's status changes, subscribe to the
|
|
58
|
+
events these workflows emit instead of polling. The
|
|
59
|
+
[Event reference](/platform/store/reference/events) lists the event names.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Store"
|
|
3
|
+
sidebarTitle: "Overview"
|
|
4
|
+
description: "Manage sellers, their teams, and their lifecycle on the marketplace."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Use Mercur to control who is allowed to sell on your marketplace and what each
|
|
8
|
+
person on a store's team can do.
|
|
9
|
+
|
|
10
|
+
Governing your sellers starts here. The Store domain decides who may sell,
|
|
11
|
+
enforces role-based access so every member acts only within their store, and
|
|
12
|
+
keeps each store's data isolated from the rest. On top of that control layer, a
|
|
13
|
+
store carries its own team, a governed account lifecycle, and the business
|
|
14
|
+
details used to settle payouts. Every offer, order, payout, and storefront page
|
|
15
|
+
belongs to a store, and all of it is exposed directly through the Admin and
|
|
16
|
+
Vendor APIs.
|
|
17
|
+
|
|
18
|
+
<Note>
|
|
19
|
+
A store is the `Seller` entity. The Admin and Vendor panels call it a "Store".
|
|
20
|
+
The API and core modules call the same record a `Seller` (id prefix `sel`). You
|
|
21
|
+
never need to know Medusa to work with stores.
|
|
22
|
+
</Note>
|
|
23
|
+
|
|
24
|
+
## Key features
|
|
25
|
+
|
|
26
|
+
- **Role-based access control:** many-to-many members, roles resolved per store, and a store switcher for users who belong to several stores.
|
|
27
|
+
- **Store isolation:** each store sees and acts on only its own data.
|
|
28
|
+
- **Governed lifecycle:** a four-state account model with operator-only transitions.
|
|
29
|
+
- **Self-service onboarding:** create stores yourself, or let sellers register publicly.
|
|
30
|
+
- **Scheduled closures:** temporary offline windows that don't change account status.
|
|
31
|
+
- **Premium placement:** an operator-only flag the storefront uses for featured curation.
|
|
32
|
+
- **Single-currency accounts:** each store settles in exactly one currency.
|
|
33
|
+
|
|
34
|
+
## Get started
|
|
35
|
+
|
|
36
|
+
Learn how the domain fits together.
|
|
37
|
+
|
|
38
|
+
<CardGroup cols={2}>
|
|
39
|
+
<Card title="The store" icon="store" href="/platform/store/concepts/store-entity">
|
|
40
|
+
The seller entity, its profile, currency, and business identity.
|
|
41
|
+
</Card>
|
|
42
|
+
<Card title="Team & members" icon="users" href="/platform/store/concepts/team">
|
|
43
|
+
Multi-user stores, roles, invites, and the store switcher.
|
|
44
|
+
</Card>
|
|
45
|
+
<Card title="Lifecycle" icon="arrows-rotate" href="/platform/store/concepts/lifecycle">
|
|
46
|
+
Statuses, transitions, scheduled closures, and premium.
|
|
47
|
+
</Card>
|
|
48
|
+
</CardGroup>
|
|
49
|
+
|
|
50
|
+
## Examples
|
|
51
|
+
|
|
52
|
+
Build against the Store domain in your own code.
|
|
53
|
+
|
|
54
|
+
<CardGroup cols={2}>
|
|
55
|
+
<Card title="Create a store" icon="plus" href="/platform/store/guides/create-a-store">
|
|
56
|
+
Run `createSellersWorkflow` from a route or seed script.
|
|
57
|
+
</Card>
|
|
58
|
+
<Card title="Moderate stores" icon="gavel" href="/platform/store/guides/moderate-a-store">
|
|
59
|
+
Approve, suspend, and terminate stores in code.
|
|
60
|
+
</Card>
|
|
61
|
+
<Card title="Manage the team" icon="user-plus" href="/platform/store/guides/manage-the-team">
|
|
62
|
+
Invite and add members programmatically.
|
|
63
|
+
</Card>
|
|
64
|
+
</CardGroup>
|
|
65
|
+
|
|
66
|
+
## Resources
|
|
67
|
+
|
|
68
|
+
Data models, workflows, service methods, and events for the Store domain.
|
|
69
|
+
|
|
70
|
+
<CardGroup cols={2}>
|
|
71
|
+
<Card title="Data models" icon="table" href="/platform/store/reference/data-models">
|
|
72
|
+
The `Seller`, `Member`, and related entities.
|
|
73
|
+
</Card>
|
|
74
|
+
<Card title="Links" icon="link" href="/platform/store/reference/links">
|
|
75
|
+
How the Store domain links to other modules.
|
|
76
|
+
</Card>
|
|
77
|
+
<Card title="Workflows" icon="diagram-project" href="/platform/store/reference/workflows">
|
|
78
|
+
Seller and member lifecycle workflows.
|
|
79
|
+
</Card>
|
|
80
|
+
<Card title="Service" icon="gear" href="/platform/store/reference/service">
|
|
81
|
+
Module service methods for working with records directly.
|
|
82
|
+
</Card>
|
|
83
|
+
<Card title="Events" icon="bell" href="/platform/store/reference/events">
|
|
84
|
+
Events emitted as stores and members change.
|
|
85
|
+
</Card>
|
|
86
|
+
</CardGroup>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Data models"
|
|
3
|
+
sidebarTitle: "Data models"
|
|
4
|
+
description: "The data models owned by the Store (Seller) domain."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
The Store domain is owned by the **Seller module**. This reference lists its data
|
|
8
|
+
models and their fields. For the full module overview, see the
|
|
9
|
+
[Store overview](/platform/store/overview).
|
|
10
|
+
|
|
11
|
+
## Seller
|
|
12
|
+
|
|
13
|
+
Table `seller`, id prefix `sel`. The store account and profile.
|
|
14
|
+
|
|
15
|
+
| Field | Type | Notes |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| `id` | text | Primary key |
|
|
18
|
+
| `name` | text | Unique, searchable |
|
|
19
|
+
| `handle` | text | Unique; auto-generated from `name` when omitted |
|
|
20
|
+
| `email` | text | Unique, searchable |
|
|
21
|
+
| `phone` | text | Nullable |
|
|
22
|
+
| `description` | text | Nullable |
|
|
23
|
+
| `logo` / `banner` | text | Nullable |
|
|
24
|
+
| `website_url` | text | Nullable |
|
|
25
|
+
| `external_id` | text | Nullable; unique when set |
|
|
26
|
+
| `currency_code` | text | The store's single operating currency |
|
|
27
|
+
| `status` | enum | `SellerStatus`, default `pending_approval` |
|
|
28
|
+
| `status_reason` | text | Nullable |
|
|
29
|
+
| `approved_at` / `rejected_at` | dateTime | Nullable |
|
|
30
|
+
| `is_premium` | boolean | Default `false`; operator-set only |
|
|
31
|
+
| `closed_from` / `closed_to` | dateTime | Nullable; scheduled closure window |
|
|
32
|
+
| `closure_note` | text | Nullable |
|
|
33
|
+
| `metadata` | json | Nullable |
|
|
34
|
+
|
|
35
|
+
Relations: `professional_details`, `address`, `payment_details` (one-to-one,
|
|
36
|
+
deleted with the seller), `members` (many-to-many through `SellerMember`),
|
|
37
|
+
`member_invites` (one-to-many, deleted with the seller).
|
|
38
|
+
|
|
39
|
+
## ProfessionalDetails
|
|
40
|
+
|
|
41
|
+
Table `professional_details`, id prefix `selprodet`. Presence marks the store as
|
|
42
|
+
a registered business.
|
|
43
|
+
|
|
44
|
+
| Field | Type |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| `corporate_name` | text, nullable |
|
|
47
|
+
| `registration_number` | text, nullable |
|
|
48
|
+
| `tax_id` | text, nullable |
|
|
49
|
+
|
|
50
|
+
## SellerAddress
|
|
51
|
+
|
|
52
|
+
Table `seller_address`, id prefix `seladdr`. Fields: `name`, `company`,
|
|
53
|
+
`first_name`, `last_name`, `address_1`, `address_2`, `city`, `country_code`,
|
|
54
|
+
`province`, `postal_code`, `phone`, and `metadata`. All are nullable.
|
|
55
|
+
|
|
56
|
+
## PaymentDetails
|
|
57
|
+
|
|
58
|
+
Table `payment_details`, id prefix `selpaydet`. Fields: `country_code`,
|
|
59
|
+
`holder_name`, `bank_name`, `iban`, `bic`, `routing_number`, and
|
|
60
|
+
`account_number`. All are nullable.
|
|
61
|
+
|
|
62
|
+
## Member
|
|
63
|
+
|
|
64
|
+
Table `member`, id prefix `mem`. A dashboard user that can belong to one or more
|
|
65
|
+
stores.
|
|
66
|
+
|
|
67
|
+
| Field | Type | Notes |
|
|
68
|
+
| --- | --- | --- |
|
|
69
|
+
| `email` | text | Unique, searchable |
|
|
70
|
+
| `first_name` / `last_name` | text | Nullable |
|
|
71
|
+
| `locale` | text | Nullable |
|
|
72
|
+
| `is_active` | boolean | Default `true` |
|
|
73
|
+
| `metadata` | json | Nullable |
|
|
74
|
+
|
|
75
|
+
## SellerMember
|
|
76
|
+
|
|
77
|
+
Table `seller_member`, id prefix `selmem`. Pivot between `Seller` and `Member`,
|
|
78
|
+
unique on `(seller_id, member_id)`.
|
|
79
|
+
|
|
80
|
+
| Field | Type | Notes |
|
|
81
|
+
| --- | --- | --- |
|
|
82
|
+
| `role_id` | text | Nullable; resolved against the RBAC roles module |
|
|
83
|
+
| `is_owner` | boolean | Default `false` |
|
|
84
|
+
| `metadata` | json | Nullable |
|
|
85
|
+
|
|
86
|
+
## MemberInvite
|
|
87
|
+
|
|
88
|
+
Table `member_invite`, id prefix `meminv`. A pending team invitation, carrying
|
|
89
|
+
the invited `email`, target `seller_id`, `role_id`, and an expiry.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Event reference"
|
|
3
|
+
sidebarTitle: "Events"
|
|
4
|
+
description: "Events emitted by the Store domain, for subscribers and side effects."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
The Store domain emits events as stores and members change. Subscribe to them to
|
|
8
|
+
run side effects such as sending notifications, syncing external systems, or
|
|
9
|
+
kicking off follow-up workflows, instead of polling.
|
|
10
|
+
|
|
11
|
+
```ts title="src/subscribers/store-approved.ts"
|
|
12
|
+
import type { SubscriberArgs, SubscriberConfig } from "@medusajs/framework"
|
|
13
|
+
|
|
14
|
+
export default async function storeApprovedHandler({
|
|
15
|
+
event,
|
|
16
|
+
container,
|
|
17
|
+
}: SubscriberArgs<{ id: string }>) {
|
|
18
|
+
const sellerId = event.data.id
|
|
19
|
+
// ...send a welcome email, provision resources, etc.
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const config: SubscriberConfig = {
|
|
23
|
+
event: "seller.approved",
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Store events
|
|
28
|
+
|
|
29
|
+
| Event | Emitted when | Payload |
|
|
30
|
+
| --- | --- | --- |
|
|
31
|
+
| `seller.created` | A store is created | `{ id }` |
|
|
32
|
+
| `seller.updated` | A store's profile changes | `{ id }` |
|
|
33
|
+
| `seller.approved` | A store is approved (`→ open`) | `{ id }` |
|
|
34
|
+
| `seller.suspended` | A store is suspended | `{ id }` |
|
|
35
|
+
| `seller.terminated` | A store is terminated | `{ id }` |
|
|
36
|
+
|
|
37
|
+
## Member events
|
|
38
|
+
|
|
39
|
+
| Event | Emitted when | Payload |
|
|
40
|
+
| --- | --- | --- |
|
|
41
|
+
| `member_invite.created` | A team invite is sent | `{ id }` |
|
|
42
|
+
| `member_invite.accepted` | An invite is accepted | `{ id }` |
|
|
43
|
+
| `seller_member.created` | A member is added to a store | `{ id }` |
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Links to other modules"
|
|
3
|
+
sidebarTitle: "Links"
|
|
4
|
+
description: "How the Store (Seller) domain links to other modules across the marketplace."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Modules in Mercur never reference each other directly. They connect through
|
|
8
|
+
**module links**. The Seller module is the most linked domain in the marketplace,
|
|
9
|
+
and almost every other module attaches to a store. Once a link is defined, you
|
|
10
|
+
retrieve related records with `query.graph` using the link alias.
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
const { data: stores } = await query.graph({
|
|
14
|
+
entity: "seller",
|
|
15
|
+
fields: ["id", "name", "offers.*", "payout_account.*"],
|
|
16
|
+
})
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Commerce
|
|
20
|
+
|
|
21
|
+
| Linked module | Relationship |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| **Offer** | A store has many offers (`offer.seller_id`, read-only). Offers are how a store sells against a master product. |
|
|
24
|
+
| **Product** | Many-to-many allowlist (`product_seller`) that controls which stores may sell a given master product. |
|
|
25
|
+
| **Product category** | Many-to-many link to the categories a store is associated with. |
|
|
26
|
+
| **Order** | Each order belongs to one store; a store has many orders. |
|
|
27
|
+
|
|
28
|
+
## Payouts
|
|
29
|
+
|
|
30
|
+
| Linked module | Relationship |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| **Payout** | A store has many payouts. |
|
|
33
|
+
| **Payout account** | A store has one payout account (its provider onboarding record). |
|
|
34
|
+
|
|
35
|
+
## Customers
|
|
36
|
+
|
|
37
|
+
| Linked module | Relationship |
|
|
38
|
+
| --- | --- |
|
|
39
|
+
| **Customer** | Many-to-many link to the customers associated with a store. |
|
|
40
|
+
| **Customer group** | A customer group is owned by exactly one store; a store owns many groups. |
|
|
41
|
+
|
|
42
|
+
## Fulfillment & inventory
|
|
43
|
+
|
|
44
|
+
| Linked module | Relationship |
|
|
45
|
+
| --- | --- |
|
|
46
|
+
| **Shipping profile** | A store has many shipping profiles. |
|
|
47
|
+
| **Shipping option** | A store has many shipping options. |
|
|
48
|
+
| **Service zone** | A store has many service zones. |
|
|
49
|
+
| **Fulfillment set** | A store has many fulfillment sets. |
|
|
50
|
+
| **Stock location** | A store has many stock locations. |
|
|
51
|
+
| **Inventory item** | A store has many inventory items. |
|
|
52
|
+
|
|
53
|
+
## Pricing & promotions
|
|
54
|
+
|
|
55
|
+
| Linked module | Relationship |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| **Price list** | A store has many price lists. |
|
|
58
|
+
| **Promotion** | A store has many promotions. |
|
|
59
|
+
| **Campaign** | A store has many campaigns. |
|
|
60
|
+
|
|
61
|
+
## Access & reviews
|
|
62
|
+
|
|
63
|
+
| Linked module | Relationship |
|
|
64
|
+
| --- | --- |
|
|
65
|
+
| **RBAC role** | A member's role on a store (`seller_member.role_id`, read-only) resolves against the roles module. |
|
|
66
|
+
| **Review** | A store has many reviews. |
|
|
67
|
+
|
|
68
|
+
<Note>
|
|
69
|
+
Read-only links (Offer, RBAC role) are resolved from the field on the owning
|
|
70
|
+
record and can't be written through the link itself.
|
|
71
|
+
</Note>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Service reference"
|
|
3
|
+
sidebarTitle: "Service"
|
|
4
|
+
description: "The Seller module service and its methods for working with records directly."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
The Seller module exposes a service you can resolve from the Medusa container to
|
|
8
|
+
read and write records directly, without going through a workflow. Use it inside
|
|
9
|
+
custom services, subscribers, or scheduled jobs.
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { MercurModules } from "@mercurjs/types"
|
|
13
|
+
|
|
14
|
+
const sellerModuleService = container.resolve(MercurModules.SELLER)
|
|
15
|
+
|
|
16
|
+
const [sellers, count] = await sellerModuleService.listAndCountSellers({
|
|
17
|
+
status: "open",
|
|
18
|
+
})
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Generated methods
|
|
22
|
+
|
|
23
|
+
Each data model gets a standard set of auto-generated methods. For `Seller`:
|
|
24
|
+
|
|
25
|
+
| Method | Description |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| `createSellers(data)` | Create one or more stores |
|
|
28
|
+
| `retrieveSeller(id, config?)` | Retrieve a store by id |
|
|
29
|
+
| `listSellers(filters?, config?)` | List stores matching filters |
|
|
30
|
+
| `listAndCountSellers(filters?, config?)` | List stores with a total count |
|
|
31
|
+
| `updateSellers(data)` | Update one or more stores |
|
|
32
|
+
| `deleteSellers(ids)` | Delete one or more stores |
|
|
33
|
+
|
|
34
|
+
The same set exists for every model in the module, such as `Member`, `SellerMember`,
|
|
35
|
+
`MemberInvite`, `ProfessionalDetails`, `SellerAddress`, and `PaymentDetails`
|
|
36
|
+
(e.g. `createMembers`, `listMemberInvites`, `updatePaymentDetails`).
|
|
37
|
+
|
|
38
|
+
## Team methods
|
|
39
|
+
|
|
40
|
+
| Method | Description |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| `addSellerMember(data)` | Attach a member to a store |
|
|
43
|
+
| `removeSellerMember(sellerId, memberId)` | Detach a member from a store |
|
|
44
|
+
| `createMemberInvites(data)` | Create pending team invitations |
|
|
45
|
+
| `updateMember(data)` | Update a member record |
|
|
46
|
+
|
|
47
|
+
<Warning>
|
|
48
|
+
Prefer [workflows](/platform/store/reference/workflows) for anything with side
|
|
49
|
+
effects (status changes, invites, payouts). The service writes records
|
|
50
|
+
directly and does **not** emit events or run compensation.
|
|
51
|
+
</Warning>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Workflows"
|
|
3
|
+
sidebarTitle: "Workflows"
|
|
4
|
+
description: "Seller and member workflows, service methods, and events."
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This reference lists the workflows, service methods, and events for the Store
|
|
8
|
+
domain. Import workflows from `@mercurjs/core/workflows` and run them against the
|
|
9
|
+
Medusa container.
|
|
10
|
+
|
|
11
|
+
## Seller workflows
|
|
12
|
+
|
|
13
|
+
| Workflow | Input | Purpose |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `createSellersWorkflow` | `{ sellers[], additional_data? }` | Create stores with defaults |
|
|
16
|
+
| `updateSellersWorkflow` | `{ selector, update }` | Update store fields |
|
|
17
|
+
| `deleteSellersWorkflow` | `{ ids[] }` | Delete stores |
|
|
18
|
+
| `approveSellerWorkflow` | `{ seller_id, additional_data? }` | `pending_approval` → `open` |
|
|
19
|
+
| `suspendSellerWorkflow` | `{ seller_id }` | `open` → `suspended` |
|
|
20
|
+
| `unsuspendSellerWorkflow` | `{ seller_id }` | `suspended` → `open` |
|
|
21
|
+
| `terminateSellerWorkflow` | `{ seller_id }` | → `terminated` (irreversible) |
|
|
22
|
+
|
|
23
|
+
## Member workflows
|
|
24
|
+
|
|
25
|
+
| Workflow | Input | Purpose |
|
|
26
|
+
| --- | --- | --- |
|
|
27
|
+
| `inviteSellerWorkflow` | `{ email, seller_id }` | Create + send a member invite |
|
|
28
|
+
| `acceptMemberInviteWorkflow` | `{ token }` | Accept an invite, link the member |
|
|
29
|
+
| `addSellerMemberWorkflow` | `{ seller_id, member }` | Add a member directly |
|
|
30
|
+
| `removeSellerMemberWorkflow` | `{ seller_id, member_id }` | Revoke access |
|
|
31
|
+
| `updateMemberRoleWorkflow` | `{ id, role_id }` | Change a member's role |
|
|
32
|
+
|
|
33
|
+
To work with records directly instead of through a workflow, see the
|
|
34
|
+
[Service reference](/platform/store/reference/service). To run side effects when
|
|
35
|
+
a store changes, see the [Event reference](/platform/store/reference/events).
|
|
@@ -11,7 +11,7 @@ Creates a commission rate, optionally with scoping rules and per-currency values
|
|
|
11
11
|
<ParamField body="name" type="string" required>The rate's display name.</ParamField>
|
|
12
12
|
<ParamField body="code" type="string" required>Unique code identifying the rate.</ParamField>
|
|
13
13
|
<ParamField body="type" type="string" required>The rate type: `fixed` or `percentage`.</ParamField>
|
|
14
|
-
<ParamField body="value" type="number" required>The commission value
|
|
14
|
+
<ParamField body="value" type="number" required>The commission value, a percentage or a fixed amount.</ParamField>
|
|
15
15
|
<ParamField body="currency_code" type="string">Currency of a fixed rate's value.</ParamField>
|
|
16
16
|
<ParamField body="include_tax" type="boolean">Whether commission is calculated on tax-inclusive amounts.</ParamField>
|
|
17
17
|
<ParamField body="include_shipping" type="boolean">Whether shipping is included in the commission base.</ParamField>
|
|
@@ -7,7 +7,7 @@ description: "Retrieve a paginated list of commission rates."
|
|
|
7
7
|
Returns commission rates with their rules and currency-specific values.
|
|
8
8
|
|
|
9
9
|
<Note>
|
|
10
|
-
`scope_type` is a virtual filter derived from each rate's rules
|
|
10
|
+
`scope_type` is a virtual filter derived from each rate's rules. It is not a
|
|
11
11
|
stored column. Use it to filter rates by the scope their rules target.
|
|
12
12
|
</Note>
|
|
13
13
|
|
|
@@ -35,7 +35,7 @@ Returns commission rates with their rules and currency-specific values.
|
|
|
35
35
|
<ResponseField name="name" type="string">The rate's display name.</ResponseField>
|
|
36
36
|
<ResponseField name="code" type="string">The rate's unique code.</ResponseField>
|
|
37
37
|
<ResponseField name="type" type="string">The rate type: `fixed` or `percentage`.</ResponseField>
|
|
38
|
-
<ResponseField name="value" type="number">The commission value
|
|
38
|
+
<ResponseField name="value" type="number">The commission value, a percentage or a fixed amount.</ResponseField>
|
|
39
39
|
<ResponseField name="currency_code" type="string | null">Currency of a fixed rate's value.</ResponseField>
|
|
40
40
|
<ResponseField name="include_tax" type="boolean">Whether commission is calculated on tax-inclusive amounts.</ResponseField>
|
|
41
41
|
<ResponseField name="include_shipping" type="boolean">Whether shipping is included in the commission base.</ResponseField>
|
|
@@ -20,7 +20,7 @@ Updates a commission rate's properties.
|
|
|
20
20
|
<ParamField body="name" type="string">The rate's display name.</ParamField>
|
|
21
21
|
<ParamField body="code" type="string">Unique code identifying the rate.</ParamField>
|
|
22
22
|
<ParamField body="type" type="string">The rate type: `fixed` or `percentage`.</ParamField>
|
|
23
|
-
<ParamField body="value" type="number">The commission value
|
|
23
|
+
<ParamField body="value" type="number">The commission value, a percentage or a fixed amount.</ParamField>
|
|
24
24
|
<ParamField body="currency_code" type="string">Currency of a fixed rate's value.</ParamField>
|
|
25
25
|
<ParamField body="include_tax" type="boolean">Whether commission is calculated on tax-inclusive amounts.</ParamField>
|
|
26
26
|
<ParamField body="include_shipping" type="boolean">Whether shipping is included in the commission base.</ParamField>
|
|
@@ -10,13 +10,13 @@ Creates multiple offers on behalf of a seller. The authenticated admin user is r
|
|
|
10
10
|
|
|
11
11
|
<ParamField body="seller_id" type="string" required>ID of the seller the offers belong to.</ParamField>
|
|
12
12
|
<ParamField body="offers" type="object[]" required>
|
|
13
|
-
The offers to create
|
|
13
|
+
The offers to create, between 1 and 100.
|
|
14
14
|
<Expandable title="properties">
|
|
15
15
|
<ParamField body="sku" type="string" required>The offer's SKU.</ParamField>
|
|
16
16
|
<ParamField body="variant_id" type="string" required>ID of the product variant to offer.</ParamField>
|
|
17
17
|
<ParamField body="shipping_profile_id" type="string" required>ID of the seller's shipping profile.</ParamField>
|
|
18
18
|
<ParamField body="prices" type="object[]" required>
|
|
19
|
-
Offer prices
|
|
19
|
+
Offer prices, at least one.
|
|
20
20
|
<Expandable title="properties">
|
|
21
21
|
<ParamField body="amount" type="number" required>The price amount.</ParamField>
|
|
22
22
|
<ParamField body="currency_code" type="string" required>The price currency.</ParamField>
|
|
@@ -26,7 +26,7 @@ Creates multiple offers on behalf of a seller. The authenticated admin user is r
|
|
|
26
26
|
</Expandable>
|
|
27
27
|
</ParamField>
|
|
28
28
|
<ParamField body="inventory_items" type="object[]" required>
|
|
29
|
-
Inventory items backing the offer
|
|
29
|
+
Inventory items backing the offer, at least one.
|
|
30
30
|
<Expandable title="properties">
|
|
31
31
|
<ParamField body="title" type="string">The inventory item's title.</ParamField>
|
|
32
32
|
<ParamField body="sku" type="string">The inventory item's SKU.</ParamField>
|