---
title: "Provision a Shopify tenant"
method: POST
path: "/provision/shopify"
tags: ["Provisioning"]
---

# Provision a Shopify tenant

`POST /provision/shopify`

## Request

- Base URL: `https://api.savanto.ai`
- URL: `https://api.savanto.ai/provision/shopify`
- Auth: HTTP bearer

Called by the Savanto Shopify app after a merchant completes OAuth. Creates a new tenant + workspace, or reactivates and reissues keys if the shop was previously installed.

## Request body

- ShopifyProvisionRequest
  - `shop` string, required: Shopify shop domain.
  - `tier` string: Billing tier chosen during install.
  - `shopName` string: Human-readable shop name.
  - `ownerEmail` string, email: Shop owner email (used for billing + outreach).
  - `existingTenantId` string: If set, link the new workspace to this existing tenant.

## Response `200`

Existing tenant reactivated

- object
  - `object` 'tenant', required
  - `requestId` string, required
  - `data` ProvisionResult, required
    - `tenantId` string, required
    - `workspaceId` string, required
    - `isNew` boolean, required
    - `tier` string, required
    - `apiKey` string
    - `apiKeyId` string
    - `publishableKey` string
    - `publishableKeyId` string

## Other responses

- `201`: New tenant provisioned
- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict
- `413`: Payload too large
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/savanto/apis/savanto-api.md) · [All operations](https://skmtc.dev/savanto/apis/savanto-api/llms.txt) · [OpenAPI document](https://skmtc.dev/savanto/apis/savanto-api/revisions/82437327a878?raw)
