Skip to content

The user profile management endpoints let you retrieve and update user accounts, audit activity logs, and manage a personal encrypted key-value vault. Use these endpoints to manage account state, inspect API usage history, and store arbitrary secrets scoped to a user or realm.

Retrieve a user profile by ID. Admins can view any user; regular users can only view their own profile. This endpoint works even for banned users (read-only access).

NameInTypeRequiredDescription
idpathstringYesUser ID to retrieve
Terminal window
curl -X GET "https://api.hoody.com/api/v1/users/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer <token>"

Update a user profile. Regular users can update their own alias and password (requires current_password verification). Admins can update any user and set is_admin/is_banned flags. Admin users cannot be banned.

NameInTypeRequiredDescription
idpathstringYesUser ID to update
FieldTypeRequiredDescription
aliasstringNoNew display name/alias (1–100 characters)
public_keystringNoED25519 public key (exactly 64 hexadecimal characters)
metadataobjectNoCustom metadata object for additional user information
passwordstringNoNew password (≥12 characters, 3 of 4 character classes). Requires current_password.
current_passwordstringNoCurrent password (8–128 characters). Required when setting a new password.
is_adminbooleanNoAdmin status. Admin-only field.
is_bannedbooleanNoBan status. Admin-only field. Admin users cannot be banned.
Terminal window
curl -X PATCH "https://api.hoody.com/api/v1/users/507f1f77bcf86cd799439011" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"alias": "John Smith",
"public_key": "a1b2c3d4e5f6789012345678901234567890abcdefabcdefabcdefabcdef1234"
}'

Manually claim a free-tier server and create the default project and container. This operation is idempotent and safe to call if the account is already provisioned.

FieldTypeRequiredDescription
regionstringNoOptional preferred region override (lowercase alphanumeric and hyphens, max 50 characters)
Terminal window
curl -X POST "https://api.hoody.com/api/v1/users/me/retry-setup" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"region": "us-east-1"
}'

Retrieve activity logs for the authenticated user with optional filtering by date range, status code, HTTP method, or realm.

NameInTypeRequiredDescription
pagequeryintegerNoPage number. Default: 1
limitqueryintegerNoResults per page. Default: 50
start_datequerystringNoFilter logs after this date
end_datequerystringNoFilter logs before this date
errors_onlyquerystringNoShow only errors (status &ge; 400). Allowed values: "true", "false"
min_statusqueryintegerNoMinimum status code
max_statusqueryintegerNoMaximum status code
methodquerystringNoFilter by HTTP method. Allowed values: "GET", "POST", "PUT", "PATCH", "DELETE"
realm_idquerystringNoFilter by realm ID
Terminal window
curl -X GET "https://api.hoody.com/api/v1/users/auth/activity?page=1&limit=50&errors_only=true" \
-H "Authorization: Bearer <token>"

Retrieve storage usage statistics for activity logs, including total size, record counts, oldest and newest records, and retention window.

This endpoint takes no parameters.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/users/auth/activity/stats" \
-H "Authorization: Bearer <token>"

The user vault is a personal, per-realm key-value store. Values are opaque UTF-8 strings — the API does not validate or decrypt content, so client-side encryption is recommended for sensitive material.

List all keys in the encrypted vault with metadata. Values are not included — use GET /api/v1/vault/keys/{key} to retrieve a specific value.

NameInTypeRequiredDescription
realm_idquerystringNoTarget a specific realm (24-char hex). When omitted and not on a realm subdomain, defaults to global scope (realm_id = ""). Case-insensitive — uppercase is normalized to lowercase.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/vault/keys" \
-H "Authorization: Bearer <token>"

Retrieve a specific key-value pair from the encrypted vault by key name.

NameInTypeRequiredDescription
realm_idquerystringNoTarget a specific realm (24-char hex). When omitted and not on a realm subdomain, defaults to global scope (realm_id = ""). Case-insensitive — uppercase is normalized to lowercase.
keypathstringYesVault key name (alphanumeric, dots, underscores, hyphens)
Terminal window
curl -X GET "https://api.hoody.com/api/v1/vault/keys/my-encrypted-notes" \
-H "Authorization: Bearer <token>"

Create or update a key-value pair in the personal encrypted vault. Values can be any UTF-8 string (JSON, encrypted data, plain text). The API does not validate content — encryption is highly recommended for sensitive data.

NameInTypeRequiredDescription
realm_idquerystringNoTarget a specific realm (24-char hex). When omitted and not on a realm subdomain, defaults to global scope (realm_id = ""). Case-insensitive — uppercase is normalized to lowercase.
keypathstringYesVault key name (alphanumeric, dots, underscores, hyphens)
FieldTypeRequiredDescription
valuestringYesValue to store (any UTF-8 string: JSON, encrypted data, plain text, etc.)
metadataobjectNoOptional JSON metadata (max 256KB). Useful for file uploads (content-type, filename, upload date, etc.). Must be valid JSON or null. Counts toward total vault storage.
Terminal window
curl -X PATCH "https://api.hoody.com/api/v1/vault/keys/api-keys" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"value": "{\"api_key\": \"sk_test_123456\", \"encrypted\": true}",
"metadata": {
"filename": "api-keys.json",
"content_type": "application/json",
"created_by": "admin",
"purpose": "Production API keys"
}
}'

Retrieve statistics about vault usage. total_keys and total_size_bytes are scoped to the current realm. limit_mb, remaining_mb, and used_percentage reflect global vault usage across all realms.

NameInTypeRequiredDescription
realm_idquerystringNoTarget a specific realm (24-char hex). When omitted and not on a realm subdomain, defaults to global scope (realm_id = ""). Case-insensitive — uppercase is normalized to lowercase.
Terminal window
curl -X GET "https://api.hoody.com/api/v1/vault/stats" \
-H "Authorization: Bearer <token>"

Permanently delete a key-value pair from the encrypted vault. This action cannot be undone.

NameInTypeRequiredDescription
realm_idquerystringNoTarget a specific realm (24-char hex). When omitted and not on a realm subdomain, defaults to global scope (realm_id = ""). Case-insensitive — uppercase is normalized to lowercase.
keypathstringYesVault key name (alphanumeric, dots, underscores, hyphens)
Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/vault/keys/my-encrypted-notes" \
-H "Authorization: Bearer <token>"

Permanently delete all keys and values from the encrypted vault. This action cannot be undone.

NameInTypeRequiredDescription
realm_idquerystringNoTarget a specific realm (24-char hex). When omitted and not on a realm subdomain, defaults to global scope (realm_id = ""). Case-insensitive — uppercase is normalized to lowercase.
Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/vault" \
-H "Authorization: Bearer <token>"