REST API
Manage projects and tasks programmatically via the Workestra REST API.
Every project and task action you can do in the UI, you can also do via HTTP. The API uses the same permissions model as the web app — authenticate with a workspace API key, get back JSON.
Screenshot needed — add an annotated image showing this UI
Authentication
All requests require an API key in the Authorization header:
curl https://<your-workspace>.workestra.app/api/v1/projects \
-H "Authorization: Bearer wsk_live_…"Generate keys at Settings → API Keys. See the general API Authentication page for setup.
Project Endpoints
Base path: /api/v1/projects
| Method | Path | Purpose |
|---|---|---|
GET | /api/v1/projects | List all projects you have access to |
GET | /api/v1/projects/:id | Get a single project |
POST | /api/v1/projects | Create a project |
PATCH | /api/v1/projects/:id | Update a project |
DELETE | /api/v1/projects/:id | Soft-delete a project (goes to Trash) |
Example: Create a Project
curl -X POST https://<your-workspace>.workestra.app/api/v1/projects \
-H "Authorization: Bearer wsk_live_…" \
-H "Content-Type: application/json" \
-d '{
"name": "Website Redesign",
"description": "Marketing site overhaul",
"status": "active",
"priority": "high",
"target_date": "2026-09-30"
}'Task (Issue) Endpoints
Base path: /api/v1/issues
| Method | Path | Purpose |
|---|---|---|
GET | /api/v1/issues | List tasks (filter by project, status, assignee) |
GET | /api/v1/issues/:id | Get a single task |
POST | /api/v1/issues | Create a task |
PATCH | /api/v1/issues/:id | Update a task |
DELETE | /api/v1/issues/:id | Soft-delete a task |
Example: Create a Task
curl -X POST https://<your-workspace>.workestra.app/api/v1/issues \
-H "Authorization: Bearer wsk_live_…" \
-H "Content-Type: application/json" \
-d '{
"project_id": "proj_abc123",
"title": "Fix login timeout",
"description": "Users are getting logged out after 5 minutes",
"priority": "high",
"assignee_id": "user_def456",
"labels": ["bug", "auth"]
}'Example: List Overdue Tasks
curl "https://<your-workspace>.workestra.app/api/v1/issues?status=open&overdue=true" \
-H "Authorization: Bearer wsk_live_…"Common Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default 1) |
per_page | integer | Items per page (default 25, max 100) |
sort | string | Field to sort by (default created_at) |
order | string | asc or desc |
project_id | uuid | Filter to a project |
status | string | Filter by status |
assignee_id | uuid | Filter by assignee |
Response Shape
All list endpoints return:
{
"data": [ … ],
"count": 42,
"error": null
}Single-object endpoints return the object directly.
Rate Limits
API requests are rate-limited. See Rate Limits for the current tiers.
Custom Fields in Responses
Task responses include a custom_fields object keyed by field key:
{
"id": "task_abc",
"title": "…",
"custom_fields": {
"client_name": "Acme Corp",
"risk_score": 3
}
}To update, send custom_fields in the PATCH body.
Next Steps
- Webhooks — push instead of poll
- API Authentication — key management
- Rate Limits — throughput by tier