Create a project
Create a project owned by the API key user. The body can include spaces and timers for one atomic project setup. Agents should call POST /projects/preview first for multi-resource creates, then send expected_plan_hash with the create request.
Authorizations
Use a tickward API key from Settings. API keys start with tw_. Store keys as secrets and send them as Authorization: Bearer <key>.
Headers
Optional for POST, PATCH, and DELETE requests. Generate a random UUID with an operation prefix, for example timer-create-${crypto.randomUUID()}. Reuse the same key with the same method, path, query, and JSON body to safely retry one logical write for up to 24 hours. Reusing it with a different request returns 409. The server stores only a hash of the key.
8 - 128^[A-Za-z0-9._:-]+$Body
1 - 40Use a hex color such as #2563eb. Empty string clears color where supported.
^$|^#[0-9a-fA-F]{6}$Optional plan hash returned by POST /projects/preview. When present, the create request fails if the current body no longer matches the preview.
^sha256:[a-f0-9]{64}$Spaces to create with the project. Timers can be nested inside a space.
Timers to create with the project. Use space_id only when referencing a space id supplied in spaces[].id.
Response
Created project with created spaces and timers.
"project"40^#[0-9a-fA-F]{6}$ISO 8601 datetime string. Prefer UTC with Z or an explicit offset.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}"2026-10-10T09:30:00.000Z"
ISO 8601 datetime string. Prefer UTC with Z or an explicit offset.
^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}"2026-10-10T09:30:00.000Z"
"2026-10-10T09:30:00.000Z"
x >= 0x >= 0