---
title: "Create a project"
method: POST
path: "/v1/projects"
tags: ["projects"]
---

# Create a project

`POST /v1/projects`

Create a project for the authenticated API key's team.

## Headers

- `Authorization` string, required

## Request body

- object
  - `name` string, required
  - `url` string — Required for web projects; optional for mobile projects.
  - `projectType` 'web' | 'mobile'
  - `description` string, nullable

## Response `201`

Project created

- ProjectsCreateAProjectResponse201
  - `project` ProjectDetail, required
    - `browserRegion` 'eu' | 'us' — Default proxy exit region for web runs. null keeps the provider's default networking. Web projects only.
    - `prTestingEnabled` boolean — Test PR deployments automatically.
    - `prTestingInstructions` string, nullable — Free-form instructions for the PR exploration agent.
    - `prTestingDebounceMinutes` integer — Quiet period before a PR deployment is tested. 0 disables debouncing.
    - `prTestingBlockMerge` boolean — Conclude the GitHub check run as failed when tests fail, so a required TesterArmy check blocks the merge. Off by default.
    - `includeExampleMobileApp` boolean — Offer the example app as a run target. Mobile projects only.
    - `autoDeleteOldestMobileApp` boolean — Delete the oldest unused app builds when an upload exceeds the storage quota. Mobile projects only.
    - `accessibilityAuditEnabled` boolean — Scan visited pages with axe-core during web runs and report critical accessibility violations as non-blocking warnings. On by default. Web projects only.
    - `id` string, uuid, required
    - `shortId` string, nullable, required
    - `name` string, required
    - `url` string, nullable, required
    - `projectType` 'web' | 'mobile', required
    - `description` string, nullable, required
    - `environments` ProjectDetailEnvironmentsItems[], required
      - `id` string, uuid, required
      - `name` string, required
      - `slug` string, required
      - `kind` 'production' | 'pr_preview' | 'static', required
      - `url` string, nullable, required
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `400` — Bad Request - Invalid input parameters
- `401` — Unauthorized - Invalid or missing API key
- `403` — Project limit exceeded for the current plan
- `429` — Too Many Requests - Usage limit exceeded
- `500` — Internal Server Error
- `504` — Gateway Timeout - Test execution exceeded time limit

## Changes

- **2026-08-22** `bf198f94879a` — 2 breaking, 3 warning
  - the `name` request property's minLength was increased from `0` to `1`
  - the `url` request property's minLength was increased from `0` to `1`
  - the `description` request property's maxLength was set to `2000`
  - the `name` request property's maxLength was set to `255`
  - …1 more
- **2026-08-15** `89133f9e1875` — 1 info
  - added the optional property `project/prTestingBlockMerge` to the response with the `201` status
- **2026-08-12** `3156fb59f41d` — 7 info
  - added the optional property `project/accessibilityAuditEnabled` to the response with the `201` status
  - added the optional property `project/autoDeleteOldestMobileApp` to the response with the `201` status
  - added the optional property `project/browserRegion` to the response with the `201` status
  - added the optional property `project/includeExampleMobileApp` to the response with the `201` status
  - …3 more
- **2026-08-07** `58944bb9844d` — 1 info
  - the request property `url` became optional

[Change history](https://skmtc.dev/tester/apis/testerarmy-api/changes/v1/projects/post.md)

---

[API](https://skmtc.dev/tester/apis/testerarmy-api.md) · [All operations](https://skmtc.dev/tester/apis/testerarmy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/tester/testerarmy-api/revisions/c0f981a708f9/schema)
