Settings Reference
Complete reference for every settings page in ISP-OS. Access settings from the sidebar under Settings.
General
Controls your ISP's identity and branding across the platform, subscriber-facing pages, and notifications.
| Field | Description | Default | Constraints |
|---|---|---|---|
| ISP Name | Your business name, shown in the dashboard header and invoices | -- | Required. 2-100 characters |
| Network Identifier | URL-safe slug used in API routes and subscriber portal URLs | Auto-generated from ISP Name | Required. Lowercase letters, numbers, hyphens only. Unique across all tenants. Cannot be changed after first subscriber is created |
| Logo | Square logo displayed in the sidebar, invoices, and payment portal | ISP-OS placeholder | PNG or SVG. Max 2 MB. Minimum 128x128 px |
| Brand Color | Primary accent color used in the dashboard and subscriber-facing pages | #18181b (zinc-950) | Valid hex color code |
| SMS Sender ID | The sender name shown on outgoing SMS notifications | ISP-OS | Max 11 characters. Alphanumeric only. Must be registered with your SMS provider (iSMS) |

Billing
Controls invoice generation timing, payment terms, and auto-suspend behavior.
| Field | Description | Default | Constraints |
|---|---|---|---|
| Invoice Generation Day | Day of the month when invoices are generated for postpaid subscribers | 1 | 1-28. Days 29-31 are not allowed to avoid month-length issues |
| Payment Terms (Days) | Number of days after invoice generation before the invoice is due | 15 | 1-60 |
| Grace Period (Days) | Number of days after the due date before auto-suspend triggers | 5 | 0-30. Overridden per-tenant by collection policy suspend_days_after_due if set |
| Auto-Suspend | When enabled, subscribers with unpaid invoices past the grace period are automatically suspended via RADIUS and PPPoE session kick | Enabled | Toggle on/off. When disabled, overdue invoices still transition to Overdue status but no service interruption occurs |
| Currency | Display currency for all invoices and payment pages | PHP | Read-only. All amounts stored internally as centavos (integer) |
Billing type behavior
| Billing Type | Invoice Timing | Service Access |
|---|---|---|
| Postpaid | Invoice generated after the start of the billing period | Service active from day 1; payment expected by due date |
| Prepaid | Invoice generated before the billing period | Service activates on payment; suspends if unpaid before period starts |
Collections
Configures the automated collections pipeline timing. These values determine when reminders, warnings, and suspensions occur relative to an invoice's due date.
| Field | Description | Default | Constraints |
|---|---|---|---|
| Reminder Days Before Due | Days before the due date to send the first reminder notification | 3 | 1-30. Must be less than Payment Terms |
| Warning Days After Due | Days after the due date to send an overdue warning | 1 | 1-30. Must be less than Suspend Days After Due |
| Suspend Days After Due | Days after the due date to auto-suspend service | 5 | 1-60. Must be greater than Warning Days After Due. This value is also used as the invoice grace period |
| Suspend Schedule Time | Time of day (Manila timezone) when the daily auto-suspend job runs | 06:00 | 24-hour format. Recommended early morning to minimize subscriber impact |
| Notification Channels | Which channels to use for collection notifications | SMS + Email | At least one channel must be enabled |
Aged debt settings
| Field | Description | Default | Constraints |
|---|---|---|---|
| Allow Partial on Aged Debt | Accept partial payments on invoices 30+ days overdue | Enabled | Toggle on/off |
| Uncollectible Threshold (Days) | Days after due date before suggesting an invoice as uncollectible (bad debt) | 90 | 30-365 |
Collections timeline example
With default settings:
Day -3 Reminder SMS + email
Day 0 Invoice due date
Day +1 Overdue warning SMS + email
Day +5 Auto-suspend (PPPoE session kicked, RADIUS rejects re-auth)
Day +90 Flagged as likely uncollectible
Notification Templates
Manage the message templates sent at each stage of the collections pipeline. Separate templates exist for SMS and email on each stage.
Notification stages
| Stage | Trigger | Purpose |
|---|---|---|
| Reminder | due_date - remind_days | Friendly heads-up before the bill is due |
| Warning | due_date + warn_days | Urgent notice that the invoice is overdue |
| Suspension | At suspend time | Final notice that service has been disconnected |
| Restoration | On payment received | Confirmation that payment was received and service restored |
Template variables
Use these placeholders in SMS and email templates. Variables are replaced with actual values at send time.
| Variable | Description | Example Value |
|---|---|---|
{subscriber_name} | Subscriber's full name | Maria Santos |
{first_name} | Subscriber's first name | Maria |
{amount} | Outstanding balance formatted with peso sign | P800.00 |
{due_date} | Invoice due date | January 15, 2026 |
{suspend_date} | Date when service will be / was suspended | January 20, 2026 |
{payment_link} | Short URL to subscriber's payment portal | https://pay.isp-os.app/c/abc123def456 |
{plan_name} | Subscriber's current plan name | Fiber 50Mbps |
{isp_name} | Your ISP business name | SurfNet PH |
{invoice_number} | Invoice reference number | INV-2026-0042 |
Template constraints
| Channel | Max Length | Format |
|---|---|---|
| SMS | 160 characters (single segment) | Plain text only. No HTML |
| No limit | HTML supported. Subject line max 100 characters |
Deduplication
Notifications are deduplicated per invoice, per event type, per channel within a 24-hour window. If an SMS was sent but the email failed, only the email retries on the next cycle.

Users
Manage your team members and their access to the ISP-OS dashboard.
Team member list
The Users page displays all team members with their name, email, role, and invitation status.
| Column | Description |
|---|---|
| Name | Team member's full name |
| Login email address | |
| Role | Owner, Admin, Staff, or Technician |
| Status | Active, Invited (pending acceptance), or Disabled |
| Last Active | Timestamp of last dashboard login |
Roles
| Role | Description | Permissions |
|---|---|---|
| Owner | Tenant owner role | Full access, including assigning admins and preventing the tenant from losing its last owner |
| Admin | Full operational access without ownership controls | Configure settings, manage team members at the staff/technician level, view billing, manage NAS devices, access reports |
| Staff | Billing and subscriber operations | Create/edit subscribers, record payments, view billing, view reports |
| Technician | Network and service operations | Manage NAS devices, update service state, troubleshoot subscriber connectivity without billing access |
Invite management
Team members are added by email invitation from the Users page.
| Method | How It Works |
|---|---|
| Email invite | Enter one or more email addresses and assign a role. Each person receives a single-use sign-up link tied to your tenant. Expiry defaults to 48 hours and can be adjusted via invite_expiry_hours |
Pending invitations can be revoked from the Users page. Revoking an invite invalidates the sign-up link immediately.
Constraints
- Each tenant must have at least one Owner. The last Owner cannot be downgraded or removed.
- Email addresses must be unique across the platform. A person cannot belong to multiple tenants with the same email.
- Admins can invite or manage
StaffandTechnicianroles, but only Owners can assignAdminorOwner. - Disabled users cannot log in but their audit trail is preserved.
