Hanzo
CommerceAdmin Dashboard

Store Settings

Configure regions, currencies, taxes, shipping, payments, and team access

The settings section of the admin dashboard controls the global configuration for your store. Access it from the gear icon in the sidebar.

General Settings

Configure your store's basic information:

SettingDescription
Store namePublic-facing name of your store
Store URLPrimary domain for your storefront
Contact emailCustomer-facing support email
Default currencyBase currency for pricing
Default languageDefault locale for the storefront
TimezoneUsed for order timestamps and reports

Regions and Currencies

Regions define geographic areas with their own currency, tax rules, and shipping options.

await sdk.admin.region.create({
  name: 'North America',
  currencyCode: 'USD',
  countries: ['US', 'CA', 'MX'],
  taxRate: 0,
  paymentProviders: ['stripe'],
  fulfillmentProviders: ['manual', 'shippo'],
})

await sdk.admin.region.create({
  name: 'Europe',
  currencyCode: 'EUR',
  countries: ['DE', 'FR', 'ES', 'IT', 'NL', 'BE', 'AT'],
  taxRate: 0,
  taxInclusive: true,
  paymentProviders: ['stripe'],
  fulfillmentProviders: ['manual', 'shippo'],
})

Each region can have:

  • Its own currency and price overrides
  • Tax-inclusive or tax-exclusive pricing
  • Region-specific payment and fulfillment providers
  • Country restrictions

Tax Configuration

Configure tax calculation per region:

// Manual tax rates
await sdk.admin.tax.createRate({
  regionId: 'reg_na',
  name: 'California Sales Tax',
  rate: 7.25,
  code: 'CA-SALES',
  conditions: [
    { type: 'state', value: 'CA' },
  ],
})

// Automatic tax calculation via provider
await sdk.admin.tax.setProvider({
  regionId: 'reg_na',
  provider: 'taxjar',
  config: {
    apiKey: 'your_taxjar_key',
  },
})
Tax OptionDescription
Manual ratesDefine fixed rates per region, state, or product category
TaxJarAutomated US sales tax calculation
Tax-inclusivePrices include tax (common in EU)
Tax-exclusiveTax added at checkout (common in US)
Tax exemptionsExempt specific products or customer groups

Shipping Profiles and Zones

Shipping profiles group products with similar shipping requirements:

// Create a shipping profile
await sdk.admin.shipping.createProfile({
  name: 'Standard Apparel',
  type: 'default',
})

// Add a shipping zone with rates
await sdk.admin.shipping.createZone({
  profileId: 'sp_default',
  name: 'Domestic US',
  countries: ['US'],
  rates: [
    { name: 'Standard', price: 599, minDeliveryDays: 5, maxDeliveryDays: 7 },
    { name: 'Express', price: 1499, minDeliveryDays: 2, maxDeliveryDays: 3 },
    { name: 'Free Shipping', price: 0, minOrderAmount: 5000 },
  ],
})

Shipping Rate Types

  • Flat rate -- fixed price regardless of cart contents
  • Weight-based -- price scales with total weight
  • Price-based -- rate depends on cart subtotal
  • Free shipping -- no charge above a minimum order amount
  • Calculated -- real-time rates from carriers (Shippo, EasyPost)

Payment Providers

Configure one or more payment providers per region:

await sdk.admin.payment.setProvider({
  regionId: 'reg_na',
  provider: 'stripe',
  config: {
    secretKey: process.env.STRIPE_SECRET_KEY,
    webhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
  },
})

Supported providers:

ProviderCapabilities
StripeCards, Apple Pay, Google Pay, ACH, Klarna
PayPalPayPal balance, cards, Pay Later
ManualBank transfer, cash on delivery, invoice

API Keys

Manage API keys for programmatic access:

  • Publishable keys -- safe to use in client-side code (storefront)
  • Secret keys -- server-side only, full admin access
// Create a new API key
const key = await sdk.admin.apiKey.create({
  name: 'Production Storefront',
  type: 'publishable',
  scopes: ['store:read', 'cart:write', 'checkout:write'],
})

// List all API keys
const keys = await sdk.admin.apiKey.list()

// Revoke a key
await sdk.admin.apiKey.delete('key_abc123')

Secret API keys grant full admin access. Never expose them in client-side code or public repositories.

Notifications

Configure email and webhook notifications:

EventEmailWebhook
Order placedCustomer + AdminYes
Payment capturedCustomerYes
Order shippedCustomerYes
Order deliveredCustomerYes
Return requestedAdminYes
Refund issuedCustomerYes
Low stock alertAdminYes
await sdk.admin.notification.updateConfig({
  email: {
    provider: 'sendgrid',
    fromAddress: '[email protected]',
    fromName: 'Your Store',
    apiKey: process.env.SENDGRID_API_KEY,
  },
  webhooks: [
    { url: 'https://yourapp.com/webhooks/commerce', events: ['*'] },
  ],
})

Team Management

Invite team members and assign roles with fine-grained permissions:

Roles

RolePermissions
OwnerFull access, billing, team management
AdminAll store operations, settings
ManagerProducts, orders, customers, fulfillment
SupportView orders, manage returns, customer notes
ViewerRead-only access to all sections

Inviting Members

await sdk.admin.store.inviteTeamMember({
  email: '[email protected]',
  role: 'manager',
})

Custom Roles

Create custom roles with specific permission scopes:

await sdk.admin.store.createRole({
  name: 'Fulfillment Specialist',
  permissions: [
    'order:read',
    'fulfillment:read',
    'fulfillment:write',
    'inventory:read',
    'inventory:write',
  ],
})

How is this guide?

Last updated on

On this page