---
title: "Create a workspace"
method: POST
path: "/v1/signup"
tags: ["Account"]
---

# Create a workspace

`POST /v1/signup`

## Request

- Base URL: `https://api.recruitmcp.com`
- URL: `https://api.recruitmcp.com/v1/signup`
- Auth: none required

Same as POST /v1/workspaces. attribution is optional. When it is omitted, the rmcp_attr cookie from the first visit is stored instead.

No authentication.

## Request body

- object
  - `name` string, required
  - `email` string, required: Owner email. Required: the confirmation link goes there, and the free credits are added once it is opened. A missing or malformed address is 400 invalid_request with details.field email.
  - `first_name` string, nullable: Owner first name. Optional. Not taken from the workspace name.
  - `marketing_opt_in` boolean: Optional. Leave false, or omit it, until the person ticks the product-updates checkbox.
  - `attribution` object
    - `utm_source` string, nullable: utm_source from the first visit.
    - `utm_medium` string, nullable
    - `utm_campaign` string, nullable
    - `utm_content` string, nullable
    - `utm_term` string, nullable
    - `referrer` string, nullable: https referrer without a query string.
    - `landing_path` string, nullable: Path of the first page. Starts with /.

## Response `201`

Created.

- WorkspaceCreated
  - `id` string, required
  - `name` string
  - `api_key` string, required: Shown once. Store it.
  - `balance_credits` integer
  - `scopes` string[]
  - `email_verification` 'not_required' | 'sent'
  - `signup_credits_pending` integer
  - `signup_credits_pending_reason` 'email_already_claimed' | 'normalized_email_used', nullable: Why the free grant is 0. Null when it is still pending or already on the balance. email_already_claimed is the same address. normalized_email_used is a plus-tag or dotted Gmail form of an address that already received it.

## Other responses

- `400`: `invalid_request` (do not retry): email is required. Free credits are added after you confirm it. `unsupported_version` (do not retry): RecruitMCP-Version is not a supported version.
- `429`: `rate_limited` (retry): Too many requests from this network. Try again later.

## Changes

- **2026-10-20** `ad27b35513a6`: 2 warning
  - added the new `approval_forced` enum value to the `error/code` response property for the response status `400`
  - added the new `approval_forced` enum value to the `error/code` response property for the response status `429`

[Operation history](https://skmtc.dev/recruitmcp/apis/recruitmcp-api/changes/v1/signup/post.md)

---

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