Welcome. This page is a practical, task‑oriented guide to running your hotel on Aries PMS. It maps directly to this application’s modules and screens: Reservations, Guests, Rooms, Housekeeping, Billing, Reports, Admin, Front Desk operations, Key Cards, and Messaging.
Tip: You must be assigned to a hotel to access most features. If you see limited data, ask an admin to assign a hotel to your user.
Technical: Authentication uses signed JWT stored in an httpOnly cookie named access_token.
Back‑end: pms_reservations.py creates records; room availability computed via pms_rooms.search_rooms_with_availability.
Due check‑outs and currently checked‑in guests are available via pms_front_desk helpers and surfaces on the dashboard.
Select a guest when creating a reservation or search and attach afterwards. Guest data auto‑fills contact info for confirmations and billing.
Technical: points and status updates are handled server‑side; manual database edits are not required.
Back‑end: pms_rooms.py for inventory and availability queries.
Back‑end: pms_housekeeping.py. A test utility exists at tools/test_hk_sync.py.
UI: billing.html and billing_print.html. Back‑end: pms_billing.py; routes in src/routes/billing_routes.py.
Stored per hotel in hotels.vat_config. The summary groups charges by mapped VAT rate and displays normalized percentages.
Payments are stored in the payments table with method and timestamp; folio status flips to PAID once total ≤ sum of payments.
GET /api/reports?report_type=MEAL_PLANS&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
GET /api/reports/export?report_type=MEAL_PLANS&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD
Implemented in src/routes/rms_routes.py using pms_rms_integration.get_combined_report; hotel selection via get_all_hotels(). Aliases accepted for meal plans: MEALS, MEAL, MEAL_PLAN, MEALPLANS.
Shows per-day counts of guests on Breakfast or Half-board and configured per-person amounts/currency for each date. CSV columns: date, breakfast_count, breakfast_amount, breakfast_currency, half_board_count, half_board_amount, half_board_currency.
Meals Checklist: A printable list for the restaurant at /meals-list with hotel and date filters. Also accessible from the Meal Plans report via the “Meals Checklist” button.
Template: admin.html; Back‑end: pms_hotels.py for hotel and categories.
Aries PMS includes a privacy‑first, one‑click Guest Online Check‑In flow. Guests receive a secure, one‑time link and can confirm their check‑in before arrival. Links are valid until the end of the arrival day and become unusable after completion. Tokens are stored as bcrypt hashes in the database.
.env:
SMTP_SERVER, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD, SMTP_USE_TLS, SMTP_FROM, SMTP_FROM_NAME.From the Admin UI:
From the CLI (automation/cron):
python tools/send_online_checkin_emails.py \
--days-before 2 \
--hotel-id YOUR_HOTEL_ID \
--base-url https://pms.your-domain.com [--limit 100] [--dry-run]
Script applies the same eligibility rules as the Admin action.
CONFIRMEDONLINE_CHECKIN entitlement/online-checkin?token=....pms_reservations.create_or_refresh_online_checkin_token() stores a token id, a bcrypt hash of the secret, and an expires_at set to end of arrival day.pms_reservations.validate_online_checkin_token() checks status, completion flag, expiry, and verifies the hash.pms_reservations.mark_online_checkin_completed() sets online_checkin_completed_at = NOW() and clears token fields.get_hotel_smtp_settings) with global .env fallback.PUBLIC_BASE_URL (or APP_BASE_URL/PMS_BASE_URL) when present; otherwise request base URL.reservations.online_checkin_email_sent_at and reservations.online_checkin_completed_at.Note: Housekeeping report restriction is enforced in the UI (dropdown shows only Meal Plans) and in the API (/api/reports, /api/reports/export return 403 for other types).
Email is the login username. Passwords are stored securely (hashed). Consider using strong passphrases.
MANAGER and STAFF are mapped to FRONT_DESK..env SMTP variables are set.CONFIRMED for the selected arrival date.--dry-run to see candidates.PUBLIC_BASE_URL in .env for production behind proxies).reservations.online_checkin_completed_at (database field).For deeper technical details, see docs/pms_documentation.md included in this project.
Configure a connection to rms.aries-software.net to pull Final Rates into PMS. Rates are stored in
category_daily_rates and mapped to your hotel's Standard room category
(we pick the first category whose name starts with "Standard"; otherwise the first category).
https://rms.aries-software.net),
RMS Hotel ID, and API Key (header X-API-Key)./api/v1/hotels/{rms_hotel_id}/final-rates?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD.POST /api/rms/final-rates/import with the selected room_category_id, which proxies to RMS
/api/v1/hotels/{rms_hotel_id}/room-categories/final-rates?start_date=YYYY-MM-DD&end_date=YYYY-MM-DD&room_category_id=ID.category_daily_rates for the selected category. The table updates after import.curl -sS -D - \
-H "X-API-Key: YOUR_RMS_API_KEY" \
"https://rms.aries-software.net/api/v1/hotels/YOUR_RMS_HOTEL_ID/final-rates?start_date=2025-09-21&end_date=2025-09-30" | head -n 20
See also: docs/troubleshooting_rms.md for connectivity tips.
Aries PMS now exposes a Channel Manager API for connected partners to read availability and rates, and to create reservations. Access is gated: only hotels that purchased the CM_API module can use it, and API calls must include a valid API key with required scopes.
Authorization: Bearer <key_id>:<secret>cm:inventory:read – GET availabilitycm:rates:read – GET rates and POST quotecm:reservations:write – POST reservationsGET /api/cm/v1/hotels/{hotel_id}/availability?start=YYYY-MM-DD&end=YYYY-MM-DD&mode=count|grid
curl -s \
-H "Authorization: Bearer <key_id>:<secret>" \
"http://localhost:8000/api/cm/v1/hotels/1/availability?start=2025-10-01&end=2025-10-03&mode=count"
GET /api/cm/v1/hotels/{hotel_id}/rates?start=YYYY-MM-DD&end=YYYY-MM-DD[&room_category_id=ID]
# Default (maps to Standard category)
curl -s \
-H "Authorization: Bearer <key_id>:<secret>" \
"http://localhost:8000/api/cm/v1/hotels/1/rates?start=2025-10-01&end=2025-10-03"
# Per-category (imports from RMS and returns that category's rates)
curl -s \
-H "Authorization: Bearer <key_id>:<secret>" \
"http://localhost:8000/api/cm/v1/hotels/1/rates?start=2025-10-01&end=2025-10-03&room_category_id=2"
If room_category_id is provided, PMS calls RMS /room-categories/final-rates for that category, upserts results into category_daily_rates, and returns them. Missing or invalid RMS responses return HTTP 502.
POST /api/cm/v1/hotels/{hotel_id}/quote
curl -s -X POST \
-H "Authorization: Bearer <key_id>:<secret>" \
-H "Content-Type: application/json" \
-d '{
"stay": {"check_in_date": "2025-10-01", "check_out_date": "2025-10-03", "adults": 2, "children": 1},
"room_category_id": 2,
"meal_plan": "BREAKFAST"
}' \
"http://localhost:8000/api/cm/v1/hotels/1/quote"
Returns nightly breakdown (base, extra‑guest surcharges, meal plan), VAT per item (based on hotel VAT config), currency, and totals. If any rate dates are missing, responds with HTTP 409 and a list of missing_rate_dates.
POST /api/cm/v1/hotels/{hotel_id}/reservations
curl -s -X POST \
-H "Authorization: Bearer <key_id>:<secret>" \
-H "Content-Type: application/json" \
-d '{
"guest": {"first_name": "API", "last_name": "Tester", "email": null, "phone": null},
"stay": {"check_in_date": "2025-10-01", "check_out_date": "2025-10-03", "adults": 2, "children": 0},
"special_requests": "Quiet room",
"preferred_room_id": null,
"client_reference": "ext-12345",
"agreed_total_amount": 218.00,
"currency": "EUR",
"meal_plan": "BREAKFAST",
"nightly_breakdown": [
{"date": "2025-10-01", "base": 100.00, "extra_guest": 18.00, "meal": 0.00},
{"date": "2025-10-02", "base": 100.00, "extra_guest": 0.00, "meal": 0.00}
],
"create_folio": true
}' \
"http://localhost:8000/api/cm/v1/hotels/1/reservations"
Idempotency (best‑effort): posting the same guest + dates again may return the existing reservation. If create_folio is true, PMS will create an OPEN folio and add nightly ROOM/MEAL items from your breakdown (or use agreed_total_amount if no breakdown is provided).
Authorization example directly in your API client.ARIES_SKIP_DB_INIT=1 python tools/test_cm_api_readonly.pyARIES_SKIP_DB_INIT=1 python tools/test_cm_api_write.pypython tools/seed_cm_api_key.py --hotel-id <ID>CM_API) for the property. Keys are hotel-bound and rate-limited.
See also: IBE Integration Guide.
Last updated: 2025-12-14
If you have other problems or questions, create a support ticket here.