Skip to content

Customers

A Customer (often referred to as an "Organization") is the top-level entity in the platform that represents a legal body or an independent division. It serves as the primary container for billing, user management, and resource ownership.

All projects, resources, and costs are ultimately tied to a Customer. Users are granted permissions within the scope of a Customer or one of its child Projects.

Key Concepts

  • Billing Root: Invoices are generated at the Customer level, aggregating costs from all its projects.
  • Ownership: A Customer is owned by one or more users who have full administrative control over its properties, team, and projects.
  • Team Management: Users can be added as team members to a Customer with specific roles (e.g., Owner, Manager), granting them permissions across the entire organization.

Operations Summary

Method Endpoint Description
Core CRUD
GET /api/customers/ List customers
GET /api/customers/{uuid}/ Retrieve customer details
POST /api/customers/ Create a new customer
PUT /api/customers/{uuid}/ Update a customer
PATCH /api/customers/{uuid}/ Partially update a customer
DELETE /api/customers/{uuid}/ Delete a customer
User Management
GET /api/customers/{uuid}/list_users/ List users
GET /api/customers/{customer_uuid}/users/ List users of a customer
POST /api/customers/{uuid}/add_user/ Add user
POST /api/customers/{uuid}/delete_user/ Delete user
POST /api/customers/{uuid}/update_user/ Update user
Compliance
GET /api/customers/{customer_uuid}/project-metadata-compliance-details/ Get detailed project metadata compliance
GET /api/customers/{customer_uuid}/project-metadata-compliance-overview/ Get project metadata compliance overview
GET /api/customers/{customer_uuid}/project-metadata-compliance-projects/ List projects with compliance data
GET /api/customers/{customer_uuid}/project-metadata-question-answers/ List questions with project answers
Configuration & Updates
POST /api/customers/{uuid}/update_organization_groups/ Update organization groups for a customer
Data & Reporting
GET /api/customers/countries/ Get list of available countries
GET /api/customers/{uuid}/stats/ Get customer resource usage statistics

Core CRUD

List customers

Retrieve a list of customers. The list is filtered based on the user's permissions.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/ \
  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.customers import customers_list # (1)

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

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

