Skip to content

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.

Terminal window
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>"
NameInTypeRequiredDescription
limitqueryintegerNoNumber of events to return (max 500). Default: 100
offsetqueryintegerNoNumber of events to skip. Default: 0
sort_byquerystringNoField to sort by. Default: "created_at". Allowed: created_at, event_type
sort_orderquerystringNoSort direction. Default: "desc". Allowed: asc, desc
event_typequerystringNoFilter by specific event type
resource_typequerystringNoFilter by resource type
resource_idquerystringNoFilter by specific resource ID
project_idquerystringNoFilter by project ID
container_idquerystringNoFilter by container ID
start_datequerystringNoFilter events after this timestamp
end_datequerystringNoFilter events before this timestamp
realm_idquerystringNoFilter 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

{
"statusCode": 200,
"message": "Events retrieved successfully",
"data": {
"events": [
{
"id": "507f1f77bcf86cd799439044",
"event_type": "container.running",
"resource_type": "container",
"resource_id": "507f1f77bcf86cd799439033",
"user_id": "507f1f77bcf86cd799439011",
"payload": {
"container": {
"id": "507f1f77bcf86cd799439033",
"name": "web-app-1",
"status": "running",
"project_id": "507f1f77bcf86cd799439022"
}
},
"realm_ids": ["507f1f77bcf86cd799439022"],
"created_at": "2025-01-15T10:30:05.123Z"
}
],
"pagination": {
"total": 1523,
"limit": 100,
"offset": 0,
"has_more": true
}
}
}

Retrieve detailed information about a specific event.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/events/507f1f77bcf86cd799439044" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesEvent ID
{
"statusCode": 200,
"message": "Event retrieved successfully",
"data": {
"id": "507f1f77bcf86cd799439044",
"event_type": "container.running",
"resource_type": "container",
"resource_id": "507f1f77bcf86cd799439033",
"user_id": "507f1f77bcf86cd799439011",
"payload": {
"container": {
"id": "507f1f77bcf86cd799439033",
"name": "web-app-1",
"status": "running",
"project_id": "507f1f77bcf86cd799439022"
}
},
"realm_ids": ["507f1f77bcf86cd799439022"],
"created_at": "2025-01-15T10:30:05.123Z"
}
}

Get aggregated statistics about event history within an optional date range and realm.

Terminal window
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>"
NameInTypeRequiredDescription
start_datequerystringNoStart of time range
end_datequerystringNoEnd of time range
realm_idquerystringNoFilter by realm
{
"statusCode": 200,
"message": "Event statistics retrieved successfully",
"data": {
"total_events": 15234,
"by_type": {
"container.running": 3456,
"container.stopped": 2134,
"storage.share.created": 1523,
"notification.created": 8121
},
"by_resource": {
"container": 8765,
"storage_share": 2456,
"notification": 4013
},
"oldest_event": "2024-11-15T10:30:00.000Z",
"newest_event": "2025-01-15T10:30:00.000Z"
}
}

Delete events older than the specified retention period. Admin only.

Terminal window
curl -X POST "https://api.hoody.com/api/v1/events/cleanup" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"retention_days": 30}'
FieldTypeRequiredDescription
retention_daysintegerYesDelete events older than this many days. Min: 1, Max: 365
{
"retention_days": 30
}
{
"statusCode": 200,
"message": "Old events cleaned up successfully",
"data": {
"deleted_count": 5432,
"retention_days": 30,
"cutoff_date": "2024-12-15T10:30:00.000Z"
}
}

Delete multiple events at once based on filters. At least one filter must be supplied.

Terminal window
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"}'
FieldTypeRequiredDescription
event_typestringNoDelete all events of this type. See allowed event types
resource_typestringNoDelete all events for this resource type. See allowed resource types
resource_idstringNoDelete all events for this resource (24-character hex ID)
before_datestringNoDelete events before this date (ISO 8601)
realm_idstringNoDelete events in this realm (24-character hex ID)
{
"resource_type": "container",
"before_date": "2024-12-15T00:00:00.000Z"
}
{
"statusCode": 200,
"message": "Events deleted successfully",
"data": {
"deleted_count": 1523
}
}

