### Start Wallos with Docker Compose Source: https://context7.com/ellite/wallos/llms.txt Commands to start and access the Wallos application after setting up Docker Compose. ```bash # Start docker compose up -d # Access at http://localhost:8282 ``` -------------------------------- ### Bare-Metal Deployment and Setup for Wallos Source: https://context7.com/ellite/wallos/llms.txt Steps for deploying Wallos on a bare-metal server with NGINX and PHP 8.3. Includes database initialization, migration, and cron job setup. ```bash # 1. Clone and place under web root git clone https://github.com/ellite/Wallos /var/www/html # 2. Initialize database cp /var/www/html/db/wallos.empty.db /var/www/html/db/wallos.db # 3. Run migrations (browser or CLI) curl http://localhost/endpoints/db/migrate.php # 4. Add cron jobs crontab -e # Paste: 0 1 * * * php /var/www/html/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1 0 2 * * * php /var/www/html/endpoints/cronjobs/updateexchange.php >> /var/log/cron/updateexchange.log 2>&1 0 8 * * * php /var/www/html/endpoints/cronjobs/sendcancellationnotifications.php >> /var/log/cron/sendcancellationnotifications.log 2>&1 0 9 * * * php /var/www/html/endpoints/cronjobs/sendnotifications.php >> /var/log/cron/sendnotifications.log 2>&1 */2 * * * * php /var/www/html/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1 */2 * * * * php /var/www/html/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1 0 */6 * * * php /var/www/html/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1 30 1 * * 1 php /var/www/html/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1 30 3 * * 1 php /var/www/html/endpoints/cronjobs/generaterecommendations.php weekly >> /var/log/cron/generaterecommendations.log 2>&1 0 4 1 * * php /var/www/html/endpoints/cronjobs/generaterecommendations.php monthly >> /var/log/cron/generaterecommendations.log 2>&1 ``` -------------------------------- ### Get User Display Settings Source: https://context7.com/ellite/wallos/llms.txt Retrieves user display and UI preferences. Ensure your API key is valid. ```bash curl "http://localhost:8282/api/settings/get_settings.php?api_key=YOUR_KEY" ``` -------------------------------- ### Get Application Version Source: https://context7.com/ellite/wallos/llms.txt Returns the currently running Wallos version. ```APIDOC ## GET /api/status/version.php ### Description Returns the currently running Wallos version. ### Method GET ### Endpoint http://localhost:8282/api/status/version.php ### Parameters #### Query Parameters - **api_key** (string) - required - User API key ### Response #### Success Response (200) - **success** (bool) - Indicates if the request was successful. - **title** (string) - The title of the response, e.g., "version". - **version** (string) - The current application version (e.g., "v4.8.4"). - **version_number** (string) - The version number (e.g., "4.8.4"). - **notes** (array) - An array of notes related to the response. ### Request Example ```bash curl "http://localhost:8282/api/status/version.php?api_key=YOUR_KEY" ``` ### Response Example ```json { "success": true, "title": "version", "version": "v4.8.4", "version_number": "4.8.4", "notes": [] } ``` ``` -------------------------------- ### Get All Subscriptions (Admin) Source: https://context7.com/ellite/wallos/llms.txt Use this endpoint to retrieve all subscriptions across all users. Requires an administrator API key. ```bash curl "http://localhost:8282/api/subscriptions/get_subscriptions.php?api_key=ADMIN_KEY&all-user-subscription=1" ``` -------------------------------- ### Get OIDC/OAuth Settings Source: https://context7.com/ellite/wallos/llms.txt Retrieves the OIDC/OAuth2 provider configuration. Requires an admin API key. ```bash curl "http://localhost:8282/api/admin/get_oidc_settings.php?api_key=ADMIN_KEY" ``` -------------------------------- ### Get Application Version Source: https://context7.com/ellite/wallos/llms.txt Retrieves the current version of the Wallos application. Requires an API key. ```bash curl "http://localhost:8282/api/status/version.php?api_key=YOUR_KEY" ``` -------------------------------- ### Get Admin Settings Source: https://context7.com/ellite/wallos/llms.txt Retrieves global application settings. Requires the API key of the first registered admin user (id = 1). ```bash curl "http://localhost:8282/api/admin/get_admin_settings.php?api_key=ADMIN_KEY" ``` -------------------------------- ### GET /api/admin/get_oidc_settings.php Source: https://context7.com/ellite/wallos/llms.txt Retrieves the OIDC/OAuth2 provider configuration. This endpoint requires an admin API key. ```APIDOC ## GET /api/admin/get_oidc_settings.php — OIDC/OAuth Settings (Admin only) ### Description Returns the OIDC/OAuth2 provider configuration. Requires admin API key. ### Method GET ### Endpoint /api/admin/get_oidc_settings.php ### Query Parameters - **api_key** (string) - Required - The admin API key. ### Response #### Success Response (200) - **success** (boolean) - Indicates if the request was successful. - **title** (string) - The title of the settings, e.g., "oidc_settings". - **oidc_settings** (object) - Contains the OIDC/OAuth2 settings. - **name** (string) - The name of the OIDC provider. - **client_id** (string) - The client ID for the OIDC provider. - **client_secret** (string) - The client secret for the OIDC provider. - **authorization_url** (string) - The authorization URL for the OIDC provider. - **token_url** (string) - The token URL for the OIDC provider. - **user_info_url** (string) - The user info URL for the OIDC provider. - **redirect_url** (string) - The redirect URL configured for the OIDC provider. - **logout_url** (string) - The logout URL for the OIDC provider. - **user_identifier_field** (string) - The field in the user info response that identifies the user (e.g., "sub"). - **scopes** (string) - The scopes requested for the OIDC authorization. - **auth_style** (string) - The authentication style (e.g., "auto"). - **auto_create_user** (integer) - Whether to automatically create users (1) or not (0). - **password_login_disabled** (integer) - Whether password login is disabled (1) or enabled (0). - **notes** (array) - An array of notes, if any. ### Response Example ```json { "success": true, "title": "oidc_settings", "oidc_settings": { "name": "Authentik", "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "authorization_url": "https://auth.example.com/application/o/authorize/", "token_url": "https://auth.example.com/application/o/token/", "user_info_url": "https://auth.example.com/application/o/userinfo/", "redirect_url": "http://wallos.example.com", "logout_url": "https://auth.example.com/application/o/wallos/end-session/", "user_identifier_field": "sub", "scopes": "openid email profile", "auth_style": "auto", "auto_create_user": 0, "password_login_disabled": 0 }, "notes": [] } ``` ``` -------------------------------- ### Get Payment Methods Source: https://context7.com/ellite/wallos/llms.txt Fetches all payment methods configured for the user, including their icons and usage status. The `enabled` field indicates if the method is active. ```bash curl "http://localhost:8282/api/payment_methods/get_payment_methods.php?api_key=YOUR_KEY" ``` -------------------------------- ### GET /api/admin/get_admin_settings.php Source: https://context7.com/ellite/wallos/llms.txt Retrieves global application settings. This endpoint requires the API key of the first registered admin user. ```APIDOC ## GET /api/admin/get_admin_settings.php — Admin Settings (Admin only) ### Description Returns global application settings. Requires the API key of user with `id = 1` (the first registered admin). ### Method GET ### Endpoint /api/admin/get_admin_settings.php ### Query Parameters - **api_key** (string) - Required - The API key of the admin user. ### Response #### Success Response (200) - **success** (boolean) - Indicates if the request was successful. - **title** (string) - The title of the settings, e.g., "admin_settings". - **admin_settings** (object) - Contains the admin settings. - **registrations_open** (integer) - Whether registrations are open (1) or closed (0). - **max_users** (integer) - The maximum number of users allowed. - **require_email_verification** (integer) - Whether email verification is required (1) or not (0). - **server_url** (string) - The application's server URL. - **smtp_address** (string) - The SMTP server address. - **smtp_port** (integer) - The SMTP server port. - **smtp_username** (string) - The SMTP username. - **smtp_password** (string) - The masked SMTP password. - **from_email** (string) - The sender email address for notifications. - **encryption** (string) - The SMTP encryption method (e.g., "tls"). - **login_disabled** (integer) - Whether login is disabled (1) or enabled (0). - **latest_version** (string) - The latest available version of the application. - **update_notification** (integer) - Whether update notifications are enabled (1) or disabled (0). - **notes** (array) - An array of notes, if any. ### Response Example ```json { "success": true, "title": "admin_settings", "admin_settings": { "registrations_open": 1, "max_users": 10, "require_email_verification": 0, "server_url": "http://wallos.example.com", "smtp_address": "smtp.example.com", "smtp_port": 587, "smtp_username": "admin@example.com", "smtp_password": "********", "from_email": "no-reply@example.com", "encryption": "tls", "login_disabled": 0, "latest_version": "v4.8.4", "update_notification": 1 }, "notes": [] } ``` ``` -------------------------------- ### Get Subscription Categories Source: https://context7.com/ellite/wallos/llms.txt Fetches all subscription categories for the authenticated user. Includes whether each category is currently in use. ```bash curl "http://localhost:8282/api/categories/get_categories.php?api_key=YOUR_KEY" ``` -------------------------------- ### Get Monthly Cost Source: https://context7.com/ellite/wallos/llms.txt Calculates the total cost of active subscriptions for a specific month and year, with currency conversion. Requires API key, month, and year. ```bash curl "http://localhost:8282/api/subscriptions/get_monthly_cost.php" \ -d "api_key=YOUR_KEY" \ -d "month=6" \ -d "year=2025" ``` -------------------------------- ### Get Currencies and Exchange Rates Source: https://context7.com/ellite/wallos/llms.txt Retrieves all configured currencies, their exchange rates relative to the main currency, and their usage status. The main currency is indicated by `main_currency`. ```bash curl "http://localhost:8282/api/currencies/get_currencies.php?api_key=YOUR_KEY" ``` -------------------------------- ### Get All Subscriptions (Admin) Source: https://context7.com/ellite/wallos/llms.txt Retrieves all subscriptions across all users. This endpoint is intended for administrative use only. ```APIDOC ## GET /api/subscriptions/get_subscriptions.php ### Description Retrieves all subscriptions across all users. This endpoint is intended for administrative use only. ### Method GET ### Endpoint http://localhost:8282/api/subscriptions/get_subscriptions.php ### Parameters #### Query Parameters - **api_key** (string) - required - User API key - **all-user-subscription** (int) - null - Admin only: `1` returns all users' subscriptions - **sort** (string) - `next_payment` - Sort order: `name`, `id`, `next_payment`, `price`, `payer_user_id`, `category_id`, `payment_method_id`, `inactive`, `alphanumeric` - **state** (int) - null - Subscription state: `0` = active, `1` = inactive - **member** (string) - null - Comma-separated household member IDs - **category** (string) - null - Comma-separated category IDs - **payment** (string) - null - Comma-separated payment method IDs - **convert_currency** (bool) - false - Convert prices to user's main currency - **disabled_to_bottom** (bool) - false - Sort inactive subscriptions last ### Response #### Success Response (200) - **success** (bool) - Indicates if the request was successful. - **title** (string) - The title of the response, e.g., "subscriptions". - **subscriptions** (array) - An array of subscription objects. - **id** (int) - Subscription ID. - **name** (string) - Subscription name. - **logo** (string) - Path to the subscription logo. - **price** (float) - Subscription price. - **currency_id** (int) - ID of the currency. - **start_date** (string) - Subscription start date (YYYY-MM-DD). - **next_payment** (string) - Next payment date (YYYY-MM-DD). - **cycle** (int) - Payment cycle. - **frequency** (int) - Payment frequency. - **auto_renew** (int) - Auto-renewal status (1 for enabled, 0 for disabled). - **notes** (string) - User-provided notes for the subscription. - **payment_method_id** (int) - ID of the payment method. - **payer_user_id** (int) - ID of the user paying for the subscription. - **category_id** (int) - ID of the subscription category. - **notify** (int) - Notification status (1 for enabled, 0 for disabled). - **url** (string) - URL associated with the subscription. - **inactive** (int) - Inactive status (1 for inactive, 0 for active). - **notify_days_before** (int) - Number of days before the next payment to notify. - **user_id** (int) - ID of the user who owns the subscription. - **cancelation_date** (null) - Cancellation date. - **cancellation_date** (string) - Cancellation date (empty string if not cancelled). - **category_name** (string) - Name of the subscription category. - **payer_user_name** (string) - Name of the user paying. - **payment_method_name** (string) - Name of the payment method. - **notes** (array) - An array of notes related to the response. ### Request Example ```bash curl "http://localhost:8282/api/subscriptions/get_subscriptions.php?api_key=ADMIN_KEY&all-user-subscription=1" ``` ### Response Example ```json { "success": true, "title": "subscriptions", "subscriptions": [ { "id": 1, "name": "Netflix", "logo": "netflix.png", "price": 15.99, "currency_id": 1, "start_date": "2024-01-01", "next_payment": "2025-06-01", "cycle": 3, "frequency": 1, "auto_renew": 1, "notes": "", "payment_method_id": 2, "payer_user_id": 1, "category_id": 2, "notify": 1, "url": "https://netflix.com", "inactive": 0, "notify_days_before": 3, "user_id": 1, "cancelation_date": null, "cancellation_date": "", "category_name": "Entertainment", "payer_user_name": "John", "payment_method_name": "Credit Card" } ], "notes": [] } ``` ``` -------------------------------- ### Get Notification Settings Source: https://context7.com/ellite/wallos/llms.txt Returns all configured notification channels. Secrets such as passwords and API keys are masked with '********'. ```bash curl "http://localhost:8282/api/notifications/get_notification_settings.php?api_key=YOUR_KEY" ``` -------------------------------- ### Get Monthly Cost Source: https://context7.com/ellite/wallos/llms.txt Calculates the total cost of all active subscriptions for a given month and year, converted to the user's main currency. ```APIDOC ## GET /api/subscriptions/get_monthly_cost.php ### Description Calculates the total cost of all active subscriptions for a given month and year, converted to the user's main currency. ### Method GET ### Endpoint http://localhost:8282/api/subscriptions/get_monthly_cost.php ### Parameters #### Request Body - **api_key** (string) - required - User API key - **month** (integer) - required - Month (1–12) - **year** (integer) - required - Year (e.g., 2025) ### Response #### Success Response (200) - **success** (bool) - Indicates if the request was successful. - **title** (string) - The title of the response, e.g., "June 2025". - **monthly_cost** (string) - The total monthly cost. - **localized_monthly_cost** (string) - The total monthly cost localized with currency symbol. - **currency_code** (string) - The currency code (e.g., "EUR"). - **currency_symbol** (string) - The currency symbol (e.g., "€"). - **notes** (array) - An array of notes related to the response. ### Request Example ```bash curl "http://localhost:8282/api/subscriptions/get_monthly_cost.php" \ -d "api_key=YOUR_KEY" \ -d "month=6" \ -d "year=2025" ``` ### Response Example ```json { "success": true, "title": "June 2025", "monthly_cost": "120.24", "localized_monthly_cost": "€120.24", "currency_code": "EUR", "currency_symbol": "€", "notes": [] } ``` ``` -------------------------------- ### Get iCal Feed Source: https://context7.com/ellite/wallos/llms.txt Generates a downloadable .ics file of active subscriptions with reminders. Supports currency conversion. ```bash # Download the iCal feed curl "http://localhost:8282/api/subscriptions/get_ical_feed.php?api_key=YOUR_KEY" \ -o subscriptions.ics ``` ```bash # With currency conversion curl "http://localhost:8282/api/subscriptions/get_ical_feed.php?api_key=YOUR_KEY&convert_currency=true" \ -o subscriptions.ics ``` -------------------------------- ### Get Current User Profile Source: https://context7.com/ellite/wallos/llms.txt Fetches the profile details of the authenticated user. Password and API key fields are masked. ```bash curl "http://localhost:8282/api/users/get_user.php?api_key=YOUR_KEY" ``` -------------------------------- ### GET /api/fixer/get_fixer.php Source: https://context7.com/ellite/wallos/llms.txt Retrieves the configured Fixer.io or APILayer exchange-rate provider settings. The API key is always masked in the response. ```APIDOC ## GET /api/fixer/get_fixer.php — Fixer Exchange Rate Settings ### Description Returns the configured Fixer.io or APILayer exchange-rate provider settings. The API key is always masked. ### Method GET ### Endpoint /api/fixer/get_fixer.php ### Query Parameters - **api_key** (string) - Required - Your API key. ### Response #### Success Response (200) - **success** (boolean) - Indicates if the request was successful. - **title** (string) - The title of the settings, e.g., "fixer". - **fixer** (object) - Contains the fixer settings. - **api_key** (string) - The masked API key. - **provider** (integer) - The provider ID. - **provider_name** (string) - The name of the provider, e.g., "Fixer.io". - **notes** (array) - An array of notes, if any. ### Response Example ```json { "success": true, "title": "fixer", "fixer": { "api_key": "********", "provider": 0, "provider_name": "Fixer.io" }, "notes": [] } ``` ``` -------------------------------- ### API Error Responses Source: https://context7.com/ellite/wallos/llms.txt These JSON examples show consistent error responses from the /api/ endpoints. On failure, 'success' is false and 'title' indicates the error reason. ```json { "success": false, "title": "Missing parameters" } ``` ```json { "success": false, "title": "Invalid API key" } ``` ```json { "success": false, "title": "Invalid request method" } ``` ```json { "success": false, "title": "Invalid user" } ``` -------------------------------- ### Get Fixer Exchange Rate Settings Source: https://context7.com/ellite/wallos/llms.txt Retrieves the configured Fixer.io or APILayer exchange-rate provider settings. The API key is always masked in the response. ```bash curl "http://localhost:8282/api/fixer/get_fixer.php?api_key=YOUR_KEY" ``` -------------------------------- ### List Subscriptions (Basic) Source: https://context7.com/ellite/wallos/llms.txt Retrieve all subscriptions sorted by next payment date using the Wallos API. Replace YOUR_KEY with your actual API key. ```bash curl "http://localhost:8282/api/subscriptions/get_subscriptions.php?api_key=YOUR_KEY" ``` -------------------------------- ### List Subscriptions with Filters and Currency Conversion Source: https://context7.com/ellite/wallos/llms.txt Fetch subscriptions with specific filters (state, category, payment), sorting, currency conversion, and display options. Requires an API key. ```bash curl "http://localhost:8282/api/subscriptions/get_subscriptions.php" \ -d "api_key=YOUR_KEY" \ -d "sort=price" \ -d "state=0" \ -d "category=1,2" \ -d "payment=3" \ -d "convert_currency=true" \ -d "disabled_to_bottom=true" ``` -------------------------------- ### Run Wallos with Docker Source: https://github.com/ellite/wallos/blob/main/README.md Deploy Wallos using a Docker container. Mount local directories for persistent storage of database and logos. Adjust the host port (e.g., 8282) as needed. ```bash docker run -d --name wallos -v /path/to/config/wallos/db:/var/www/html/db \ -v /path/to/config/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=Europe/Berlin -p 8282:80 --restart unless-stopped \ bellamy/wallos:latest ``` -------------------------------- ### Backup Database and Logos Source: https://context7.com/ellite/wallos/llms.txt Creates a ZIP archive of the SQLite database and all uploaded logos. The response includes a filename for downloading the archive from `/.tmp/`. Requires an active session and CSRF token. ```bash # Trigger backup (requires active session) curl -b "session_cookie=..." \ http://localhost:8282/endpoints/db/backup.php \ -X POST -d "csrf_token=TOKEN" ``` -------------------------------- ### Wallos Demo Credentials Source: https://github.com/ellite/wallos/blob/main/README.md Use these credentials to access the Wallos demo instance. The database is reset every 2 hours. ```text Username: demo Password: demo ``` -------------------------------- ### Docker CLI Deployment for Wallos Source: https://context7.com/ellite/wallos/llms.txt Deploy Wallos using the Docker CLI. Map local directories for database and logos to the container's persistent storage. ```bash docker run -d --name wallos \ -v /path/to/wallos/db:/var/www/html/db \ -v /path/to/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=Europe/Berlin \ -p 8282:80 \ --restart unless-stopped \ bellamy/wallos:latest ``` -------------------------------- ### Run Database Migrations Source: https://context7.com/ellite/wallos/llms.txt Applies pending schema migrations from the `migrations/` directory. This endpoint is safe to run multiple times as applied migrations are tracked. ```bash # Via browser after installation or update curl http://localhost:8282/endpoints/db/migrate.php # Expected output: # Migration migrations/001_initial.php completed successfully. # Migration migrations/002_add_categories.php completed successfully. # ... # No migrations to run. (if already up to date) ``` -------------------------------- ### Get Current User Profile Source: https://context7.com/ellite/wallos/llms.txt Returns the profile of the authenticated user. Password and API key fields are always masked. ```APIDOC ## GET /api/users/get_user.php ### Description Returns the profile of the authenticated user. Password and API key fields are always masked. ### Method GET ### Endpoint http://localhost:8282/api/users/get_user.php ### Parameters #### Query Parameters - **api_key** (string) - required - User API key ### Response #### Success Response (200) - **success** (bool) - Indicates if the request was successful. - **title** (string) - The title of the response, e.g., "user". - **user** (object) - An object containing the user's profile information. - **id** (int) - User ID. - **username** (string) - User's username. - **email** (string) - User's email address. - **password** (string) - Masked password. - **main_currency** (int) - ID of the user's main currency. - **avatar** (string) - Path to the user's avatar. - **language** (string) - User's preferred language. - **budget** (float) - User's budget. - **totp_enabled** (int) - Two-factor authentication status (1 for enabled, 0 for disabled). - **api_key** (string) - Masked API key. - **notes** (array) - An array of notes related to the response. ### Request Example ```bash curl "http://localhost:8282/api/users/get_user.php?api_key=YOUR_KEY" ``` ### Response Example ```json { "success": true, "title": "user", "user": { "id": 1, "username": "johndoe", "email": "john@example.com", "password": "********", "main_currency": 3, "avatar": "images/uploads/logos/avatars/default-avatar.jpg", "language": "en", "budget": 150.00, "totp_enabled": 0, "api_key": "********" }, "notes": [] } ``` ``` -------------------------------- ### Run storetotalyearlycost.php Cronjob Manually Source: https://context7.com/ellite/wallos/llms.txt This script calculates and stores the total yearly subscription cost for each user. Run this command manually to execute the script immediately. ```bash php /var/www/html/endpoints/cronjobs/storetotalyearlycost.php ``` -------------------------------- ### Create a new language file Source: https://github.com/ellite/wallos/blob/main/CONTRIBUTING.md Copy an existing language file (e.g., en.php) and rename it to your new language code. Translate all values within the copied file. ```php Copy `includes/i18n/en.php` and rename it to your language code (e.g., `pt.php`). Translate all the values in the new language file. Copy `scripts/i18n/en.js` and rename it to your language code (e.g., `pt.js`). Translate all the values in the new javascript language file. ``` -------------------------------- ### User Display Settings Source: https://context7.com/ellite/wallos/llms.txt Returns the user's display and UI preferences including theme, color, CSS customizations, and layout options. ```APIDOC ## GET /api/settings/get_settings.php — User Display Settings ### Description Returns the user's display and UI preferences including theme, color, CSS customizations, and layout options. ### Method GET ### Endpoint /api/settings/get_settings.php ### Parameters #### Query Parameters - **api_key** (string) - Required - Your API key ### Response #### Success Response (200) - **success** (boolean) - Indicates if the request was successful. - **title** (string) - The title of the settings section. - **settings** (object) - An object containing various user display settings. - **dark_theme** (integer) - Whether dark theme is enabled (1) or disabled (0). - **monthly_price** (integer) - Setting related to monthly price display. - **convert_currency** (integer) - Whether currency conversion is enabled (1) or disabled (0). - **remove_background** (integer) - Whether background removal is enabled (1) or disabled (0). - **color_theme** (string) - The selected color theme. - **hide_disabled** (integer) - Whether disabled items are hidden (1) or shown (0). - **disabled_to_bottom** (integer) - Whether disabled items are moved to the bottom (1) or not (0). - **show_original_price** (integer) - Whether to show the original price (1) or not (0). - **mobile_nav** (integer) - Whether mobile navigation is enabled (1) or disabled (0). - **custom_css** (object) - An object for custom CSS. - **css** (string) - The custom CSS code. - **notes** (array) - An array of notes or messages. ### Request Example ```bash curl "http://localhost:8282/api/settings/get_settings.php?api_key=YOUR_KEY" ``` ### Response Example ```json { "success": true, "title": "settings", "settings": { "dark_theme": 1, "monthly_price": 1, "convert_currency": 1, "remove_background": 0, "color_theme": "blue", "hide_disabled": 0, "disabled_to_bottom": 1, "show_original_price": 0, "mobile_nav": 1, "custom_css": { "css": "" } }, "notes": [] } ``` ``` -------------------------------- ### POST /endpoints/db/backup.php Source: https://context7.com/ellite/wallos/llms.txt Creates a ZIP archive of the SQLite database and all uploaded logos. The archive can be downloaded from the `/.tmp/` directory. ```APIDOC ## POST /endpoints/db/backup.php — Backup Database and Logos ### Description Creates a ZIP archive containing the SQLite database and all uploaded logos. Returns a JSON response with a filename that can be downloaded from `/.tmp/`. ### Method POST ### Endpoint /endpoints/db/backup.php ### Parameters #### Request Body - **csrf_token** (string) - Required - The CSRF token for validation. ### Request Example ```bash # Trigger backup (requires active session) curl -b "session_cookie=..." \ http://localhost:8282/endpoints/db/backup.php \ -X POST -d "csrf_token=TOKEN" ``` ### Response #### Success Response (200) - **success** (boolean) - Indicates if the backup was created successfully. - **message** (string) - A confirmation message, e.g., "Zip file created successfully". - **numFiles** (integer) - The number of files included in the backup archive. - **file** (string) - The filename of the created backup ZIP archive. ### Response Example ```json { "success": true, "message": "Zip file created successfully", "numFiles": 47, "file": "backup_6650a1234.zip" } ``` ``` -------------------------------- ### Get iCal Feed Source: https://context7.com/ellite/wallos/llms.txt Returns a downloadable .ics file of all active subscriptions with VALARM reminders, suitable for importing into any calendar application. ```APIDOC ## GET /api/subscriptions/get_ical_feed.php ### Description Returns a downloadable `.ics` file of all active subscriptions with VALARM reminders, suitable for importing into any calendar application. ### Method GET ### Endpoint http://localhost:8282/api/subscriptions/get_ical_feed.php ### Parameters #### Query Parameters - **api_key** (string) - required - User API key - **convert_currency** (bool) - false - Convert prices to user's main currency ### Response #### Success Response (200) - **Content-Type**: `text/calendar` - An RFC 5545-compliant iCal file. ### Request Example ```bash # Download the iCal feed curl "http://localhost:8282/api/subscriptions/get_ical_feed.php?api_key=YOUR_KEY" \ -o subscriptions.ics # With currency conversion curl "http://localhost:8282/api/subscriptions/get_ical_feed.php?api_key=YOUR_KEY&convert_currency=true" \ -o subscriptions.ics ``` ### Response Example (iCal format) ```text BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Wallos//iCalendar//EN NAME:Wallos BEGIN:VEVENT UID:wallos-subscription-1@wallos DTSTAMP:20250601T120000Z SUMMARY:Netflix DESCRIPTION:Price: $15.99\nCategory: Entertainment\nPayment Method: Credit Card\nPayer: John\nNotes: DTSTART;VALUE=DATE:20250601 DTEND;VALUE=DATE:20250601 STATUS:CONFIRMED BEGIN:VALARM ACTION:DISPLAY DESCRIPTION:Reminder TRIGGER:-P3D END:VALARM END:VEVENT END:VCALENDAR ``` ``` -------------------------------- ### Stage and commit changes Source: https://github.com/ellite/wallos/blob/main/CONTRIBUTING.md Stage all changes and commit them with a clear and concise message. This prepares your changes for pushing to the remote repository. ```bash git add . git commit -m "Add your feature or fix" ``` -------------------------------- ### Get Household Members Source: https://context7.com/ellite/wallos/llms.txt Retrieves all household members (payers) associated with the user's account. The `in_use` field indicates if a member is assigned to any subscription. ```bash curl "http://localhost:8282/api/household/get_household.php?api_key=YOUR_KEY" ``` -------------------------------- ### Payment Methods Source: https://context7.com/ellite/wallos/llms.txt Returns all payment methods configured for the user with icons and usage status. ```APIDOC ## GET /api/payment_methods/get_payment_methods.php — Payment Methods ### Description Returns all payment methods configured for the user with icons and usage status. ### Method GET ### Endpoint /api/payment_methods/get_payment_methods.php ### Parameters #### Query Parameters - **api_key** (string) - Required - Your API key ### Response #### Success Response (200) - **success** (boolean) - Indicates if the request was successful. - **title** (string) - The title of the payment methods section. - **payment_methods** (array) - An array of payment method objects. - **id** (integer) - The unique identifier for the payment method. - **name** (string) - The name of the payment method. - **icon** (string) - The path to the icon for the payment method. - **enabled** (integer) - Whether the payment method is enabled (1) or disabled (0). - **order** (integer) - The display order of the payment method. - **in_use** (boolean) - Whether the payment method is currently in use. - **notes** (array) - An array of notes or messages. ### Request Example ```bash curl "http://localhost:8282/api/payment_methods/get_payment_methods.php?api_key=YOUR_KEY" ``` ### Response Example ```json { "success": true, "title": "payment_methods", "payment_methods": [ { "id": 1, "name": "PayPal", "icon": "images/uploads/logos/paypal.png", "enabled": 1, "order": 1, "in_use": true }, { "id": 2, "name": "Credit Card", "icon": "images/uploads/logos/creditcard.png", "enabled": 1, "order": 2, "in_use": true }, { "id": 3, "name": "Cash", "icon": "images/uploads/logos/cash.png", "enabled": 1, "order": 3, "in_use": false } ], "notes": [] } ``` ``` -------------------------------- ### Create a new branch for changes Source: https://github.com/ellite/wallos/blob/main/CONTRIBUTING.md Create a new branch for your feature or bug fix. Use a descriptive name for the branch. ```bash git checkout -b feature/your-feature-name ``` ```bash git checkout -b fix/your-bug-fix-name ``` -------------------------------- ### Clone the wallos repository Source: https://github.com/ellite/wallos/blob/main/CONTRIBUTING.md Clone the forked repository to your local machine. Replace with your GitHub username. ```bash git clone https://github.com//wallos.git cd wallos ``` -------------------------------- ### Cron Schedule for Recommendations Source: https://context7.com/ellite/wallos/llms.txt These cron jobs schedule the generation of recommendations on a weekly and monthly basis. They log output to a specified file. ```bash 30 3 * * 1 php /var/www/html/endpoints/cronjobs/generaterecommendations.php weekly >> /var/log/cron/generaterecommendations.log 2>&1 ``` ```bash 0 4 1 * * php /var/www/html/endpoints/cronjobs/generaterecommendations.php monthly >> /var/log/cron/generaterecommendations.log 2>&1 ``` -------------------------------- ### Run Wallos with Docker (Disable Healthcheck) Source: https://github.com/ellite/wallos/blob/main/README.md Deploy Wallos using Docker, disabling the healthcheck command. This can be useful for older Docker versions or to speed up initial startup reporting. ```bash docker run -d --name wallos -v /path/to/config/wallos/db:/var/www/html/db \ -v /path/to/config/wallos/logos:/var/www/html/images/uploads/logos \ -e TZ=Europe/Berlin -p 8282:80 --restart unless-stopped \ --health-cmd=NONE \ bellamy/wallos:latest ``` -------------------------------- ### POST /endpoints/ai/generate_recommendations.php Source: https://context7.com/ellite/wallos/llms.txt Sends active subscriptions to a configured AI provider to generate and store cost-saving recommendations. ```APIDOC ## POST /endpoints/ai/generate_recommendations.php — AI Cost-Saving Recommendations ### Description Sends the user's active subscriptions to a configured AI provider (ChatGPT, Gemini, Ollama, OpenRouter, or any OpenAI-compatible endpoint) and stores 3–7 cost-saving recommendations in the database. ### Method POST ### Endpoint /endpoints/ai/generate_recommendations.php ### Parameters #### Request Body This endpoint does not explicitly define request body parameters in the source. It is assumed to use the user's active subscriptions and AI configuration settings. ### Request Example ```bash # Example assuming active session and AI configuration are set curl -b "session_cookie=..." \ http://localhost:8282/endpoints/ai/generate_recommendations.php ``` ### Response #### Success Response (200) - The response structure for this endpoint is not detailed in the provided source. It is expected to return a success status and potentially information about the generated recommendations. ``` -------------------------------- ### Configure Cronjobs for Wallos Source: https://github.com/ellite/wallos/blob/main/README.md Set up scheduled tasks for Wallos to automate updates, notifications, and other background processes. Ensure the PHP executable path and log file locations are correct for your environment. ```bash 0 1 * * * php /var/www/html/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1 0 2 * * * php /var/www/html/endpoints/cronjobs/updateexchange.php >> /var/log/cron/updateexchange.log 2>&1 0 8 * * * php /var/www/html/endpoints/cronjobs/sendcancellationnotifications.php >> /var/log/cron/sendcancellationnotifications.log 2>&1 0 9 * * * php /var/www/html/endpoints/cronjobs/sendnotifications.php >> /var/log/cron/sendnotifications.log 2>&1 */2 * * * * php /var/www/html/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1 */2 * * * * php /var/www/html/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1 0 */6 * * * php /var/www/html/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1 30 1 * * 1 php /var/www/html/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1 30 3 * * 1 php /var/www/html/endpoints/cronjobs/generaterecommendations.php weekly >> /var/log/cron/generaterecommendations.log 2>&1 0 4 1 * * php /var/www/html/endpoints/cronjobs/generaterecommendations.php monthly >> /var/log/cron/generaterecommendations.log 2>&1 ``` -------------------------------- ### Trigger Monthly AI Recommendations Generation Source: https://context7.com/ellite/wallos/llms.txt This command triggers the generation of AI cost-saving recommendations on a monthly basis. AI settings must be configured in the UI. ```bash php /var/www/html/endpoints/cronjobs/generaterecommendations.php monthly ``` -------------------------------- ### Currencies Source: https://context7.com/ellite/wallos/llms.txt Returns all currencies configured for the user, their exchange rates relative to the main currency, and whether each currency is in use. ```APIDOC ## GET /api/currencies/get_currencies.php — Currencies ### Description Returns all currencies configured for the user, their exchange rates relative to the main currency, and whether each currency is in use. ### Method GET ### Endpoint /api/currencies/get_currencies.php ### Parameters #### Query Parameters - **api_key** (string) - Required - Your API key ### Response #### Success Response (200) - **success** (boolean) - Indicates if the request was successful. - **title** (string) - The title of the currencies section. - **main_currency** (integer) - The ID of the main currency. - **currencies** (array) - An array of currency objects. - **id** (integer) - The unique identifier for the currency. - **name** (string) - The name of the currency. - **symbol** (string) - The symbol of the currency. - **code** (string) - The ISO currency code. - **rate** (string) - The exchange rate relative to the main currency. - **in_use** (boolean) - Whether the currency is currently in use. - **notes** (array) - An array of notes or messages. ### Request Example ```bash curl "http://localhost:8282/api/currencies/get_currencies.php?api_key=YOUR_KEY" ``` ### Response Example ```json { "success": true, "title": "currencies", "main_currency": 3, "currencies": [ { "id": 1, "name": "US Dollar", "symbol": "$", "code": "USD", "rate": "1.1000", "in_use": true }, { "id": 2, "name": "Yen", "symbol": "¥", "code": "JPY", "rate": "150.00", "in_use": false }, { "id": 3, "name": "Euro", "symbol": "€", "code": "EUR", "rate": "1.0000", "in_use": true } ], "notes": [] } ``` ``` -------------------------------- ### Configure Wallos with Docker Compose Source: https://github.com/ellite/wallos/blob/main/README.md Define and run Wallos as a service using Docker Compose. This configuration specifies container name, image, port mapping, environment variables, and volume mounts for data persistence. ```yaml services: wallos: container_name: wallos image: bellamy/wallos:latest ports: - "8282:80/tcp" environment: TZ: 'America/Toronto' # Volumes store your data between container upgrades volumes: - './db:/var/www/html/db' - './logos:/var/www/html/images/uploads/logos' restart: unless-stopped ``` -------------------------------- ### Run updateexchange.php Cronjob Manually Source: https://context7.com/ellite/wallos/llms.txt This script refreshes currency exchange rates from external APIs. Run this command manually to execute the script immediately. ```bash php /var/www/html/endpoints/cronjobs/updateexchange.php ``` -------------------------------- ### Trigger AI Recommendations from Browser UI Source: https://context7.com/ellite/wallos/llms.txt This command triggers AI cost-saving recommendations. Ensure you have an active session and AI settings configured. Replace 'TOKEN' with your actual CSRF token. ```bash curl -b "session_cookie=..." \ http://localhost:8282/endpoints/ai/generate_recommendations.php \ -X POST -d "csrf_token=TOKEN" ``` -------------------------------- ### Schedule storetotalyearlycost.php Cronjob Source: https://context7.com/ellite/wallos/llms.txt This cronjob is scheduled to run weekly on Monday at 1:30 AM to store yearly cost snapshots. Output is logged to `/var/log/cron/storetotalyearlycost.log`. ```bash 30 1 * * 1 php /var/www/html/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1 ``` -------------------------------- ### Docker Compose Deployment for Wallos Source: https://context7.com/ellite/wallos/llms.txt Use this Docker Compose configuration to deploy Wallos. Ensure volumes are correctly mapped for persistent data. ```yaml # docker-compose.yaml services: wallos: container_name: wallos image: bellamy/wallos:latest ports: - "8282:80/tcp" environment: TZ: 'America/Toronto' volumes: - './db:/var/www/html/db' - './logos:/var/www/html/images/uploads/logos' restart: unless-stopped ```