List platform-level user notifications and query the full event audit log. The event history is append-only and paginated, with filtering by event type, resource type, and date range. Use the notification endpoints to surface user-facing banners (maintenance, announcements, status updates) and to track read state per user.
All endpoints require a JWT token in the Authorization header:
Authorization: Bearer <token>
Query event history with filtering, pagination, and sorting. Returns up to 500 events per page.
curl -X GET " https://api.hoody.com/api/v1/events?limit=50&event_type=container.running&sort_by=created_at&sort_order=desc " \
-H " Authorization: Bearer <token> "
const events = await client . api . events . listIterator ( {
event_type: " container.running " ,
Name In Type Required Description limitquery integer No Number of events to return (max 500). Default: 100 offsetquery integer No Number of events to skip. Default: 0 sort_byquery string No Field to sort by. Default: "created_at". Allowed: created_at, event_type sort_orderquery string No Sort direction. Default: "desc". Allowed: asc, desc event_typequery string No Filter by specific event type resource_typequery string No Filter by resource type resource_idquery string No Filter by specific resource ID project_idquery string No Filter by project ID container_idquery string No Filter by container ID start_datequery string No Filter events after this timestamp end_datequery string No Filter events before this timestamp realm_idquery string No Filter by realm ID
container.creating, container.running, container.stopped, container.failed, container.deleting, auth.token.deleted, container.autostart_enabled, container.autostart_disabled, container.renamed, container.resource_updated, container.ssh_key.added, container.ssh_key.removed, container.snapshot.created, container.snapshot.deleted, container.snapshot.restored, container.snapshot.renamed, container.display.enabled, user.created, auth.token.updated, auth.token.enabled, auth.token.disabled, proxy.alias.expiring_soon, proxy.alias.expired, storage.share.mount_changed, notification.read, server.health_changed, server.rental_expiring, firewall.rule.added, firewall.rule.removed, firewall.rule.updated, firewall.rule.enabled, firewall.rule.disabled, proxy.permissions.default_changed, proxy.permissions.group_added, proxy.permissions.group_updated, proxy.permissions.group_removed, pool.member.joined, pool.member.left, pool.member.role_changed, pool.invited, pool.invitation_revoked, user.banned, user.unbanned, user.role_changed, activity.logged
container, storage_share, notification, project, server, firewall, proxy_alias, proxy_permissions, auth_token, pool, user, activity_log
"message" : " Events retrieved successfully " ,
"id" : " 507f1f77bcf86cd799439044 " ,
"event_type" : " container.running " ,
"resource_type" : " container " ,
"resource_id" : " 507f1f77bcf86cd799439033 " ,
"user_id" : " 507f1f77bcf86cd799439011 " ,
"id" : " 507f1f77bcf86cd799439033 " ,
"project_id" : " 507f1f77bcf86cd799439022 "
"realm_ids" : [ " 507f1f77bcf86cd799439022 " ],
"created_at" : " 2025-01-15T10:30:05.123Z "
"message" : " Invalid date range: start_date cannot be after end_date "
Error Code Title Description Resolution VALIDATION_ERRORInvalid input parameters One or more request parameters failed validation Check the error message for specific field requirements and correct your input INVALID_PARAMETER_VALUEInvalid parameter value A parameter value is outside the allowed range or format Ensure parameter values meet the documented constraints (min/max, format, regex) INVALID_DATE_RANGEInvalid date range The start_date cannot be after the end_date Ensure the start_date is before or the same as the end_date
"message" : " Authentication token required "
Error Code Title Description Resolution MISSING_TOKENAuthentication token missing No authentication token was provided in the request Include a valid JWT token in the Authorization header as Bearer <token> INVALID_TOKENInvalid authentication token The provided authentication token is malformed or invalid Obtain a new token by logging in again or using a valid auth token TOKEN_EXPIREDAuthentication token expired The provided authentication token has expired Obtain a new token by logging in again or refreshing your session
Retrieve detailed information about a specific event.
curl -X GET " https://api.hoody.com/api/v1/events/507f1f77bcf86cd799439044 " \
-H " Authorization: Bearer <token> "
const event = await client . api . events . get ( {
id: " 507f1f77bcf86cd799439044 "
Name In Type Required Description idpath string Yes Event ID
"message" : " Event retrieved successfully " ,
"id" : " 507f1f77bcf86cd799439044 " ,
"event_type" : " container.running " ,
"resource_type" : " container " ,
"resource_id" : " 507f1f77bcf86cd799439033 " ,
"user_id" : " 507f1f77bcf86cd799439011 " ,
"id" : " 507f1f77bcf86cd799439033 " ,
"project_id" : " 507f1f77bcf86cd799439022 "
"realm_ids" : [ " 507f1f77bcf86cd799439022 " ],
"created_at" : " 2025-01-15T10:30:05.123Z "
"message" : " Invalid ID format "
Error Code Title Description Resolution INVALID_ID_FORMATInvalid ID format The provided ID must be a 24-character hexadecimal string Ensure the ID is exactly 24 characters long and contains only hexadecimal characters (0-9, a-f)
"message" : " Token has expired "
Error Code Title Description Resolution MISSING_TOKENAuthentication token missing No authentication token was provided in the request Include a valid JWT token in the Authorization header as Bearer <token> INVALID_TOKENInvalid authentication token The provided authentication token is malformed or invalid Obtain a new token by logging in again or using a valid auth token TOKEN_EXPIREDAuthentication token expired The provided authentication token has expired Obtain a new token by logging in again or refreshing your session
"message" : " Event not found "
Error Code Title Description Resolution EVENT_NOT_FOUNDEvent not found The requested event does not exist or has been deleted Verify the event ID is correct and that you have access to this event
Get aggregated statistics about event history within an optional date range and realm.
curl -X GET " https://api.hoody.com/api/v1/events/stats?start_date=2024-11-01T00:00:00.000Z&end_date=2025-01-15T23:59:59.999Z " \
-H " Authorization: Bearer <token> "
const stats = await client . api . events . getStats ( {
start_date: " 2024-11-01T00:00:00.000Z " ,
end_date: " 2025-01-15T23:59:59.999Z "
Name In Type Required Description start_datequery string No Start of time range end_datequery string No End of time range realm_idquery string No Filter by realm
"message" : " Event statistics retrieved successfully " ,
"container.running" : 3456 ,
"container.stopped" : 2134 ,
"storage.share.created" : 1523 ,
"notification.created" : 8121
"oldest_event" : " 2024-11-15T10:30:00.000Z " ,
"newest_event" : " 2025-01-15T10:30:00.000Z "
"message" : " Invalid date range: start_date cannot be after end_date "
Error Code Title Description Resolution INVALID_DATE_RANGEInvalid date range The start_date cannot be after the end_date Ensure the start_date is before or the same as the end_date
"message" : " Authentication token required "
Error Code Title Description Resolution MISSING_TOKENAuthentication token missing No authentication token was provided in the request Include a valid JWT token in the Authorization header as Bearer <token> INVALID_TOKENInvalid authentication token The provided authentication token is malformed or invalid Obtain a new token by logging in again or using a valid auth token TOKEN_EXPIREDAuthentication token expired The provided authentication token has expired Obtain a new token by logging in again or refreshing your session
Delete events older than the specified retention period. Admin only.
curl -X POST " https://api.hoody.com/api/v1/events/cleanup " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
-d ' {"retention_days": 30} '
const result = await client . api . events . cleanup ( {
data: { retention_days: 30 }
Field Type Required Description retention_daysinteger Yes Delete events older than this many days. Min: 1, Max: 365
"message" : " Old events cleaned up successfully " ,
"cutoff_date" : " 2024-12-15T10:30:00.000Z "
"message" : " Validation failed "
Error Code Title Description Resolution VALIDATION_ERRORInvalid input parameters One or more request parameters failed validation Check the error message for specific field requirements and correct your input
"message" : " Token has expired "
Error Code Title Description Resolution MISSING_TOKENAuthentication token missing No authentication token was provided in the request Include a valid JWT token in the Authorization header as Bearer <token> INVALID_TOKENInvalid authentication token The provided authentication token is malformed or invalid Obtain a new token by logging in again or using a valid auth token TOKEN_EXPIREDAuthentication token expired The provided authentication token has expired Obtain a new token by logging in again or refreshing your session
"message" : " Admin access required "
Error Code Title Description Resolution ADMIN_ONLYAdmin access required This endpoint is only accessible to admin users Contact an administrator if you need access to this functionality ACCOUNT_BANNEDAccount banned Your account has been banned and cannot access this resource Contact support for information about your account status
Delete multiple events at once based on filters. At least one filter must be supplied.
curl -X DELETE " https://api.hoody.com/api/v1/events " \
-H " Authorization: Bearer <token> " \
-H " Content-Type: application/json " \
-d ' {"resource_type": "container", "before_date": "2024-12-15T00:00:00.000Z"} '
const result = await client . api . events . bulkDelete ( {
resource_type: " container " ,
before_date: " 2024-12-15T00:00:00.000Z "
Field Type Required Description event_typestring No Delete all events of this type. See allowed event types resource_typestring No Delete all events for this resource type. See allowed resource types resource_idstring No Delete all events for this resource (24-character hex ID) before_datestring No Delete events before this date (ISO 8601) realm_idstring No Delete events in this realm (24-character hex ID)
"resource_type" : " container " ,
"before_date" : " 2024-12-15T00:00:00.000Z "
"message" : " Events deleted successfully " ,
"message" : " Either filters or `all=true` must be provided for bulk delete "
Error Code Title Description Resolution VALIDATION_ERRORInvalid input parameters One or more request parameters failed validation Check the error message for specific field requirements and correct your input INVALID_BULK_DELETE_PARAMSInvalid bulk delete parameters You must provide at least one filter when performing a bulk delete, or set all=true to delete all events Provide one or more filters (e.g., resource_type, event_type) or use all=true to confirm deletion of all events
"message" : " Authentication token required "
Error Code Title Description Resolution MISSING_TOKENAuthentication token missing No authentication token was provided in the request Include a valid JWT token in the Authorization header as Bearer <token> INVALID_TOKENInvalid authentication token The provided authentication token is malformed or invalid Obtain a new token by logging in again or using a valid auth token TOKEN_EXPIREDAuthentication token expired The provided authentication token has expired Obtain a new token by logging in again or refreshing your session
Permanently delete an event from history.
curl -X DELETE " https://api.hoody.com/api/v1/events/507f1f77bcf86cd799439044 " \
-H " Authorization: Bearer <token> "
const result = await client . api . events . delete ( {
id: " 507f1f77bcf86cd799439044 "
Name In Type Required Description idpath string Yes Event ID to delete
"message" : " Event deleted successfully "
"message" : " Invalid ID format "
Error Code Title Description Resolution INVALID_ID_FORMATInvalid ID format The provided ID must be a 24-character hexadecimal string Ensure the ID is exactly 24 characters long and contains only hexadecimal characters (0-9, a-f)
"message" : " Token has expired "
Error Code Title Description Resolution MISSING_TOKENAuthentication token missing No authentication token was provided in the request Include a valid JWT token in the Authorization header as Bearer <token> INVALID_TOKENInvalid authentication token The provided authentication token is malformed or invalid Obtain a new token by logging in again or using a valid auth token TOKEN_EXPIREDAuthentication token expired The provided authentication token has expired Obtain a new token by logging in again or refreshing your session
"message" : " Insufficient permissions "
Error Code Title Description Resolution INSUFFICIENT_PERMISSIONSInsufficient permissions You do not have the required permissions to perform this action Contact the resource owner or administrator to request access ACCOUNT_BANNEDAccount banned Your account has been banned and cannot access this resource Contact support for information about your account status
"message" : " Event not found "
Error Code Title Description Resolution EVENT_NOT_FOUNDEvent not found The requested event does not exist or has been deleted Verify the event ID is correct and that you have access to this event
Get all notifications for the authenticated user, including global notifications and notifications targeted to the user.
curl -X GET " https://api.hoody.com/api/v1/notifications/ " \
-H " Authorization: Bearer <token> "
const notifications = await client . api . notifications . listIterator ();
This endpoint takes no parameters.
"message" : " Notifications retrieved successfully " ,
"id" : " 507f1f77bcf86cd799439030 " ,
"title" : " System Maintenance Notice " ,
"message" : " Scheduled maintenance will occur on January 25th at 2:00 AM UTC. " ,
"expires_at" : " 2025-01-26T00:00:00.000Z " ,
"created_at" : " 2025-01-20T10:00:00.000Z " ,
"updated_at" : " 2025-01-20T10:00:00.000Z " ,
"message" : " Authentication token required "
"error" : " Internal Server Error " ,
"message" : " An unexpected error occurred "
Get all public notifications. No authentication required.
curl -X GET " https://api.hoody.com/api/v1/notifications/public "
const publicNotifications = await client . api . notifications . listPublicIterator ();
This endpoint takes no parameters.
"message" : " Public notifications retrieved successfully " ,
"id" : " 507f1f77bcf86cd799439030 " ,
"title" : " System Maintenance Notice " ,
"message" : " Scheduled maintenance will occur on January 25th at 2:00 AM UTC. " ,
"expires_at" : " 2025-01-26T00:00:00.000Z " ,
"created_at" : " 2025-01-20T10:00:00.000Z " ,
"updated_at" : " 2025-01-20T10:00:00.000Z "
"error" : " Internal Server Error " ,
"message" : " An unexpected error occurred "
Mark a single notification as read for the authenticated user.
curl -X PUT " https://api.hoody.com/api/v1/notifications/507f1f77bcf86cd799439030/read " \
-H " Authorization: Bearer <token> "
const result = await client . api . notifications . markRead ( {
id: " 507f1f77bcf86cd799439030 "
Name In Type Required Description idpath string Yes Unique identifier of the notification to mark as read
"message" : " Notification marked as read " ,
"id" : " 507f1f77bcf86cd799439150 " ,
"notification_id" : " 507f1f77bcf86cd799439030 " ,
"read_at" : " 2025-01-21T21:30:00.000Z "
"message" : " Invalid ID format "
"message" : " Authentication token required "
"message" : " Insufficient permissions "
"message" : " Notification not found "
"error" : " Internal Server Error " ,
"message" : " An unexpected error occurred "
Mark all notifications as read for the authenticated user.
curl -X PUT " https://api.hoody.com/api/v1/notifications/read-all " \
-H " Authorization: Bearer <token> "
const result = await client . api . notifications . markAllRead ();
This endpoint takes no parameters.
"message" : " All notifications marked as read " ,
"message" : " Authentication token required "
"error" : " Internal Server Error " ,
"message" : " An unexpected error occurred "
Field Type Description idstring Unique notification identifier titlestring Notification title messagestring Notification body typestring One of: MAINTENANCE, ANNOUNCEMENT, STATUS_UPDATE severitystring One of: INFO, WARNING, ERROR, SUCCESS is_publicboolean Whether the notification is visible without authentication is_globalboolean Whether the notification targets all users target_user_idsarray | null Specific user IDs targeted, or null for global expires_atstring | null ISO 8601 expiry timestamp, or null if never expires created_atstring ISO 8601 timestamp of creation updated_atstring ISO 8601 timestamp of last update is_readboolean Whether the authenticated user has read this notification (user listing only) read_atstring | null ISO 8601 timestamp of when the notification was read (user listing only)
Field Type Description idstring 24-character hex event identifier event_typestring Type of event (see allowed event types ) resource_typestring Type of resource (see allowed resource types ) resource_idstring 24-character hex resource ID user_idstring 24-character hex ID of the user who owns or triggered the event payloadobject Event-specific data, sanitized for security realm_idsarray Realm IDs this event belongs to created_atstring ISO 8601 timestamp of when the event occurred