Create a project
POST
/v1/projectsCreates a project in the credential's organization. Supports the optional `Idempotency-Key` header for safe retries; a project name that already exists in this organization answers 400 `validation_failed` with a `/name` field error (the uniqueness rule the in-app project creator also enforces) — note that when an Idempotency-Key IS supplied, that 400 is itself stored and replayed byte-identically on retry with the SAME key, exactly like any other outcome (D5).
Required scopes
projects:write
Availability
All plans
Quota cost
1 API call
Idempotency
Optional Idempotency-Key
Request
Request body
| Field | Type | Description |
|---|---|---|
namerequired | string | Display name, 1-200 characters after trimming.e.g. Website redesign |
description | string | Optional free-text description (max 2000 characters). |
▸ ▾ Raw request schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Display name, 1-200 characters after trimming.",
"example": "Website redesign"
},
"description": {
"description": "Optional free-text description (max 2000 characters).",
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"name"
],
"description": "Fields for creating a project."
}Response 201
The created project.
Fields
| Field | Type | Description |
|---|---|---|
idrequired | string | Stable opaque project id. |
namerequired | string | Display name, unique within the organization.e.g. Website redesign |
descriptionrequired | string | null | Free-text description, or null when unset. |
created_atrequired | string (date-time) | Creation time, ISO-8601 UTC. |
updated_atrequired | string (date-time) | Last-modified time, ISO-8601 UTC. |
▸ ▾ Raw response schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Stable opaque project id."
},
"name": {
"type": "string",
"description": "Display name, unique within the organization.",
"example": "Website redesign"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Free-text description, or null when unset."
},
"created_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Creation time, ISO-8601 UTC."
},
"updated_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
"description": "Last-modified time, ISO-8601 UTC."
}
},
"required": [
"id",
"name",
"description",
"created_at",
"updated_at"
],
"additionalProperties": false,
"description": "A project — a named grouping of tasks within an organization."
}Example request
curl
curl -X POST https://app.nowgetitdone.com/v1/projects \
-H "Authorization: Bearer gid_YOUR_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "Website redesign"
}'Possible errors
- 400
validation_failedRequest validation failed - 401
missing_credentialsMissing credentials - 401
invalid_api_keyInvalid API key - 401
invalid_tokenInvalid access token - 403
insufficient_scopeInsufficient scope - 403
feature_not_enabledFeature not enabled on this plan - 409
idempotency_in_progressA request with this Idempotency-Key is still in progress - 422
idempotency_key_reusedIdempotency-Key reused with a different request - 429
rate_limitedRate limit exceeded - 429
quota_exhaustedPlan quota exhausted - 500
internal_errorInternal server error