Ownership & Favorites
Manage dataset ownership and user favorites.
GET /api/datasets/{id}/owner
Get the dataset owner principal (user, team, or avatar).
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Dataset ID or slug |
Response (user owner):
{
"id": "user:admin",
"type": "user",
"name": "Admin User",
"email": "admin@example.com"
}
Response (team owner):
{
"id": "team:analytics",
"type": "team",
"name": "Analytics Team",
"description": "Data analytics team"
}
PUT /api/datasets/{id}/owner
Change the dataset owner.
Authentication: Required
Permission: dataset:changeOwner
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Dataset ID or slug |
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
ownerId | string | Yes | New owner ID (user, team, or avatar) |
Example Request:
{
"ownerId": "team:analytics"
}
Response:
{
"id": "team:analytics",
"type": "team",
"name": "Analytics Team"
}
Cascading Behavior:
When ownership changes, the following related entities are also updated:
- Jobs - Associated jobs transfer to new owner
- Visuals - Dataset visuals transfer to new owner
- Child Datasets - Snapshots and drafts transfer to new owner
Changing ownership may affect user permissions. The previous owner loses owner-level permissions unless granted via shares.
GET /api/datasets/{id}/favorite
Check if the dataset is favorited by the current user.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Dataset ID or slug |
Response:
{
"datasetId": "sales-2024",
"userId": "user:admin",
"favorited": true,
"favoritedAt": "2024-01-15T10:00:00Z"
}
Or if not favorited:
{
"datasetId": "sales-2024",
"userId": "user:admin",
"favorited": false
}
PUT /api/datasets/{id}/favorite
Mark the dataset as a favorite.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Dataset ID or slug |
Response:
{
"datasetId": "sales-2024",
"userId": "user:admin",
"favorited": true,
"favoritedAt": "2024-02-08T16:00:00Z"
}
DELETE /api/datasets/{id}/favorite
Remove the dataset from favorites.
Authentication: Required
Path Parameters:
| Parameter | Type | Description |
|---|---|---|
id | string | Dataset ID or slug |
Response:
204 No Content
Ownership Examples
Transfer to Team
// Transfer ownership to analytics team
await PUT('/api/datasets/sales-2024/owner', {
ownerId: 'team:analytics'
});
Transfer to User
// Transfer ownership to specific user
await PUT('/api/datasets/customer-data/owner', {
ownerId: 'user:datamanager'
});
Verify Ownership Before Transfer
// Check current owner
const owner = await GET('/api/datasets/sales-2024/owner');
if (owner.type === 'user') {
// Transfer to team if currently user-owned
await PUT('/api/datasets/sales-2024/owner', {
ownerId: 'team:analytics'
});
}
Favorites Examples
Add to Favorites
await PUT('/api/datasets/sales-2024/favorite');
Remove from Favorites
await DELETE('/api/datasets/sales-2024/favorite');
Toggle Favorite
const fav = await GET('/api/datasets/sales-2024/favorite');
if (fav.favorited) {
await DELETE('/api/datasets/sales-2024/favorite');
} else {
await PUT('/api/datasets/sales-2024/favorite');
}
Get All User Favorites
// Get all datasets
const datasets = await GET('/api/datasets-list');
// Filter to favorites
const favorites = datasets.items.filter(ds => ds.favorited);
Best Practices
Ownership
- Team ownership - Prefer team ownership for shared datasets
- User ownership - Use for personal/experimental datasets
- Document transfers - Log ownership changes for audit
- Verify permissions - Ensure new owner has appropriate access
- Cascade awareness - Understand that related entities transfer
Favorites
- Personal organization - Use favorites for frequently accessed datasets
- Quick access - Build favorite-based navigation
- Limit favorites - Too many defeats the purpose
- Team recommendations - Share favorite lists with team
- Clean up - Remove obsolete favorites regularly