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

# Create a project

`POST /projects`

## Request

- Base URL: `https://app.honeybadger.io/v3`
- URL: `https://app.honeybadger.io/v3/projects`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/honeybadger/apis/honeybadger-api/docs/projects/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new project in the account.

## Request body

- ProjectCreateInput: Writable project attributes. Omitted fields are unchanged; null resets or clears the fields marked nullable. `team_id` and `disable_email_notifications` can only be set on create. Read-only fields are ignored.
  - `name` string, required: Project name
  - `resolve_errors_on_deploy` boolean, nullable: Resolve every open fault when a deploy is recorded. Null resets it to true.
  - `disable_public_links` boolean, nullable: Disallow shareable public fault links. Null resets it to false.
  - `language` string, nullable: Primary language, used to format backtraces. Null clears it.
  - `user_url` string, nullable: Template for linking a fault's affected user into your own system. `[user_id]` and `[user_email]` are substituted. Null clears it.
  - `source_url` string, nullable: Template for linking a backtrace line to your source host. `[file]` and `[line]` are substituted. Null clears it.
  - `user_search_field` string, nullable: Context key identifying the affected user, for when it is not in the default `context.user_email` or `context.user_id`. Null clears it.
  - `asana_workspace_id` string, nullable: Asana workspace used by the project's Asana integration. Null clears it.
  - `customer_throttle` integer, nullable: Notices accepted per minute before throttling kicks in. Null clears it.
  - `purge_days` integer, nullable: Days to retain notices. Changing it requires custom retention on the account; without it, only the current value (on create, the default) is accepted. Null clears it.
  - `disable_email_notifications` boolean: Create-only. Members added with the project get email notifications switched off. Not stored or returned.
  - `team_id` string: Puts the new project in this team. Create-only: afterwards the team's `project_ids` owns membership. Including it requires `team:write` in addition to the operation's project scope, and the user must be allowed to manage the team. Without `team:write` the entire request is rejected with 403 `insufficient_scope`; no other fields are saved.

## Response `201`

Project created

- object
  - `data` Project, required: A Honeybadger project: one application or service. Errors, Insights data, uptime sites, check-ins, deploys and integrations all belong to a project.
    - `id` string, required
    - `account_id` string, required: ID of the account this project belongs to
    - `name` string, required: Project name
    - `active` boolean, required: Whether the project is active
    - `disable_public_links` boolean, required: Whether public error links are disabled
    - `environments` string[], required: List of environment names seen in this project
    - `resolve_errors_on_deploy` boolean, required: Whether recording a deploy resolves every open fault
    - `user_url` string, nullable, required: Template linking a fault's affected user into your own system. `[user_id]` and `[user_email]` are substituted.
    - `source_url` string, nullable, required: Template linking a backtrace line to your source host. `[file]` and `[line]` are substituted.
    - `user_search_field` string, nullable, required: Context key identifying the affected user, when it is not in the default `context.user_email` or `context.user_id`.
    - `asana_workspace_id` string, nullable, required: Asana workspace used by the project's Asana integration
    - `customer_throttle` integer, nullable, required: Notices accepted per minute before throttling kicks in
    - `language` string, nullable, required: Primary programming language
    - `fault_count` integer, required: Total number of faults (errors) in this project
    - `unresolved_fault_count` integer, required: Number of unresolved faults
    - `last_notice_at` string, date-time, nullable, required: When the last error was received
    - `earliest_notice_at` string, date-time, nullable, required: The start of the retention window: now minus the project's `purge_days` (or the account's retention when unset), at most 180 days. Computed on each read, so it moves forward with the clock.
    - `purge_days` integer, nullable, required: Data retention period in days
    - `created_at` string, date-time, required: When the project was created
    - `links` WebLinks, required: Links into the Honeybadger web UI
      - `web` string, uri, required: The resource's page in the Honeybadger web UI, as an absolute URL. Resources without a page, such as outages and deploys, don't have `links`. For a project provisioned through Heroku, error, notice and comment links go through Heroku's single sign-on.
  - `meta` ResponseMeta
    - `request_id` string: Unique identifier for the request, for correlating with support

## Other responses

- `400`: A query parameter is malformed or outside its allowed values. `error.details` names the parameter.
- `401`: The credential is missing, invalid, expired or revoked (`unauthorized`), or was sent in a way v3 doesn't accept (see the examples).
- `403`: The credential isn't allowed to do this. `error.code` says why. An account or project the credential doesn't cover is 404 `not_found`, not 403.
- `404`: Resource not found
- `422`: Validation error
- `429`: Another project is being created in this account at the same moment (`concurrent_request`), or the rate limit is exceeded (`rate_limit_exceeded`). Nothing was created. Wait `Retry-After` seconds and retry.

---

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