POST
/api/public/v1/projects

Create a project

The first project a company creates also seeds its default ticket type. In the console, whoever creates a project becomes its first manager; a project created through the API has no members until somebody is added to it.

Required scope

The access token must carry this scope. A token missing it gets 403 Forbidden. Grant them to an API client under Dev Tools → API, to an assistant or CLI sign-in when you approve or edit it under Dev Tools, and to a teammate under Employee → Permissions.

projects:admin

Request Body

PropertyTypeDescription
namestringWhat the project is.
keystringUppercase, 2-10 characters, starting with a letter. Prefixes every ticket id in the project (APOLLO-14) and cannot be changed afterwards.
colorstringA palette key — blue, purple, green, orange, red, amber, indigo, gray.
descriptionstringWhat it is for.
managerIdstringSomebody to manage it alongside its creator, who always gets the role. Writes a project membership and nothing else. Must be an active employee of this company.
startDatestringISO 8601.
targetDatestringISO 8601.
POSTExample request
curl
curl -X POST "https://www.pxb.app/api/public/v1/projects" \
  -H "Authorization: Bearer your_access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Apollo billing rebuild",
    "key": "APOLLO",
    "color": "violet"
  }'
200Example response
json
{
  "message": "Project created successfully!",
  "content": {
    "project": {
      "id": "prj_a1b2c3",
      "key": "APOLLO",
      "name": "Apollo billing rebuild",
      "description": "Everything that has to land before invoicing moves over.",
      "color": "violet",
      "icon": null,
      "status": "ACTIVE",
      "startDate": "2026-07-01T12:00:00.000Z",
      "targetDate": "2026-12-31T12:00:00.000Z",
      "creator": {
        "employeeId": "emp_12ab",
        "name": "Sam Okafor",
        "email": null,
        "avatarUrl": null
      },
      "ticketCount": 24,
      "milestoneCount": 3,
      "goalCount": 5,
      "createdAt": "2026-06-02T10:00:00.000Z",
      "updatedAt": "2026-08-20T09:41:00.000Z"
    }
  }
}
400Example response

In the console

The same thing done by hand, for anyone comparing the API against the screen they already use.

Projects
/projects
  1. Projects.
  2. New project.