Projects are a nested resource area in Alga PSA. The usual flow is create a project, add phases under the project, fetch task status mappings, and then create tasks against a phase.
At minimum you need a client_id and a project_name. You can also set dates, assignment, tags, and whether a default phase should be created.
curl -X POST "https://algapsa.com/api/v1/projects" \
-H "Content-Type: application/json" \
-H "X-API-Key: $ALGA_API_KEY" \
-d '{
"client_id": "$CLIENT_ID",
"project_name": "Office network refresh",
"description": "Replace switching hardware and update site documentation.",
"create_default_phase": true
}'curl -X POST "https://algapsa.com/api/v1/projects/$PROJECT_ID/phases" \
-H "Content-Type: application/json" \
-H "X-API-Key: $ALGA_API_KEY" \
-d '{
"phase_name": "Discovery",
"status": "planning"
}'The task create schema requires a project_status_mapping_id. In practice, that means you should fetch the available mappings before you build the task payload.
curl -X GET "https://algapsa.com/api/v1/projects/$PROJECT_ID/task-status-mappings" \
-H "X-API-Key: $ALGA_API_KEY"curl -X POST "https://algapsa.com/api/v1/projects/$PROJECT_ID/phases/$PHASE_ID/tasks" \
-H "Content-Type: application/json" \
-H "X-API-Key: $ALGA_API_KEY" \
-d '{
"task_name": "Survey existing switches",
"project_status_mapping_id": "$STATUS_MAPPING_ID",
"estimated_hours": 4
}'GET /api/v1/projects/{id} when you need full project details.GET /api/v1/projects/{id}/tasks when you need a project-wide task list.PUT /api/v1/projects/tasks/{taskId} when you need to update hours, assignment, or due dates.