Projects endpoints
Use the /projects endpoints to create, read, update, and delete SkillFlaw projects.
All authenticated project endpoints require a project scope.
At minimum, include a tenant-id header.
For business scope requests, also provide business-id; for personal scope, is-self defaults to true.
Read projects
Get a list of projects visible in the current scope.
_10curl -X GET \_10 "$SKILLFLAW_URL/api/v1/projects/" \_10 -H "accept: application/json" \_10 -H "x-api-key: $SKILLFLAW_API_KEY" \_10 -H "tenant-id: $TENANT_ID"
Result
_12[_12 {_12 "name": "Starter Project",_12 "description": "Manage your own projects. Download and upload projects.",_12 "id": "1415de42-8f01-4f36-bf34-539f23e47466",_12 "parent_id": null,_12 "tenant_id": "3c0f3b3d-4d37-4f35-9a4a-b0f2db7c9f10",_12 "business_id": 0,_12 "is_online": false,_12 "creator_name": "skillflaw"_12 }_12]
Create project
Create a new project.
_11curl -X POST \_11 "$SKILLFLAW_URL/api/v1/projects/" \_11 -H "Content-Type: application/json" \_11 -H "x-api-key: $SKILLFLAW_API_KEY" \_11 -H "tenant-id: $TENANT_ID" \_11 -d '{_11 "name": "new_project_name",_11 "description": "Project discovery note",_11 "components_list": [],_11 "flows_list": []_11}'
Result
_10{_10 "name": "new_project_name",_10 "description": "Project discovery note",_10 "id": "b408ddb9-6266-4431-9be8-e04a62758331",_10 "parent_id": null,_10 "tenant_id": "3c0f3b3d-4d37-4f35-9a4a-b0f2db7c9f10",_10 "business_id": 0_10}
To add flows and components at project creation, retrieve the components_list and flows_list values from /all and /flows and add them to the request body.
Adding a flow to a project moves the flow from its previous location. The flow isn't copied.
_16curl -X POST \_16 "$SKILLFLAW_URL/api/v1/projects/" \_16 -H "accept: application/json" \_16 -H "Content-Type: application/json" \_16 -H "x-api-key: $SKILLFLAW_API_KEY" \_16 -H "tenant-id: $TENANT_ID" \_16 -d '{_16 "name": "new_project_name",_16 "description": "Project discovery note",_16 "components_list": [_16 "3fa85f64-5717-4562-b3fc-2c963f66afa6"_16 ],_16 "flows_list": [_16 "3fa85f64-5717-4562-b3fc-2c963f66afa6"_16 ]_16}'
Read project
Retrieve details of a specific project.
To find the UUID of your project, call the read projects endpoint.
_10curl -X GET \_10 "$SKILLFLAW_URL/api/v1/projects/$PROJECT_ID" \_10 -H "accept: application/json" \_10 -H "x-api-key: $SKILLFLAW_API_KEY" \_10 -H "tenant-id: $TENANT_ID"
Result
_10{_10 "name": "Starter Project",_10 "description": "Manage your own projects. Download and upload projects.",_10 "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",_10 "parent_id": null,_10 "tenant_id": "3c0f3b3d-4d37-4f35-9a4a-b0f2db7c9f10",_10 "business_id": 0,_10 "flows": []_10}
If you provide explicit pagination parameters such as page and size, the response shape becomes { "project": ..., "flows": { ...pagination... } }.
Update project
Update the information of a specific project with a PATCH request.
Each PATCH request updates the project with the values you send. Only the fields you include in your request are updated. If you send the same values multiple times, the update is still processed, even if the values are unchanged.
_17curl -X PATCH \_17 "$SKILLFLAW_URL/api/v1/projects/b408ddb9-6266-4431-9be8-e04a62758331" \_17 -H "accept: application/json" \_17 -H "Content-Type: application/json" \_17 -H "x-api-key: $SKILLFLAW_API_KEY" \_17 -H "tenant-id: $TENANT_ID" \_17 -d '{_17 "name": "updated_project_name",_17 "description": "Updated discovery note",_17 "parent_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",_17 "components": [_17 "3fa85f64-5717-4562-b3fc-2c963f66afa6"_17 ],_17 "flows": [_17 "3fa85f64-5717-4562-b3fc-2c963f66afa6"_17 ]_17}'
Result
_10{_10 "name": "updated_project_name",_10 "description": "Updated discovery note",_10 "id": "b408ddb9-6266-4431-9be8-e04a62758331",_10 "parent_id": null_10}
Delete project
Delete a specific project.
_10curl -X DELETE \_10 "$SKILLFLAW_URL/api/v1/projects/$PROJECT_ID" \_10 -H "accept: */*" \_10 -H "x-api-key: $SKILLFLAW_API_KEY" \_10 -H "tenant-id: $TENANT_ID"
Result
_10204 No Content
Export a project
Download all flows from a project as a zip file. SkillFlaw strips API keys from the exported flow JSON before packaging the archive.
The --output flag is optional.
_10curl -X GET \_10 "$SKILLFLAW_URL/api/v1/projects/download/$PROJECT_ID" \_10 -H "accept: application/json" \_10 -H "x-api-key: $SKILLFLAW_API_KEY" \_10 -H "tenant-id: $TENANT_ID" \_10 --output skillflaw-project-flows.zip
Import a project
Import a project definition by uploading a JSON file.
The uploaded file must contain project_name, project_description, and flows.
The current backend implementation does not consume the ZIP returned by GET /api/v1/projects/download/{project_id} directly.
_10curl -X POST \_10 "$SKILLFLAW_URL/api/v1/projects/upload/" \_10 -H "accept: application/json" \_10 -H "Content-Type: multipart/form-data" \_10 -H "x-api-key: $SKILLFLAW_API_KEY" \_10 -H "tenant-id: $TENANT_ID" \_10 -F "file=@project-import.json;type=application/json"
Example project-import.json payload:
_14{_14 "project_name": "Imported Project",_14 "project_description": "Imported project discovery note",_14 "flows": [_14 {_14 "name": "Imported Flow",_14 "description": "Imported flow description",_14 "data": {_14 "nodes": [],_14 "edges": []_14 }_14 }_14 ]_14}
Other project endpoints
/api/v1/projects also exposes project-related endpoints for online invocation, skill relations, authorization relations, and personal binding state, including:
POST /api/v1/projects/{project_id}/invokeGET|POST|DELETE /api/v1/projects/{project_id}/skillsGET /api/v1/projects/{project_id}/skills/{skill_id}/downloadGET|POST|DELETE /api/v1/projects/{project_id}/auth/usersGET|POST|DELETE /api/v1/projects/{project_id}/auth/groupsGET|POST|DELETE /api/v1/projects/{project_id}/auth/orgsPOST|DELETE /api/v1/projects/{project_id}/bind