Skip to main content

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.


_10
curl -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.


_11
curl -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.


_16
curl -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.


_10
curl -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.


_17
curl -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.


_10
curl -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

_10
204 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.


_10
curl -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.


_10
curl -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}/invoke
  • GET|POST|DELETE /api/v1/projects/{project_id}/skills
  • GET /api/v1/projects/{project_id}/skills/{skill_id}/download
  • GET|POST|DELETE /api/v1/projects/{project_id}/auth/users
  • GET|POST|DELETE /api/v1/projects/{project_id}/auth/groups
  • GET|POST|DELETE /api/v1/projects/{project_id}/auth/orgs
  • POST|DELETE /api/v1/projects/{project_id}/bind