Skip to main content

Partner API Scoping

The partner UI (partner.jaalyantra.com) uses partner-scoped API endpoints instead of admin endpoints to avoid CORS issues and ensure data isolation.

Why Partner Scoping Matters

  • CORS: Admin API only allows admin.jaalyantra.com origin. Partner UI at partner.jaalyantra.com is blocked.
  • Data isolation: Partners should only see their own data (products, orders, customers).
  • Security: Admin API has full access; partner API validates ownership.

Partner API Pattern

All partner endpoints follow the pattern:

/partners/...              → partner-level resources
/partners/stores/:id/... → store-scoped resources

Authentication: authenticate("partner", ["session", "bearer"]) middleware with partner CORS.

Scoped Resources

Products

OperationEndpointNotes
ListGET /partners/stores/:id/productsVia sales channel link
DetailGET /partners/stores/:id/products/:productIdVariants include prices with flat rules object (reconstructed from price_rules), plus inventory_items.inventory for the stock page.
CreatePOST /partners/stores/:id/productsAuto-assigns store's sales channel
Quick createPOST /partners/stores/:id/products/quickOne-shot: product + default variant + 1 price + 1 stock level. See Quick Add Product.
UpdatePOST /partners/stores/:id/products/:productId
DeleteDELETE /partners/stores/:id/products/:productIdUses deleteProductsWorkflow

Product Variants

OperationEndpoint
List allGET /partners/stores/:id/product-variants
DetailGET /partners/stores/:id/products/:productId/variants/:variantId
CreatePOST /partners/stores/:id/products/:productId/variants
UpdatePOST /partners/stores/:id/products/:productId/variants/:variantId
Batch (create/update/delete)POST /partners/stores/:id/products/:productId/variants/batch
DeleteDELETE /partners/stores/:id/products/:productId/variants/:variantId

All variant endpoints reconstruct price.rules from the underlying price_rules relation so the pricing UI can render region-scoped prices (region columns on the pricing grid). Wired via remapVariantResponse from @medusajs/medusa/api/admin/products/helpers.

AI (partner-scoped)

OperationEndpointNotes
Describe imagePOST /partners/ai/describe-imageBody {imageUrl, hint?}{title, description, usage}. Returns HTTP 402 {upgrade_required: true, code: "ai_quota_exhausted", used, limit} when the partner is over their monthly free allowance. Provider key is read from a SocialPlatform record; see Quick Add Product for setup.
Usage countersGET /partners/ai/usageReturns {image_describe: {used, limit, allowed}} for the current calendar month. UI uses this to render an X/10 free hint and disable the describe button at the limit.

Product Metadata

ResourceEndpointScoping
CollectionsGET /partners/product-collectionsStore-scoped via sales channel
TypesGET/POST /partners/product-typesGlobal (partners can use any)
TagsGET/POST/DELETE /partners/product-tagsGlobal with partner auth

Customers

OperationEndpoint
ListGET /partners/customers
DetailGET /partners/customers/:id
CreatePOST /partners/customers
UpdatePOST /partners/customers/:id

Orders

OperationEndpoint
ListGET /partners/orders
DetailGET /partners/orders/:id
Claims/Returns/ExchangesPOST /partners/orders/:id/claims, etc.

Fulfillment & Shipping

ResourceEndpoint
Fulfillment providersGET /partners/fulfillment-providers
Stock locationsGET /partners/stock-locations
Shipping optionsGET/POST /partners/stores/:id/shipping-options

Migrated Calls (admin → partner)

The following partner UI files were migrated from sdk.admin.* to sdk.client.fetch("/partners/..."):

Loaders

  • collections/collection-detail/loader.ts
  • product-types/product-type-detail/loader.ts
  • product-tags/product-tag-detail/loader.ts + product-tag-list/loader.ts
  • product-variants/product-variant-edit/loader.ts + product-variant-detail/loader.ts
  • customers/customer-detail/loader.ts

Hooks

  • hooks/api/product-variants.tsx — variant listing
  • hooks/api/tags.tsx — create/update/delete operations

Order Flows

  • order-create-fulfillment — stock location list
  • order-create-return — variant retrieval
  • order-create-claim — variant list (claim/outbound sections)
  • order-create-exchange — variant list (inbound/outbound sections)
  • order-request-transfer — customer list
  • inventory/manage-locations — stock location list

Remaining Admin API Calls

These are in features not critical to partner operations:

  • Campaigns/Promotions — marketing features
  • Currencies/Locales — read-only global data
  • Price Lists — advanced pricing
  • Views/Workflow Executions — internal admin tooling
  • Invites/Users — separate auth system
  • Refund/Return Reasons — global lookup data
  • Notifications/Plugins — system-level

These can be migrated as partners need access to these features.