---
id: plugin.birthday
title: Birthday
scope: plugins
status: active
priority: 10
visibility: user
category: Plugin
tags: plugin, birthday
generated: true
editable: false
---
# Birthday
Birthday profiles, announcements, lookup commands, and optional birthday currency gifts.
## Metadata
Plugin ID: birthday
Version: 0.1.3
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