Permanently delete an event from history.

Terminal window
curl -X DELETE "https://api.hoody.com/api/v1/events/507f1f77bcf86cd799439044" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesEvent ID to delete
{
"statusCode": 200,
"message": "Event deleted successfully"
}

Get all notifications for the authenticated user, including global notifications and notifications targeted to the user.

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

This endpoint takes no parameters.

{
"statusCode": 200,
"message": "Notifications retrieved successfully",
"data": [
{
"id": "507f1f77bcf86cd799439030",
"title": "System Maintenance Notice",
"message": "Scheduled maintenance will occur on January 25th at 2:00 AM UTC.",
"type": "MAINTENANCE",
"severity": "WARNING",
"is_public": true,
"is_global": true,
"target_user_ids": null,
"expires_at": "2025-01-26T00:00:00.000Z",
"created_at": "2025-01-20T10:00:00.000Z",
"updated_at": "2025-01-20T10:00:00.000Z",
"is_read": false,
"read_at": null
}
]
}

Get all public notifications. No authentication required.

Terminal window
curl -X GET "https://api.hoody.com/api/v1/notifications/public"

This endpoint takes no parameters.

{
"statusCode": 200,
"message": "Public notifications retrieved successfully",
"data": [
{
"id": "507f1f77bcf86cd799439030",
"title": "System Maintenance Notice",
"message": "Scheduled maintenance will occur on January 25th at 2:00 AM UTC.",
"type": "MAINTENANCE",
"severity": "WARNING",
"is_public": true,
"is_global": true,
"target_user_ids": null,
"expires_at": "2025-01-26T00:00:00.000Z",
"created_at": "2025-01-20T10:00:00.000Z",
"updated_at": "2025-01-20T10:00:00.000Z"
}
]
}

Mark a single notification as read for the authenticated user.

Terminal window
curl -X PUT "https://api.hoody.com/api/v1/notifications/507f1f77bcf86cd799439030/read" \
-H "Authorization: Bearer <token>"
NameInTypeRequiredDescription
idpathstringYesUnique identifier of the notification to mark as read
{
"statusCode": 200,
"message": "Notification marked as read",
"data": {
"id": "507f1f77bcf86cd799439150",
"notification_id": "507f1f77bcf86cd799439030",
"is_read": true,
"read_at": "2025-01-21T21:30:00.000Z"
}
}

Mark all notifications as read for the authenticated user.

Terminal window
curl -X PUT "https://api.hoody.com/api/v1/notifications/read-all" \
-H "Authorization: Bearer <token>"

This endpoint takes no parameters.

{
"statusCode": 200,
"message": "All notifications marked as read",
"data": {
"count": 5
}
}

FieldTypeDescription
idstringUnique notification identifier
titlestringNotification title
messagestringNotification body
typestringOne of: MAINTENANCE, ANNOUNCEMENT, STATUS_UPDATE
severitystringOne of: INFO, WARNING, ERROR, SUCCESS
is_publicbooleanWhether the notification is visible without authentication
is_globalbooleanWhether the notification targets all users
target_user_idsarray | nullSpecific user IDs targeted, or null for global
expires_atstring | nullISO 8601 expiry timestamp, or null if never expires
created_atstringISO 8601 timestamp of creation
updated_atstringISO 8601 timestamp of last update
is_readbooleanWhether the authenticated user has read this notification (user listing only)
read_atstring | nullISO 8601 timestamp of when the notification was read (user listing only)
FieldTypeDescription
idstring24-character hex event identifier
event_typestringType of event (see allowed event types)
resource_typestringType of resource (see allowed resource types)
resource_idstring24-character hex resource ID
user_idstring24-character hex ID of the user who owns or triggered the event
payloadobjectEvent-specific data, sanitized for security
realm_idsarrayRealm IDs this event belongs to
created_atstringISO 8601 timestamp of when the event occurred