Merchant Management Overview
Merchant Management lets platforms and SaaS businesses provision tax compliance for their own customers. You create a merchant for each seller on your platform, then manage that merchant’s compliance through Ziptax instead of asking every customer to set up tax tooling on their own.
Every merchant uses one of two compliance models. You choose the model at
creation time with the merchantType field on
POST /merchant/create, and you can
move a merchant to the other model later with setMerchantType on
POST /merchant/update.
Two compliance models
Self-managed (merchantType: "self-managed"): the merchant is active the
moment you create it, with
no TaxCloud invite. Your platform tracks the merchant’s nexus footprint on
Ziptax — physical locations and
economic thresholds — while the merchant remains
responsible for their own registration, filing, and remittance.
TaxCloud-connected (merchantType: "taxcloud", the API default):
creation kicks off the TaxCloud invite process. The merchant sets up their own
TaxCloud account and connects it, and TaxCloud handles compliance end to end —
registration, filing, and remittance — in the merchant’s own account, synced to
your platform.
Which model fits?
Start with self-managed if your merchants handle their own compliance, or
aren’t ready for a full-service filing relationship. You get merchant records
and nexus tracking on Ziptax without any onboarding step for the merchant, plus
cart tax calculation at checkout, and you can
invite a self-managed merchant to TaxCloud later. The choice is not permanent:
either model can be switched to the other with setMerchantType.
Choose TaxCloud-connected to offer full-service compliance — TaxCloud registers, files, and remits on the merchant’s behalf — and to record orders, exemption certificates, and refunds through the full Merchant Transactions set. This model requires the Enterprise plan.
Merchant statuses
merchantType is not returned by POST /merchant/get or
GET /merchant/list. The status field is how you tell the two models apart
on reads, including after a setMerchantType change: