Skip to content

Projects

A Project is a workspace within a Customer used to organize cloud resources, manage team access, and track costs for a specific initiative or department. Every resource, such as a virtual machine or a database, must belong to a Project.

This entity acts as a scope for collaboration, allowing a subset of users from the parent Customer to work together with specific permissions.

Key Concepts

  • Hierarchical Structure: Every Project must belong to exactly one Customer. It cannot exist independently.
  • Resource Container: Projects are the direct parents of all provisioned resources in the cloud.
  • Team Collaboration: A Project has its own team of members with roles (e.g., Project Manager, Administrator) that are scoped only to that project.
  • Cost Tracking: While billing is handled by the parent Customer, costs are tracked on a per-project basis, enabling fine-grained financial reporting.

Operations Summary

Method Endpoint Description
Core CRUD
GET /api/projects/ List projects
GET /api/projects/{uuid}/ Retrieve project details
POST /api/projects/ Create a new project
PUT /api/projects/{uuid}/ Update project details
PATCH /api/projects/{uuid}/ Partially update project details
DELETE /api/projects/{uuid}/ Delete a project
State Management
POST /api/projects/{uuid}/recover/ Recover a soft-deleted project
User Management
GET /api/projects/{uuid}/list_users/ List users
GET /api/projects/{project_uuid}/other_users/ Other users
POST /api/projects/{uuid}/add_user/ Add user
POST /api/projects/{uuid}/delete_user/ Delete user
POST /api/projects/{uuid}/update_user/ Update user
Configuration & Updates
POST /api/projects/{uuid}/move_project/ Move project to another customer
Data & Reporting
GET /api/projects/{uuid}/stats/ Get project resource usage statistics
Checklists
GET /api/projects/{uuid}/checklist/ Get checklist with questions and existing answers
GET /api/projects/checklist-template/ Get checklist template for creating new objects
GET /api/projects/{uuid}/completion_status/ Get checklist completion status
POST /api/projects/{uuid}/submit_answers/ Submit checklist answers
Remote Actions & Sync
POST /api/projects/{uuid}/sync_user_roles/ Sync user roles

Core CRUD

List projects

Retrieve a list of projects. The list is filtered based on the user's permissions. By default, only active projects are shown.

1
2
3
4
http \
  GET \
  https://api.example.com/api/projects/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_list # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_list.sync(client=client)

for item in response:
    print(item)
  1. API Source: projects_list
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import { projectsList } from 'waldur-js-client';