try {
  const response = await customersList({
  auth: "Token YOUR_API_TOKEN"
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Description
abbreviation string
agreement_number string
archived boolean
backend_id string
contact_details string
field array
name string
name_exact string
native_name string
o string Which field to use when ordering the results.
organization_group_name string
organization_group_uuid array organization_group_uuid
owned_by_current_user boolean Return a list of customers where current user is owner.
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, native name, abbreviation, domain, UUID, registration code or agreement number
registration_code 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)
created string (date-time)
organization_groups array of objects
organization_groups.uuid string (uuid)
organization_groups.url string (uri)
organization_groups.name string
organization_groups.parent_uuid string (uuid)
organization_groups.parent_name string
organization_groups.parent string (uri)
organization_groups.customers_count integer
display_name string
projects array of objects
projects.url string (uri)
projects.uuid string (uuid)
projects.name string
projects.image string (uri)
projects.resource_count integer
projects.end_date string (date) The date is inclusive. Once reached, all project resource will be scheduled for termination.
backend_id string Organization identifier in another application.
image string (uri)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
projects_count integer
users_count integer
sponsor_number integer External ID of the sponsor covering the costs
country_name string
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses
payment_profiles array of objects
payment_profiles.uuid string (uuid)
payment_profiles.url string (uri)
payment_profiles.name string
payment_profiles.organization_uuid string (uuid)
payment_profiles.organization string (uri)
payment_profiles.attributes object
payment_profiles.attributes.end_date string
payment_profiles.attributes.agreement_number string
payment_profiles.attributes.contract_sum integer
payment_profiles.payment_type string
Enum: fixed_price, invoices, payment_gw_monthly
payment_profiles.payment_type_display string
payment_profiles.is_active boolean
customer_credit number (double)
customer_unallocated_credit number (double)
is_service_provider boolean
service_provider string (uri)
service_provider_uuid string (uuid)
call_managing_organization_uuid string
billing_price_estimate any

Retrieve customer details

Fetch the details of a specific customer by its UUID.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/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.customers import customers_retrieve # (1)

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

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

try {
  const response = await customersRetrieve({
  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)
created string (date-time)
organization_groups array of objects
organization_groups.uuid string (uuid)
organization_groups.url string (uri)
organization_groups.name string
organization_groups.parent_uuid string (uuid)
organization_groups.parent_name string
organization_groups.parent string (uri)
organization_groups.customers_count integer
display_name string
projects array of objects
projects.url string (uri)
projects.uuid string (uuid)
projects.name string
projects.image string (uri)
projects.resource_count integer
projects.end_date string (date) The date is inclusive. Once reached, all project resource will be scheduled for termination.
backend_id string Organization identifier in another application.
image string (uri)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
projects_count integer
users_count integer
sponsor_number integer External ID of the sponsor covering the costs
country_name string
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses
payment_profiles array of objects
payment_profiles.uuid string (uuid)
payment_profiles.url string (uri)
payment_profiles.name string
payment_profiles.organization_uuid string (uuid)
payment_profiles.organization string (uri)
payment_profiles.attributes object
payment_profiles.attributes.end_date string
payment_profiles.attributes.agreement_number string
payment_profiles.attributes.contract_sum integer
payment_profiles.payment_type string
Enum: fixed_price, invoices, payment_gw_monthly
payment_profiles.payment_type_display string
payment_profiles.is_active boolean
customer_credit number (double)
customer_unallocated_credit number (double)
is_service_provider boolean
service_provider string (uri)
service_provider_uuid string (uuid)
call_managing_organization_uuid string
billing_price_estimate any

Create a new customer

A new customer can only be created by users with staff privilege.

1
2
3
4
5
http \
  POST \
  https://api.example.com/api/customers/ \
  Authorization:"Token YOUR_API_TOKEN" \
  name="my-awesome-customer"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.customer_request import CustomerRequest # (1)
from waldur_api_client.api.customers import customers_create # (2)

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

body_data = CustomerRequest(
    name="my-awesome-customer"
)
response = customers_create.sync(
    client=client,
    body=body_data
)

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

try {
  const response = await customersCreate({
  auth: "Token YOUR_API_TOKEN",
  body: {
    "name": "my-awesome-customer"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Field Type Required Description
backend_id string Organization identifier in another application.
image string (binary)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
sponsor_number integer External ID of the sponsor covering the costs
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses

201 -

Field Type Description
url string (uri)
uuid string (uuid)
created string (date-time)
organization_groups array of objects
organization_groups.uuid string (uuid)
organization_groups.url string (uri)
organization_groups.name string
organization_groups.parent_uuid string (uuid)
organization_groups.parent_name string
organization_groups.parent string (uri)
organization_groups.customers_count integer
display_name string
projects array of objects
projects.url string (uri)
projects.uuid string (uuid)
projects.name string
projects.image string (uri)
projects.resource_count integer
projects.end_date string (date) The date is inclusive. Once reached, all project resource will be scheduled for termination.
backend_id string Organization identifier in another application.
image string (uri)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
projects_count integer
users_count integer
sponsor_number integer External ID of the sponsor covering the costs
country_name string
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses
payment_profiles array of objects
payment_profiles.uuid string (uuid)
payment_profiles.url string (uri)
payment_profiles.name string
payment_profiles.organization_uuid string (uuid)
payment_profiles.organization string (uri)
payment_profiles.attributes object
payment_profiles.attributes.end_date string
payment_profiles.attributes.agreement_number string
payment_profiles.attributes.contract_sum integer
payment_profiles.payment_type string
Enum: fixed_price, invoices, payment_gw_monthly
payment_profiles.payment_type_display string
payment_profiles.is_active boolean
customer_credit number (double)
customer_unallocated_credit number (double)
is_service_provider boolean
service_provider string (uri)
service_provider_uuid string (uuid)
call_managing_organization_uuid string
billing_price_estimate any

Update a customer

Update the details of an existing customer. Requires customer owner or staff permissions.

1
2
3
4
5
http \
  PUT \
  https://api.example.com/api/customers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/ \
  Authorization:"Token YOUR_API_TOKEN" \
  name="my-awesome-customer"
 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.customer_request import CustomerRequest # (1)
from waldur_api_client.api.customers import customers_update # (2)

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

body_data = CustomerRequest(
    name="my-awesome-customer"
)
response = customers_update.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

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

try {
  const response = await customersUpdate({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  },
  body: {
    "name": "my-awesome-customer"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required
uuid string (uuid)
Field Type Required Description
backend_id string Organization identifier in another application.
image string (binary)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
sponsor_number integer External ID of the sponsor covering the costs
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses

200 -

Field Type Description
url string (uri)
uuid string (uuid)
created string (date-time)
organization_groups array of objects
organization_groups.uuid string (uuid)
organization_groups.url string (uri)
organization_groups.name string
organization_groups.parent_uuid string (uuid)
organization_groups.parent_name string
organization_groups.parent string (uri)
organization_groups.customers_count integer
display_name string
projects array of objects
projects.url string (uri)
projects.uuid string (uuid)
projects.name string
projects.image string (uri)
projects.resource_count integer
projects.end_date string (date) The date is inclusive. Once reached, all project resource will be scheduled for termination.
backend_id string Organization identifier in another application.
image string (uri)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
projects_count integer
users_count integer
sponsor_number integer External ID of the sponsor covering the costs
country_name string
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses
payment_profiles array of objects
payment_profiles.uuid string (uuid)
payment_profiles.url string (uri)
payment_profiles.name string
payment_profiles.organization_uuid string (uuid)
payment_profiles.organization string (uri)
payment_profiles.attributes object
payment_profiles.attributes.end_date string
payment_profiles.attributes.agreement_number string
payment_profiles.attributes.contract_sum integer
payment_profiles.payment_type string
Enum: fixed_price, invoices, payment_gw_monthly
payment_profiles.payment_type_display string
payment_profiles.is_active boolean
customer_credit number (double)
customer_unallocated_credit number (double)
is_service_provider boolean
service_provider string (uri)
service_provider_uuid string (uuid)
call_managing_organization_uuid string
billing_price_estimate any

Partially update a customer

Partially update the details of an existing customer. Requires customer owner or staff permissions.

1
2
3
4
http \
  PATCH \
  https://api.example.com/api/customers/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_customer_request import PatchedCustomerRequest # (1)
from waldur_api_client.api.customers import customers_partial_update # (2)

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

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

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

try {
  const response = await customersPartialUpdate({
  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
backend_id string Organization identifier in another application.
image string (binary)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
sponsor_number integer External ID of the sponsor covering the costs
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses

200 -

Field Type Description
url string (uri)
uuid string (uuid)
created string (date-time)
organization_groups array of objects
organization_groups.uuid string (uuid)
organization_groups.url string (uri)
organization_groups.name string
organization_groups.parent_uuid string (uuid)
organization_groups.parent_name string
organization_groups.parent string (uri)
organization_groups.customers_count integer
display_name string
projects array of objects
projects.url string (uri)
projects.uuid string (uuid)
projects.name string
projects.image string (uri)
projects.resource_count integer
projects.end_date string (date) The date is inclusive. Once reached, all project resource will be scheduled for termination.
backend_id string Organization identifier in another application.
image string (uri)
blocked boolean
archived boolean
display_billing_info_in_projects boolean
default_tax_percent string (decimal)
accounting_start_date string (date-time)
projects_count integer
users_count integer
sponsor_number integer External ID of the sponsor covering the costs
country_name string
max_service_accounts integer Maximum number of service accounts allowed
project_metadata_checklist string (uuid)
grace_period_days integer Number of extra days after project end date before resources are terminated
name string
slug string
native_name string
abbreviation string
description string
contact_details string
agreement_number string
email string (email)
phone_number string
access_subnets string Enter a comma separated list of IPv4 or IPv6 CIDR addresses from where connection to self-service is allowed.
registration_code string
homepage string (uri)
domain string
vat_code string VAT number
postal string
address string
bank_name string
latitude number (double)
longitude number (double)
bank_account string
country any
notification_emails string Comma-separated list of notification email addresses
payment_profiles array of objects
payment_profiles.uuid string (uuid)
payment_profiles.url string (uri)
payment_profiles.name string
payment_profiles.organization_uuid string (uuid)
payment_profiles.organization string (uri)
payment_profiles.attributes object
payment_profiles.attributes.end_date string
payment_profiles.attributes.agreement_number string
payment_profiles.attributes.contract_sum integer
payment_profiles.payment_type string
Enum: fixed_price, invoices, payment_gw_monthly
payment_profiles.payment_type_display string
payment_profiles.is_active boolean
customer_credit number (double)
customer_unallocated_credit number (double)
is_service_provider boolean
service_provider string (uri)
service_provider_uuid string (uuid)
call_managing_organization_uuid string
billing_price_estimate any

Delete a customer

Delete a customer. This action is only available to staff users. If a customer has any active projects, the deletion request will fail with a 409 Conflict response.

1
2
3
4
http \
  DELETE \
  https://api.example.com/api/customers/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.customers import customers_destroy # (1)

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

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

try {
  const response = await customersDestroy({
  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


User Management

List users

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/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.customers import customers_list_users_list # (1)

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

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

try {
  const response = await customersListUsersList({
  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)

List users of a customer

Lists all users who have a role in the specified customer or any of its projects. Requires permissions to list customer users.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/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.customers import customers_users_list # (1)

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

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

try {
  const response = await customersUsersList({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "customer_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required Description
customer_uuid string (uuid) UUID of the customer
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
field array
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
organization_role array Filter by one or more organization roles. Select a standard role or provide a custom role string. Can be specified multiple times.
page integer A page number within the paginated result set.
page_size integer Number of results to return per page.
phone_number string
project_role array Filter by one or more project roles. Select a standard role or provide a custom role string. Can be specified multiple times.
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
email string (email)
role_name string
projects array of objects
projects.url string (uri)
projects.uuid string
projects.name string
projects.role_name string
projects.expiration_time string (date-time)
expiration_time string (date-time)
image string (uri)

Add user

1
2
3
4
5
6
http \
  POST \
  https://api.example.com/api/customers/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.customers import customers_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 = customers_add_user.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

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

try {
  const response = await customersAddUser({
  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/customers/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.customers import customers_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 = customers_delete_user.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

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

try {
  const response = await customersDeleteUser({
  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/customers/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.customers import customers_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 = customers_update_user.sync(
    uuid="a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    client=client,
    body=body_data
)

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

try {
  const response = await customersUpdateUser({
  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)

Compliance

Get detailed project metadata compliance

Provides detailed compliance status for all projects within a customer, including individual answers and completion status.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/project-metadata-compliance-details/ \
  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.customers import customers_project_metadata_compliance_details_list # (1)

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

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

try {
  const response = await customersProjectMetadataComplianceDetailsList({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "customer_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required Description
customer_uuid string (uuid) UUID of the customer
Name Type Description
page integer A page number within the paginated result set.
page_size integer Number of results to return per page.

200 -

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

Field Type
checklist any
total_projects integer
projects_with_completions integer
fully_completed_projects integer
projects_requiring_review integer
project_details array of objects
project_details.project_uuid string (uuid)
project_details.project_name string
project_details.completion_uuid string (uuid)
project_details.completion_percentage number (double)
project_details.is_completed boolean
project_details.requires_review boolean
project_details.answers array of anys
project_details.unanswered_required_questions array of anys

Get project metadata compliance overview

Provides aggregated statistics about project metadata compliance for all projects within a customer.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/project-metadata-compliance-overview/ \
  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.customers import customers_project_metadata_compliance_overview_list # (1)

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

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

try {
  const response = await customersProjectMetadataComplianceOverviewList({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "customer_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required Description
customer_uuid string (uuid) UUID of the customer
Name Type Description
page integer A page number within the paginated result set.
page_size integer Number of results to return per page.

200 -

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

Field Type
total_projects integer
projects_with_completions integer
fully_completed_projects integer
projects_requiring_review integer
average_completion_percentage number (double)

List projects with compliance data

Provides a paginated list of projects with their checklist completion status and answer details.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/project-metadata-compliance-projects/ \
  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.customers import customers_project_metadata_compliance_projects_list # (1)

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

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

try {
  const response = await customersProjectMetadataComplianceProjectsList({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "customer_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required Description
customer_uuid string (uuid) UUID of the customer
Name Type Description
page integer A page number within the paginated result set.
page_size integer Number of results to return per page.

200 -

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

Field Type Description
project_uuid string (uuid)
project_name string
completion_uuid string Get completion UUID.
completion_percentage number (double) Get completion percentage.
is_completed boolean Get completion status.
requires_review boolean Get review requirement status.
answers_count integer Get count of answers.
unanswered_required_count integer Get count of unanswered required questions.

List questions with project answers

Provides a paginated list of all questions from the customer's compliance checklist, including the answers given in each project.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/project-metadata-question-answers/ \
  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.customers import customers_project_metadata_question_answers_list # (1)

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

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

try {
  const response = await customersProjectMetadataQuestionAnswersList({
  auth: "Token YOUR_API_TOKEN",
  path: {
    "customer_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Required Description
customer_uuid string (uuid) UUID of the customer
Name Type Description
page integer A page number within the paginated result set.
page_size integer Number of results to return per page.

200 -

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

Field Type Description
question_uuid string (uuid)
question_description string
question_type string
required boolean
order integer
min_value string (decimal)
max_value string (decimal)
total_projects integer Get total projects count.
answered_projects_count integer Get count of projects that answered this question.
project_answers array of objects Get all project answers for this question.
question_options array of objects Get question options for select-type questions.

Configuration & Updates

Update organization groups for a customer

Assigns a customer to one or more organization groups. This action is restricted to staff users.

1
2
3
4
http \
  POST \
  https://api.example.com/api/customers/a1b2c3d4-e5f6-7890-abcd-ef1234567890/update_organization_groups/ \
  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.organization_groups_request import OrganizationGroupsRequest # (1)
from waldur_api_client.api.customers import customers_update_organization_groups # (2)

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

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

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

try {
  const response = await customersUpdateOrganizationGroups({
  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
organization_groups array of string (uri)s

200 - No response body


Data & Reporting

Get list of available countries

Returns a list of countries that can be used when creating or updating a customer. The list can be configured by the service provider.

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/countries/ \
  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.customers import customers_countries_list # (1)

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

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

try {
  const response = await customersCountriesList({
  auth: "Token YOUR_API_TOKEN"
});
  console.log('Success:', response);
} catch (error) {
  console.error('Error:', error);
}
Name Type Description
abbreviation string
agreement_number string
archived boolean
backend_id string
contact_details string
name string
name_exact string
native_name string
o string Which field to use when ordering the results.
organization_group_name string
organization_group_uuid array organization_group_uuid
owned_by_current_user boolean Return a list of customers where current user is owner.
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, native name, abbreviation, domain, UUID, registration code or agreement number
registration_code string

200 -

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

Field Type
label string
value string

Get customer resource usage statistics

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

1
2
3
4
http \
  GET \
  https://api.example.com/api/customers/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.customers import customers_stats_retrieve # (1)

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

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

try {
  const response = await customersStatsRetrieve({
  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)