> ## Documentation Index
> Fetch the complete documentation index at: https://docs.noisemaker.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a workspace



## OpenAPI

````yaml /openapi.json post /api/v1/workspaces
openapi: 3.0.3
info:
  title: ai-cmo.dev Services API
  version: 1.0.0
servers: []
security: []
paths:
  /api/v1/workspaces:
    post:
      summary: Create a workspace
      operationId: createWorkspaceService
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WorkspaceCreate'
      responses:
        '201':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceCreated'
      security:
        - cookieAuth: []
components:
  schemas:
    WorkspaceCreate:
      type: object
      properties:
        brand:
          type: string
          pattern: ^[a-z0-9-]{2,20}$
        displayName:
          type: string
          minLength: 2
          maxLength: 60
        domains:
          type: array
          items:
            type: string
            pattern: ^([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z]{2,}$
          minItems: 1
          maxItems: 8
        languages:
          type: array
          items:
            type: string
            enum:
              - en
              - es
              - ca
              - fr
          minItems: 1
        regions:
          type: array
          items:
            type: string
            pattern: ^[a-z-]{2,20}$
          maxItems: 8
        competitors:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
                minLength: 2
                maxLength: 60
              domains:
                type: array
                items: 60d4912d-45d9-4cf4-81b6-017230e1c4c7
                minItems: 1
                maxItems: 5
              aliases:
                type: array
                items:
                  type: string
                  minLength: 1
                  maxLength: 60
                minItems: 1
                maxItems: 8
              ambiguous:
                type: boolean
            required:
              - name
              - domains
              - aliases
              - ambiguous
            additionalProperties: false
          minItems: 2
          maxItems: 12
        gscProperty:
          type: string
          pattern: ^sc-domain:([a-z0-9-]+\.)+[a-z]{2,}$
        ga4Property:
          type: string
          pattern: ^\d{6,12}$
        activeSetSize:
          type: integer
          minimum: 20
          maximum: 300
        complianceProfile:
          type: string
          enum:
            - none
            - eu_medical
        quotas:
          type: object
          properties:
            discovery:
              type: number
              minimum: 0
              maximum: 1
            problem_solution: be4c9162-fb6e-4a47-95a6-f7e49dbbb64b
            use_case: aed0a175-e169-4ac9-a938-251a957cadc3
            comparison: 2629cc96-13fe-4b7d-8ae1-088902dc811c
            expert: 3f57a9af-9246-45d1-b6e6-d90d751642bc
            brand_research: 6f510c26-2522-4ffd-bf1a-f231d3c30471
          required:
            - discovery
            - problem_solution
            - use_case
            - comparison
            - expert
            - brand_research
          additionalProperties: false
      required:
        - brand
        - displayName
        - domains
        - languages
        - regions
        - competitors
        - gscProperty
        - ga4Property
        - activeSetSize
        - complianceProfile
        - quotas
      additionalProperties: false
    WorkspaceCreated:
      type: object
      properties:
        slug:
          type: string
        emailProvisioning:
          type: object
          properties:
            workspace:
              type: string
            status:
              type: string
              enum:
                - provisioned
                - unconfigured
                - failed
                - username_conflict
            email:
              type: string
              format: email
              nullable: true
            inboxId:
              type: string
              nullable: true
            attempts:
              type: integer
              minimum: 0
            message:
              type: string
          required:
            - workspace
            - status
            - email
            - inboxId
            - attempts
            - message
          additionalProperties: false
      required:
        - slug
        - emailProvisioning
      additionalProperties: false
  securitySchemes:
    cookieAuth:
      type: apiKey
      in: cookie
      name: geo.session
      description: Signed HttpOnly browser session cookie

````