---
title: "Create new workspace"
method: POST
path: "/support/workspaces"
tags: ["Workspaces Support"]
---

# Create new workspace

`POST /support/workspaces`

## Request

- Base URL: `https://app.mammoth.io/api/v2`
- URL: `https://app.mammoth.io/api/v2/support/workspaces`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-KEY` and API key in header `X-API-SECRET` and API key in header `X-WORKSPACE-ID`

Create new workspace including relevant details.

## Request body

- WorkspaceCreate: Create workspace schema details
  - `name` string, required: Name of the workspace to be created
  - `user_email` string, email, required: Email of the customer
  - `plan_id` integer, nullable: Plan ID
  - `payment_frequency` string, required: Payment frequency of the workspace
  - `storage_gb` integer, nullable: Chosen TOTAL storage allocation in GB for the subscription
  - `origin` string, nullable: Origin of the request
  - `template` string, nullable: Public-gallery template slug the sign-up came for
  - `anon_distinct_id` string, nullable: Visitor's PostHog anonymous distinct id at signup
  - `landing_url` string, nullable: Visitor's first-touch landing page URL
  - `referring_domain` string, nullable: Visitor's first-touch referring domain
  - `utm_source` string, nullable: Visitor's first-touch utm_source
  - `utm_medium` string, nullable: Visitor's first-touch utm_medium
  - `utm_campaign` string, nullable: Visitor's first-touch utm_campaign
  - `gclid` string, nullable: Visitor's first-touch Google Ads click id
  - `current_url` string, nullable: The page the visitor was on at the moment of signing up
  - `signup_channel` 'cli' | 'mcp' | 'web': Where the sign-up started: cli, mcp or web (default)
  - `is_verified` boolean: Is verified
  - `is_registration` boolean: Is registration
  - `file_id` string, nullable: File ID of the file
  - `table_number` integer[], nullable: Table number of the file
  - `plan_create` CreatePlanRequestSchema
    - `name` string, required: Plan name
    - `display_name` string, nullable: Plan display name
    - `monthly_price` number, required: Monthly price in USD
    - `description` string, nullable: Plan description
    - `annual_price` number, nullable: Annual price in USD
    - `annual_only` boolean: Whether plan is annual only
    - `is_self_serve` boolean, required: Whether users can self-subscribe
    - `trial_days` integer, nullable: Trial period in days
    - `storage_amount` integer: Included storage in GB
    - `max_storage` integer, nullable: Maximum storage in GB
    - `max_users` integer, nullable: Maximum number of users
    - `no_of_users` integer, nullable: Number of included users
    - `seat_price` number, nullable: Price per additional user seat
    - `number_of_tiers` integer: Number of storage tiers
    - `storage_block_size` integer, nullable: Storage block size in GB
    - `tiers` SubscriptionSchemasStorageTierSchema[], nullable: Storage pricing tiers
      - `gb` integer, required: Storage amount in GB
      - `price_per_gb` number, required: Price per GB in USD
    - `uses_inline_pricing` boolean: Bill this plan with composed price_data (plan price plus the chosen storage option) instead of stored Stripe prices
    - `storage_options` StorageOptionRequestSchema[], nullable: Purchasable storage sizes for inline-pricing plans
      - `storage_gb` integer, required: Total storage the option grants, in GB
      - `monthly_price` number, required: Monthly add in USD on top of the plan price
      - `annual_price` number, required: Annual add in USD on top of the plan price
    - `connector_profile_id` integer, nullable: Connector profile ID
    - `feature_profile_id` integer, nullable: Feature profile ID
    - `source_plan_id` integer, nullable: Copy entitlements from this plan: the new plan gets its own copies of the source's feature and connector profiles, and its trial and storage ladder unless the payload states them

## Response `201`

Successful create

- JobSchema
  - `id` integer, required
  - `status` 'success' | 'failure' | 'processing' | 'error', required: Job status can be success, failure or processing
  - `response` object, required: Result of async task is stored in response
  - `last_updated_at` string, date-time, required: Job last updated at is the time when Job status was last updated
  - `created_at` string, date-time, required: Create at is time when async task was created
  - `path` string, required: API request path of the Job operation
  - `operation` string, required: Operation is async task name which Job is tracking

## Other responses

- `400`: Bad Request
- `401`: Authorization error
- `403`: Request forbidden -- authorization will not help

---

[API](https://skmtc.dev/mammoth/apis/mammoth-analytics.md) · [All operations](https://skmtc.dev/mammoth/apis/mammoth-analytics/llms.txt) · [OpenAPI document](https://skmtc.dev/mammoth/apis/mammoth-analytics/revisions/4b2c943a00dc?raw)