try {
  const response = await projectsList({
  auth: "Token YOUR_API_TOKEN"
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Description
backend_id string
can_admin boolean Return a list of projects where current user is admin.
can_manage boolean Return a list of projects where current user is manager or a customer owner.
conceal_finished_projects boolean Conceal finished projects
created string (date-time) Created after
customer array Multiple values may be separated by commas.
customer_abbreviation string
customer_name string
customer_native_name string
description string
field array
include_terminated boolean Include soft-deleted (terminated) projects. Only available to staff and support users, or users with organizational roles who can see their terminated projects.
is_removed boolean
modified string (date-time) Modified after
name string
name_exact string
o array Ordering

page integer A page number within the paginated result set.
page_size integer Number of results to return per page.
query string Filter by name, slug, UUID, backend ID or resource effective ID
slug string

200 -

The response body is an array of objects, where each object has the following structure:

Field Type Description
url string (uri)
uuid string (uuid)
name string
slug string
customer string (uri)
customer_uuid string (uuid)
customer_name string
customer_slug string
customer_native_name string
customer_abbreviation string
description string
customer_display_billing_info_in_projects boolean
created string (date-time)
type string (uri)
type_name string
type_uuid string (uuid)
backend_id string
start_date string (date)
end_date string (date)
end_date_requested_by string (uri)
oecd_fos_2007_code any
oecd_fos_2007_label string
is_industry boolean
image string (uri)
resources_count integer
max_service_accounts integer Maximum number of service accounts allowed
kind any
is_removed boolean
termination_metadata any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.
project_credit number (double)
marketplace_resource_count object (free-form)
billing_price_estimate any

Retrieve project details

Fetch the details of a specific project by its UUID. Users can access details of terminated projects they previously had access to.

1
2
3
4
http \
  GET \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_retrieve # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_retrieve.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

print(response)
  1. API Source: projects_retrieve
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsRetrieve } from 'waldur-js-client';

try {
  const response = await projectsRetrieve({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Name Type
field array

200 -

Field Type Description
url string (uri)
uuid string (uuid)
name string
slug string
customer string (uri)
customer_uuid string (uuid)
customer_name string
customer_slug string
customer_native_name string
customer_abbreviation string
description string
customer_display_billing_info_in_projects boolean
created string (date-time)
type string (uri)
type_name string
type_uuid string (uuid)
backend_id string
start_date string (date)
end_date string (date)
end_date_requested_by string (uri)
oecd_fos_2007_code any
oecd_fos_2007_label string
is_industry boolean
image string (uri)
resources_count integer
max_service_accounts integer Maximum number of service accounts allowed
kind any
is_removed boolean
termination_metadata any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.
project_credit number (double)
marketplace_resource_count object (free-form)
billing_price_estimate any

Create a new project

A new project can be created by users with staff privilege (is_staff=True) or customer owners. Project resource quota is optional.

1
2
3
4
5
6
http \
  POST \
  https://api.example.com/api/projects/ \
  Authorization:"Token YOUR_API_TOKEN" \
  name="my-awesome-project" \
  customer="https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.project_request import ProjectRequest # (1)
from waldur_api_client.api.projects import projects_create # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = ProjectRequest(
    name="my-awesome-project",
    customer="https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/"
)
response = projects_create.sync(
    client=client,
    body=body_data
)

print(response)
  1. Model Source: ProjectRequest
  2. API Source: projects_create
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import { projectsCreate } from 'waldur-js-client';

try {
  const response = await projectsCreate({
  auth: "Token YOUR_API_TOKEN",
  body: {
    "name": "my-awesome-project",
    "customer": "https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Field Type Required Description
name string
slug string
customer string (uri)
description string
type string (uri)
backend_id string
start_date string (date)
end_date string (date)
oecd_fos_2007_code any
is_industry boolean
image string (binary)
kind any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.

201 -

Field Type Description
url string (uri)
uuid string (uuid)
name string
slug string
customer string (uri)
customer_uuid string (uuid)
customer_name string
customer_slug string
customer_native_name string
customer_abbreviation string
description string
customer_display_billing_info_in_projects boolean
created string (date-time)
type string (uri)
type_name string
type_uuid string (uuid)
backend_id string
start_date string (date)
end_date string (date)
end_date_requested_by string (uri)
oecd_fos_2007_code any
oecd_fos_2007_label string
is_industry boolean
image string (uri)
resources_count integer
max_service_accounts integer Maximum number of service accounts allowed
kind any
is_removed boolean
termination_metadata any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.
project_credit number (double)
marketplace_resource_count object (free-form)
billing_price_estimate any

Update project details

Update the details of a project. Requires project administrator or customer owner permissions.

1
2
3
4
5
6
http \
  PUT \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/ \
  Authorization:"Token YOUR_API_TOKEN" \
  name="my-awesome-project" \
  customer="https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.project_request import ProjectRequest # (1)
from waldur_api_client.api.projects import projects_update # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = ProjectRequest(
    name="my-awesome-project",
    customer="https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/"
)
response = projects_update.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

print(response)
  1. Model Source: ProjectRequest
  2. API Source: projects_update
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import { projectsUpdate } from 'waldur-js-client';

try {
  const response = await projectsUpdate({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  body: {
    "name": "my-awesome-project",
    "customer": "https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required Description
name string
slug string
customer string (uri)
description string
type string (uri)
backend_id string
start_date string (date)
end_date string (date)
oecd_fos_2007_code any
is_industry boolean
image string (binary)
kind any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.

200 -

Field Type Description
url string (uri)
uuid string (uuid)
name string
slug string
customer string (uri)
customer_uuid string (uuid)
customer_name string
customer_slug string
customer_native_name string
customer_abbreviation string
description string
customer_display_billing_info_in_projects boolean
created string (date-time)
type string (uri)
type_name string
type_uuid string (uuid)
backend_id string
start_date string (date)
end_date string (date)
end_date_requested_by string (uri)
oecd_fos_2007_code any
oecd_fos_2007_label string
is_industry boolean
image string (uri)
resources_count integer
max_service_accounts integer Maximum number of service accounts allowed
kind any
is_removed boolean
termination_metadata any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.
project_credit number (double)
marketplace_resource_count object (free-form)
billing_price_estimate any

Partially update project details

Partially update the details of a project. Requires project administrator or customer owner permissions.

1
2
3
4
http \
  PATCH \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.patched_project_request import PatchedProjectRequest # (1)
from waldur_api_client.api.projects import projects_partial_update # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = PatchedProjectRequest()
response = projects_partial_update.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

print(response)
  1. Model Source: PatchedProjectRequest
  2. API Source: projects_partial_update
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsPartialUpdate } from 'waldur-js-client';

try {
  const response = await projectsPartialUpdate({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required Description
name string
slug string
customer string (uri)
description string
type string (uri)
backend_id string
start_date string (date)
end_date string (date)
oecd_fos_2007_code any
is_industry boolean
image string (binary)
kind any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.

200 -

Field Type Description
url string (uri)
uuid string (uuid)
name string
slug string
customer string (uri)
customer_uuid string (uuid)
customer_name string
customer_slug string
customer_native_name string
customer_abbreviation string
description string
customer_display_billing_info_in_projects boolean
created string (date-time)
type string (uri)
type_name string
type_uuid string (uuid)
backend_id string
start_date string (date)
end_date string (date)
end_date_requested_by string (uri)
oecd_fos_2007_code any
oecd_fos_2007_label string
is_industry boolean
image string (uri)
resources_count integer
max_service_accounts integer Maximum number of service accounts allowed
kind any
is_removed boolean
termination_metadata any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.
project_credit number (double)
marketplace_resource_count object (free-form)
billing_price_estimate any

Delete a project

Delete a project. If the project has any active resources, the deletion request will fail with a 409 Conflict response. This action performs a soft-delete, and the project can be recovered later.

1
2
3
4
http \
  DELETE \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_destroy # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_destroy.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

print(response)
  1. API Source: projects_destroy
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsDestroy } from 'waldur-js-client';

try {
  const response = await projectsDestroy({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)

204 - No response body


State Management

Recover a soft-deleted project

Recovers a soft-deleted (terminated) project, making it active again. Provides options to restore previous team members automatically (staff-only) or send them new invitations.

1
2
3
4
http \
  POST \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/recover/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.project_recovery_request import ProjectRecoveryRequest # (1)
from waldur_api_client.api.projects import projects_recover # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = ProjectRecoveryRequest()
response = projects_recover.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

print(response)
  1. Model Source: ProjectRecoveryRequest
  2. API Source: projects_recover
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsRecover } from 'waldur-js-client';

try {
  const response = await projectsRecover({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required Description
restore_team_members boolean Whether to automatically restore team members who had access before project deletion (staff only)
Constraints: default: False
send_invitations_to_previous_members boolean Whether to send invitations to users who had access before project deletion
Constraints: default: False
end_date string (date) End date for the recovered project

200 -

Field Type Description
url string (uri)
uuid string (uuid)
name string
slug string
customer string (uri)
customer_uuid string (uuid)
customer_name string
customer_slug string
customer_native_name string
customer_abbreviation string
description string
customer_display_billing_info_in_projects boolean
created string (date-time)
type string (uri)
type_name string
type_uuid string (uuid)
backend_id string
start_date string (date)
end_date string (date)
end_date_requested_by string (uri)
oecd_fos_2007_code any
oecd_fos_2007_label string
is_industry boolean
image string (uri)
resources_count integer
max_service_accounts integer Maximum number of service accounts allowed
kind any
is_removed boolean
termination_metadata any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.
project_credit number (double)
marketplace_resource_count object (free-form)
billing_price_estimate any

User Management

List users

1
2
3
4
http \
  GET \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/list_users/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_list_users_list # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_list_users_list.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

for item in response:
    print(item)
  1. API Source: projects_list_users_list
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsListUsersList } from 'waldur-js-client';

try {
  const response = await projectsListUsersList({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Name Type Description
field array Fields to include in response
full_name string User full name
native_name string User native name
o array Ordering fields
page integer A page number within the paginated result set.
page_size integer Number of results to return per page.
role string (uuid) Role UUID or name
search_string string Search string for user
user string (uuid) User UUID
user_slug string User slug
user_url string User URL
username string User username

200 -

The response body is an array of objects, where each object has the following structure:

Field Type Description
uuid string (uuid)
created string (date-time)
expiration_time string (date-time)
role_name string
role_uuid string (uuid)
user_email string (email)
user_full_name string
user_username string Required. 128 characters or fewer. Lowercase letters, numbers and @/./+/-/_ characters
user_uuid string (uuid)
user_image string (uri)
created_by_full_name string
created_by_uuid string (uuid)

Other users

A list of users which can be added to the current project from other projects of the same customer.

1
2
3
4
http \
  GET \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/other_users/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_other_users_list # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_other_users_list.sync(
    project_uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

for item in response:
    print(item)
  1. API Source: projects_other_users_list
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsOtherUsersList } from 'waldur-js-client';

try {
  const response = await projectsOtherUsersList({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "project_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required Description
project_uuid string (uuid) UUID of the project
Name Type Description
agreement_date string (date-time) Agreement date after
civil_number string
date_joined string (date-time) Date joined after
description string
email string
full_name string Full name
is_active boolean
job_title string
modified string (date-time) Date modified after
native_name string
o string Ordering. Sort by a combination of first name, last name, and username.
Enum: concatenated_name, -concatenated_name
organization string
page integer A page number within the paginated result set.
page_size integer Number of results to return per page.
phone_number string
registration_method string
user_keyword string User keyword
username string

200 -

The response body is an array of objects, where each object has the following structure:

Field Type Description
url string (uri)
uuid string (uuid)
username string Required. 128 characters or fewer. Lowercase letters, numbers and @/./+/-/_ characters
full_name string
native_name string
email string (email)
image string (uri)

Add user

1
2
3
4
5
6
http \
  POST \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/add_user/ \
  Authorization:"Token YOUR_API_TOKEN" \
  role="string-value" \
  user="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.user_role_create_request import UserRoleCreateRequest # (1)
from waldur_api_client.api.projects import projects_add_user # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = UserRoleCreateRequest(
    role="string-value",
    user="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
)
response = projects_add_user.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

print(response)
  1. Model Source: UserRoleCreateRequest
  2. API Source: projects_add_user
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import { projectsAddUser } from 'waldur-js-client';

try {
  const response = await projectsAddUser({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  body: {
    "role": "string-value",
    "user": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required
role string
user string (uuid)
expiration_time string (date-time)

201 -

Field Type
expiration_time string (date-time)

400 -

Field Type Description
non_field_errors array of strings

Delete user

1
2
3
4
5
6
http \
  POST \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/delete_user/ \
  Authorization:"Token YOUR_API_TOKEN" \
  role="string-value" \
  user="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.user_role_delete_request import UserRoleDeleteRequest # (1)
from waldur_api_client.api.projects import projects_delete_user # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = UserRoleDeleteRequest(
    role="string-value",
    user="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
)
response = projects_delete_user.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

print(response)
  1. Model Source: UserRoleDeleteRequest
  2. API Source: projects_delete_user
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import { projectsDeleteUser } from 'waldur-js-client';

try {
  const response = await projectsDeleteUser({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  body: {
    "role": "string-value",
    "user": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required
role string
user string (uuid)
expiration_time string (date-time)

200 - No response body


Update user

1
2
3
4
5
6
http \
  POST \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/update_user/ \
  Authorization:"Token YOUR_API_TOKEN" \
  role="string-value" \
  user="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.user_role_update_request import UserRoleUpdateRequest # (1)
from waldur_api_client.api.projects import projects_update_user # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = UserRoleUpdateRequest(
    role="string-value",
    user="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
)
response = projects_update_user.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

print(response)
  1. Model Source: UserRoleUpdateRequest
  2. API Source: projects_update_user
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import { projectsUpdateUser } from 'waldur-js-client';

try {
  const response = await projectsUpdateUser({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  body: {
    "role": "string-value",
    "user": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required
role string
user string (uuid)
expiration_time string (date-time)

200 -

Field Type
expiration_time string (date-time)

Configuration & Updates

Move project to another customer

Moves a project and its associated resources to a different customer. This is a staff-only action. You can choose whether to preserve existing project permissions for users.

1
2
3
4
5
6
http \
  POST \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/move_project/ \
  Authorization:"Token YOUR_API_TOKEN" \
  customer="https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/" \
  preserve_permissions=true
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.move_project_request import MoveProjectRequest # (1)
from waldur_api_client.api.projects import projects_move_project # (2)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)

body_data = MoveProjectRequest(
    customer="https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/",
    preserve_permissions=true
)
response = projects_move_project.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

print(response)
  1. Model Source: MoveProjectRequest
  2. API Source: projects_move_project
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import { projectsMoveProject } from 'waldur-js-client';

try {
  const response = await projectsMoveProject({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  body: {
    "customer": "https://api.example.com/api/customer/a1b2c3d4-e5f6-7890-abcd-ef1234567890/",
    "preserve_permissions": true
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required
customer string (uri)
preserve_permissions boolean

200 -

Field Type Description
url string (uri)
uuid string (uuid)
name string
slug string
customer string (uri)
customer_uuid string (uuid)
customer_name string
customer_slug string
customer_native_name string
customer_abbreviation string
description string
customer_display_billing_info_in_projects boolean
created string (date-time)
type string (uri)
type_name string
type_uuid string (uuid)
backend_id string
start_date string (date)
end_date string (date)
end_date_requested_by string (uri)
oecd_fos_2007_code any
oecd_fos_2007_label string
is_industry boolean
image string (uri)
resources_count integer
max_service_accounts integer Maximum number of service accounts allowed
kind any
is_removed boolean
termination_metadata any
staff_notes string
grace_period_days integer Number of extra days after project end date before resources are terminated. Overrides customer-level setting.
project_credit number (double)
marketplace_resource_count object (free-form)
billing_price_estimate any

400 -

Field Type Description
non_field_errors array of strings

Data & Reporting

Get project resource usage statistics

Provides statistics about the resource usage (e.g., CPU, RAM, storage) for all resources within a project. Can be filtered to show usage for the current month only.

1
2
3
4
http \
  GET \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/stats/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_stats_retrieve # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_stats_retrieve.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

print(response)
  1. API Source: projects_stats_retrieve
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsStatsRetrieve } from 'waldur-js-client';

try {
  const response = await projectsStatsRetrieve({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Name Type Description
for_current_month boolean If true, returns usage data for the current month only. Otherwise, returns total usage.

200 -

Field Type
components array of objects
components.type string
components.name string
components.description string
components.measured_unit string
components.billing_type string
components.usage integer
components.limit_usage integer
components.limit integer
components.offering_name string
components.offering_uuid string (uuid)

Checklists

Get checklist with questions and existing answers

Get checklist with questions and existing answers.

1
2
3
4
http \
  GET \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/checklist/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_checklist_retrieve # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_checklist_retrieve.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

print(response)
  1. API Source: projects_checklist_retrieve
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsChecklistRetrieve } from 'waldur-js-client';

try {
  const response = await projectsChecklistRetrieve({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)

200 -

Field Type Description
checklist object (free-form)
completion object
completion.uuid string (uuid)
completion.is_completed boolean Whether all required questions have been answered
completion.completion_percentage number (double)
completion.unanswered_required_questions array of anys
completion.checklist_name string
completion.checklist_description string
completion.created string (date-time)
completion.modified string (date-time)
questions array of objects
questions.uuid string (uuid)
questions.description string
questions.user_guidance string
questions.question_type any Type of question and expected answer format
questions.required boolean
questions.order integer
questions.existing_answer object (free-form)
questions.question_options array of anys
questions.min_value string (decimal) Minimum value allowed for NUMBER type questions
questions.max_value string (decimal) Maximum value allowed for NUMBER type questions
questions.allowed_file_types any List of allowed file extensions (e.g., ['.pdf', '.doc', '.docx']). If empty, all file types are allowed.
questions.allowed_mime_types any List of allowed MIME types (e.g., ['application/pdf', 'application/msword']). If empty, MIME type validation is not enforced. When both extensions and MIME types are specified, files must match both criteria for security.
questions.max_file_size_mb integer Maximum file size in megabytes. If not set, no size limit is enforced.
questions.max_files_count integer Maximum number of files allowed for MULTIPLE_FILES type questions. If not set, no count limit is enforced.

400 -


404 -


Get checklist template for creating new objects

Get checklist template for creating new objects.

1
2
3
4
5
http \
  GET \
  https://api.example.com/api/projects/checklist-template/ \
  Authorization:"Token YOUR_API_TOKEN" \
  parent_uuid=="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_checklist_template_retrieve # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_checklist_template_retrieve.sync(
    client=client,
    parent_uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
)

print(response)
  1. API Source: projects_checklist_template_retrieve
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsChecklistTemplateRetrieve } from 'waldur-js-client';

try {
  const response = await projectsChecklistTemplateRetrieve({
  auth: "Token YOUR_API_TOKEN",
  query: {
    "parent_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required Description
parent_uuid string (uuid) UUID of the parent object (e.g., customer UUID for new projects)

200 -

Field Type Description
checklist object (free-form)
questions array of objects
questions.uuid string (uuid)
questions.required boolean
questions.description string
questions.user_guidance string Additional guidance text visible to users when answering and reviewing
questions.question_options array of objects
questions.question_options.uuid string (uuid)
questions.question_options.label string
questions.question_options.order integer
questions.question_type any Type of question and expected answer format
questions.order integer
questions.min_value string (decimal) Minimum value allowed for NUMBER type questions
questions.max_value string (decimal) Maximum value allowed for NUMBER type questions
questions.allowed_file_types any List of allowed file extensions (e.g., ['.pdf', '.doc', '.docx']). If empty, all file types are allowed.
questions.allowed_mime_types any List of allowed MIME types (e.g., ['application/pdf', 'application/msword']). If empty, MIME type validation is not enforced. When both extensions and MIME types are specified, files must match both criteria for security.
questions.max_file_size_mb integer Maximum file size in megabytes. If not set, no size limit is enforced.
questions.max_files_count integer Maximum number of files allowed for MULTIPLE_FILES type questions. If not set, no count limit is enforced.
questions.operator any
questions.review_answer_value any Answer value that trigger review.
questions.always_requires_review boolean This question always requires review regardless of answer
questions.guidance_answer_value any Answer value that triggers display of user guidance.
questions.guidance_operator any Operator to use when comparing answer with guidance_answer_value
questions.always_show_guidance boolean Show user guidance always, regardless of answer. If False, guidance is conditional on answer matching guidance_answer_value with guidance_operator
questions.dependency_logic_operator any Defines how multiple dependencies are evaluated. AND: All dependencies must be satisfied. OR: At least one dependency must be satisfied.
initial_visible_questions array of objects
initial_visible_questions.uuid string (uuid)
initial_visible_questions.required boolean
initial_visible_questions.description string
initial_visible_questions.user_guidance string Additional guidance text visible to users when answering and reviewing
initial_visible_questions.question_options array of objects
initial_visible_questions.question_options.uuid string (uuid)
initial_visible_questions.question_options.label string
initial_visible_questions.question_options.order integer
initial_visible_questions.question_type any Type of question and expected answer format
initial_visible_questions.order integer
initial_visible_questions.min_value string (decimal) Minimum value allowed for NUMBER type questions
initial_visible_questions.max_value string (decimal) Maximum value allowed for NUMBER type questions
initial_visible_questions.allowed_file_types any List of allowed file extensions (e.g., ['.pdf', '.doc', '.docx']). If empty, all file types are allowed.
initial_visible_questions.allowed_mime_types any List of allowed MIME types (e.g., ['application/pdf', 'application/msword']). If empty, MIME type validation is not enforced. When both extensions and MIME types are specified, files must match both criteria for security.
initial_visible_questions.max_file_size_mb integer Maximum file size in megabytes. If not set, no size limit is enforced.
initial_visible_questions.max_files_count integer Maximum number of files allowed for MULTIPLE_FILES type questions. If not set, no count limit is enforced.
initial_visible_questions.operator any
initial_visible_questions.review_answer_value any Answer value that trigger review.
initial_visible_questions.always_requires_review boolean This question always requires review regardless of answer
initial_visible_questions.guidance_answer_value any Answer value that triggers display of user guidance.
initial_visible_questions.guidance_operator any Operator to use when comparing answer with guidance_answer_value
initial_visible_questions.always_show_guidance boolean Show user guidance always, regardless of answer. If False, guidance is conditional on answer matching guidance_answer_value with guidance_operator
initial_visible_questions.dependency_logic_operator any Defines how multiple dependencies are evaluated. AND: All dependencies must be satisfied. OR: At least one dependency must be satisfied.

400 -


404 -


Get checklist completion status

Get checklist completion status.

1
2
3
4
http \
  GET \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/completion_status/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_completion_status_retrieve # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_completion_status_retrieve.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

print(response)
  1. API Source: projects_completion_status_retrieve
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsCompletionStatusRetrieve } from 'waldur-js-client';

try {
  const response = await projectsCompletionStatusRetrieve({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)

200 -

Field Type Description
uuid string (uuid)
is_completed boolean Whether all required questions have been answered
completion_percentage number (double)
unanswered_required_questions array of anys
checklist_name string
checklist_description string
created string (date-time)
modified string (date-time)

400 -


404 -


Submit checklist answers

Submit checklist answers.

1
2
3
4
echo '[{"question_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "answer_data": null}]' | http \
  POST \
  https://api.example.com/api/projects/a1b2c3d4-e5f6-7890-abcd-ef1234567890/submit_answers/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_submit_answers # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_submit_answers.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client
)

print(response)
  1. API Source: projects_submit_answers
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import { projectsSubmitAnswers } from 'waldur-js-client';

try {
  const response = await projectsSubmitAnswers({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  body: [{"question_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "answer_data": null}]
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)

The request body is an array of objects, where each object has the following structure:

Field Type Required
question_uuid string (uuid)
answer_data any

200 -

Field Type Description
detail string
completion object
completion.uuid string (uuid)
completion.is_completed boolean Whether all required questions have been answered
completion.completion_percentage number (double)
completion.unanswered_required_questions array of anys
completion.checklist_name string
completion.checklist_description string
completion.created string (date-time)
completion.modified string (date-time)

400 -


404 -


Remote Actions & Sync

Sync user roles

Trigger user role sync for this project. Sends a notification to RabbitMQ that this project needs user role synchronization.

1
2
3
4
http \
  POST \
  https://api.example.com/api/projects/string-value/sync_user_roles/ \
  Authorization:"Token YOUR_API_TOKEN"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.api.projects import projects_sync_user_roles # (1)

client = AuthenticatedClient(
    base_url="https://api.example.com", token="YOUR_API_TOKEN"
)
response = projects_sync_user_roles.sync(
    uuid="string-value",
    client=client
)

print(response)
  1. API Source: projects_sync_user_roles
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import { projectsSyncUserRoles } from 'waldur-js-client';

try {
  const response = await projectsSyncUserRoles({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "string-value"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string

200 - No response body