--- id: plugin.birthday title: Birthday scope: plugins status: active priority: 10 visibility: user category: Plugin tags: plugin, birthday generated: true editable: false updated_at: "2026-06-25T12:06:11.231Z" --- # Birthday Birthday profiles, announcements, lookup commands, and optional birthday currency gifts. ## Metadata Plugin ID: birthday Version: 0.1.2 Default state: enabled ## Web Routes - /plugins/birthday - GET /plugins/birthday - POST /plugins/birthday/settings - POST /plugins/birthday/templates/create - POST /plugins/birthday/templates/:id/update - POST /plugins/birthday/templates/:id/duplicate - POST /plugins/birthday/templates/:id/remove - POST /plugins/birthday/profile - POST /plugins/birthday/profile/unset - GET /plugins/birthday/u/:username ## Route Reference ### MOUNT /plugins/birthday - Purpose: Mounts the plugin router at this base WebUI path. - Inputs: No request parameters detected by static analysis. - Response format: Plugin router mount point. - Access: Access is controlled by the mount options and individual plugin routes. - Side effects: No direct route action; child routes handle requests. - Limits/notes: Mount metadata is inferred from static source scanning. ### GET /plugins/birthday - Purpose: Renders or serves the birthday plugin page. - Inputs: No request parameters detected by static analysis. - Response format: HTML page rendered from an EJS view - Access: admin access expected; logged-in session required or used - Side effects: Usually read-only. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. ### POST /plugins/birthday/settings - Purpose: Processes the birthday plugin action for settings. - Inputs: body: `announcement_channel_id`, `birthday_check_interval_minutes`, `enabled`, `gift_amount`, `gift_mode`, `leap_day_policy`, `timezone` - Response format: HTTP redirect after handling the request - Access: admin access expected; logged-in session required or used - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Input length or numeric bounds are enforced by helper functions in the handler. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/birthday/templates/create - Purpose: Processes the birthday plugin action for templates create. - Inputs: body: `pool`, `text` - Response format: HTTP redirect after handling the request - Access: logged-in session required or used - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/birthday/templates/:id/update - Purpose: Processes the birthday plugin action for templates id update. - Inputs: path params: `id`; body: `enabled`, `pool`, `text` - Response format: HTTP redirect after handling the request - Access: logged-in session required or used - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/birthday/templates/:id/duplicate - Purpose: Processes the birthday plugin action for templates id duplicate. - Inputs: path params: `id`; body: `pool` - Response format: HTTP redirect after handling the request - Access: logged-in session required or used - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/birthday/templates/:id/remove - Purpose: Processes the birthday plugin action for templates id remove. - Inputs: path params: `id`; body: `pool` - Response format: HTTP redirect after handling the request - Access: logged-in session required or used - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/birthday/profile - Purpose: Processes the birthday plugin action for profile. - Inputs: body: `birthday`, `privacy` - Response format: HTTP redirect after handling the request - Access: logged-in session required or used - Side effects: Consumes submitted data; state mutation happens in called helpers if present. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Most non-API POST routes are browser form submissions and usually redirect after completion. ### POST /plugins/birthday/profile/unset - Purpose: Processes the birthday plugin action for profile unset. - Inputs: No request parameters detected by static analysis. - Response format: HTTP redirect after handling the request - Access: logged-in session required or used - Side effects: writes or mutates server-side state - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. Most non-API POST routes are browser form submissions and usually redirect after completion. ### GET /plugins/birthday/u/:username - Purpose: Renders or serves the birthday plugin page for u username. - Inputs: path params: `username` - Response format: HTML page rendered from an EJS view - Access: logged-in session required or used - Side effects: Usually read-only. - Limits/notes: Generated from static route source analysis; confirm exact behavior in the handler before changing integrations. ## Commands - No plugin command triggers detected. ## Source Plugin folder: plugins/birthday