# How to use Admin Area in PUQcloud Panel



# Manage Dashboard

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

[![image-1753710908068.png](https://doc.puq.info/uploads/images/gallery/2025-07/scaled-1680-/image-1753710908068.png)](https://doc.puq.info/uploads/images/gallery/2025-07/image-1753710908068.png)

On the PUQcloud dashboard, you can see basic information such as:

- **Task Queue** – Live information about all task statuses, including Queued, Pending, Completed, Failed, Processing, and Duplicate.
- **Automation Status** – Information about Cron and Horizon statuses.
- **PUQcloud Info** – General information about the panel.
- **Staff Online** – A list of currently online staff members.

You can also manage the widgets on the dashboard.

Click the **gear icon** in the bottom-left corner.

[![image-1753710950523.png](https://doc.puq.info/uploads/images/gallery/2025-07/scaled-1680-/image-1753710950523.png)](https://doc.puq.info/uploads/images/gallery/2025-07/image-1753710950523.png)

Toggle widgets on or off as needed.

[![image-1753710972384.png](https://doc.puq.info/uploads/images/gallery/2025-07/scaled-1680-/image-1753710972384.png)](https://doc.puq.info/uploads/images/gallery/2025-07/image-1753710972384.png)

You can also rearrange any widget by simply dragging it to your preferred location.

[![image-1753710999691.png](https://doc.puq.info/uploads/images/gallery/2025-07/scaled-1680-/image-1753710999691.png)](https://doc.puq.info/uploads/images/gallery/2025-07/image-1753710999691.png)

# Create and manage Clients

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

This guide shows administrators how to create new clients and manage existing ones in **PUQcloud Panel**. You’ll learn where to find client records, how to add a client, attach users and addresses, and how to handle services, invoices, and transactions.

- - - - - -

#### Key Features

- Centralized **client directory** with search, sort, and status badges.
- Full **client profile**: personal/company info, language, currency, tax ID, credit limit, admin notes.
- **Addresses management**: billing/shipping, multiple entries, default flags.
- **Users &amp; permissions**: associate users to the client and grant granular rights.
- **Services lifecycle**: add, view status (ACTIVE/COMPLETED/ERROR), open product actions.
- **Finance tools**: create invoices and manual transactions for charges/credits.

- - - - - -

#### Before You Begin

- You must be logged in as an administrator.
- Ensure you know your **home company** tax settings and available **products &amp; prices**.

- - - - - -

#### Navigation

**Menu → Clients → Manage Clients** opens the client directory with columns for Owner, Client, Status, Located, Created, and Balance.  
(*screenshot: View/Search Clients list*)

[![image-1756821414730.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821414730.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821414730.png)

- - - - - -

#### Create a New Client

1. Click **+ Create** (top-right on the client list).
2. Fill the **Client/User Information** fields:
    
    
    - **Email** and **Password**
    - **Firstname**, **Lastname**
    - **Company Name** (optional for individuals)
    - **Tax ID** (if applicable)
    - **Phone Number** (with country code)
    - **Language**, **Currency**
    - **Status** (New/Active/etc.)
3. Fill the **Billing Address**: **Address 1/2**, **City**, **Postcode**, **Country**, **State/Region**.
4. Click **Save**.

*(screenshot: Create a New Client form)*

[![image-1756821469578.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821469578.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821469578.png)

- - - - - -

##### Tips

- **Language** affects the UI for the client’s users.
- **Currency** determines invoice currency defaults.
- Use an accurate **Tax ID** (e.g., GST/HST/QST/VAT formats) for correct tax handling.

- - - - - -

#### Client Record – Tabs &amp; What They Do

After saving, you’ll land on the client’s page with these tabs: **Summary, Profile, Users, Services, Invoices, Transactions**.

#### Summary

- Quick view of **Client Finance** (Balance, Credit Limit, VIES/Tax status) and **Client Information** (name, company, email, language, main address, created at).
- **Actions** card: **Login as Owner**.

*screenshot: Client → Summary tab*

[![image-1756821511780.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821511780.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821511780.png)

#### Profile

- Update **Firstname/Lastname**, **Company**, **Tax ID**, **Status**, **Language**, **Currency**, **Credit Limit**, **Admin Notes**.
- Right side shows the **Addresses** table with labels like **Default (billing)** or **shipping**; use the yellow **Edit** and red **Delete** buttons.
- Click **+ Create Address** to add a new address.

*(screenshot: Client → Profile tab)*

[![image-1756821640060.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821640060.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821640060.png)

*(screenshot: Create Address modal (Type, Name, Contact, Phone, Email, Address, Country, State/Region))*

[![image-1756821648483.1.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821648483-1.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821648483-1.png)

**Address Types**

- Billing (used on invoices)
- Shipping (for service deliveries/records)

#### Users

- See associated users, 2FA status, contact info, and created date.
- Click **+ Associate User** to link an existing user account.
- Choose **Permissions** such as: *Modify Master Account Profile, Manage Users, Manage Services, Manage Domains,* etc.
- Use **Edit/Delete** to maintain user links.

*(Screenshot: Client → Users tab)*

[![image-1756821867750.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821867750.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821867750.png)

(S*creenshot: Associate User modal with permissions list)*

[![image-1756821872822.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821872822.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821872822.png)

- - - - - -

#### Services

- View all services with **status badges** (e.g., ACTIVE, COMPLETED, ERROR).
- See **Order Date**, **Activation Date**, and **Price**.
- Click **+ Add Service** to provision a product for this client:
    
    
    1. Select **Product**
    2. Choose **Price** (e.g., *Monthly – 20.00 USD*)
    3. Click **Save**

*(Screenshot: Services list)*

[![image-1756821926349.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821926349.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821926349.png)

*(Screenshot: Create New Service form)*

[![image-1756821932889.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821932889.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821932889.png)

- - - - - -

#### Invoices

- List shows **Type** (PROFORMA/INVOICE/CREDIT NOTE), **Number**, **Issue/Due/Paid Dates**, **Total**, **Status** (UNPAID/PAID/INVOICED/REFUNDED), and **Home Company**.
- **Create Add Funds Proforma Invoice**: opens a modal where you set **Net Amount** to top up client funds.

*(Screenshot: Invoices list)*

[![image-1756821981739.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821981739.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821981739.png)

(S*creenshot: Create Add Funds Proforma Invoice modal)*

[![image-1756821985915.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756821985915.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756821985915.png)

- - - - - -

#### Transactions

- Ledger of **Gross**, **Net**, **Balance**, **Description** (usually linked to a service), **Period**, and **Date**.
- Click **Create** to add a manual transaction (charge or credit): set **Amount**, **Transaction ID** (optional), and **Description**, then **Save**.

*(Screenshot: Transactions list)*

[![image-1756822016682.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756822016682.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756822016682.png)

(S*creenshot: Transactions → Create modal)*

[![image-1756822022568.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756822022568.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756822022568.png)

- - - - - -

#### Search, Filter, and Sort Clients

- Use the **Search** box on the client list to filter by name, email, or company.
- Click column headers to **sort** (e.g., by Created date or Balance).
- Status badges (**NEW**, **ACTIVE**) help you visually triage records.

- - - - - -

#### Editing &amp; Lifecycle

- Change **Status** (e.g., New → Active) from the **Profile** tab.
- Update **Tax ID** or **Language/Currency** any time; new settings apply to future invoices.
- Maintain **Credit Limit** to control spending and alerting.
- Keep **Admin Notes** for internal context (billing agreements, support history, etc.).

- - - - - -

#### Best Practices

- Keep **addresses** current—billing address prints on invoices.
- Use **Users &amp; permissions** to grant least-privilege access.
- Prefer **Add Funds Proforma** for prepayments; reconcile via **Transactions**.
- Review **Services** after order to confirm status (look for **ERROR** badges and fix product-side issues).

- - - - - -

#### Troubleshooting

- **Invoice in wrong currency** → Check client **Currency** in Profile before creating invoices.
- **Taxes not applying as expected** → Verify **Home Company** tax rules and client **Tax ID**.
- **User cannot see services** → Revisit **Users** → permissions (grant *Manage Services*).
- **Provisioning error** on service → Open service details and review the last error note; re-run or fix product configuration.

- - - - - -

#### Shortcuts

- **Clients → Manage Clients**: quick search and open profile.
- On **Summary**, use **Login as Owner** to replicate the customer view for support.

- - - - - -

#### You’re done!

You can now add clients, attach their users and addresses, create services, and manage billing—everything from one place in **PUQcloud Panel**.

# Create and manage users

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

This guide explains how administrators can create users, view their client associations, edit details, and remove users in **PUQcloud Panel**.

- - - - - -

#### Overview

- **Path:** **Menu → Clients → Manage Users**
- **You can:**
    
    
    - Create a new **User** (login identity).
    - View a user’s **associated clients** and statuses.
    - **Edit** contact info, language, verification flags, and 2FA.
    - **Delete** a user account.
- **Who:** Staff with permission to manage users.

<p class="callout info">**Tip:** A **User** is a person’s login. A **Client** is an account/business they belong to. One user can be associated with multiple clients (e.g., consultant, owner). Permissions are managed from the **Client → Users** tab.</p>

- - - - - -

#### List View (Manage Users)

In the table you’ll see: avatar, name, status badges (e.g., **ACTIVE**, **INACTIVE**, **NEW**), **2FA** indicator, contact details (email, phone), **Clients** counter with an **eye** button, **Created** date, and row actions (**Edit**, **Delete**). Use **Search** to filter.

*(Screenshot: View/Search Users list view)*

[![image-1756900409222.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756900409222.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756900409222.png)

- - - - - -

#### Create a User

1. Go to **Clients → Manage Users** and click **+ Create**.   
    *(Screenshot: Create User modal)*
    
    [![image-1756900425343.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756900425343.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756900425343.png)
2. Fill the fields:
    
    
    - **Email** *(required)*
    - **Password** *(required)*
    - **2FA** *(toggle; optional but recommended)*
    - **Firstname**, **Lastname**
    - **Phone Number** *(with country code)*
    - **Language** *(UI language for the user)*
    - **Admin Notes** *(internal only)*
3. Click **Save**. The user appears in the list.

<p class="callout info">**Next step:** Associate this user with a client from **Clients → Manage Clients → open a client → Users tab → + Associate User** (choose permissions there).</p>

- - - - - -

#### View a User’s Clients

1. In **Manage Users**, find the user.
2. Click the **eye** icon in the **Clients** column.
3. In **User Clients** modal, review:
    
    
    - **User Information:** UUID, Name, Email, Phone.
    - **Associated Clients:** Client Name, Company Name, Tax ID, and **Status** badges (e.g., **ACTIVE**, **OWNER**).
4. Close when done.

*(Screenshot: User Clients modal)*

[![image-1756900477431.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756900477431.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756900477431.png)

- - - - - -

#### Edit a User

1. In **Manage Users**, click the **Edit** (pencil) icon on the desired row.   
    *(Screenshot: Edit User modal)*
    
    [![image-1756900500443.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756900500443.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756900500443.png)
2. Update fields:
    
    
    - **Email**, **Password** (to reset), **Firstname**, **Lastname**
    - **Phone Number**, **Language**, **Admin Notes**
    - Verification toggles: **Email Verified**, **Phone Verified**
    - Security toggle: **2FA** (enable/disable)
3. Click **Save**.

- - - - - -

#### Delete a User

1. In **Manage Users**, click the **Delete** (trash) icon.
2. Confirm the action.

- - - - - -

#### Field Reference

<table id="bkmrk-field-where-descript"><thead><tr><th>Field</th><th>Where</th><th>Description</th></tr></thead><tbody><tr><td>Email</td><td>Create/Edit</td><td>User’s login email. Must be unique.</td></tr><tr><td>Password</td><td>Create/Edit</td><td>Set/reset the user’s password.</td></tr><tr><td>2FA</td><td>Create/Edit</td><td>Turn on two‑factor authentication for extra security.</td></tr><tr><td>Firstname / Lastname</td><td>Create/Edit</td><td>User’s display name.</td></tr><tr><td>Phone Number</td><td>Create/Edit</td><td>Stored with international country code.</td></tr><tr><td>Language</td><td>Create/Edit</td><td>UI language for this user.</td></tr><tr><td>Admin Notes</td><td>Create/Edit</td><td>Internal notes visible to admins only.</td></tr><tr><td>Email Verified</td><td>Edit</td><td>Mark whether the email has been verified.</td></tr><tr><td>Phone Verified</td><td>Edit</td><td>Mark whether the phone has been verified.</td></tr></tbody></table>

- - - - - -

#### Good Practices

- Require **strong passwords** and **2FA** for staff.
- Keep **contact info** and **language** up to date.
- Use **Admin Notes** to capture context (e.g., who requested access, ticket link).
- Manage access at **Client → Users** (set granular permissions per client).

- - - - - -

#### Troubleshooting

- **Cannot log in** → Reset **Password**; ensure **Email Verified** is On; check if the user is **ACTIVE**.
- **User can’t see a client** → Associate them in **Client → Users**, verify **status** and **permissions**.
- **2FA lockout** → Temporarily disable **2FA** in **Edit**, then re‑enroll.
- **Duplicate email** → Each user must have a unique email; rename or remove old account.

# Transactions Page

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

[![image-1756900598141.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756900598141.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756900598141.png)

#### 1. Open Transactions View

- From the left-side menu, go to:  
    **Finance → Transactions**

#### 2. Understand the Columns

Each transaction row includes the following:

<div id="bkmrk-column-description-c"><div><table class="w-fit min-w-(--thread-content-width)" data-end="947" data-start="338"><thead data-end="371" data-start="338"><tr data-end="371" data-start="338"><th data-col-size="sm" data-end="356" data-start="338">Column</th><th data-col-size="md" data-end="371" data-start="356">Description</th></tr></thead><tbody data-end="947" data-start="406"><tr data-end="483" data-start="406"><td data-col-size="sm" data-end="424" data-start="406">**Client**</td><td data-col-size="md" data-end="483" data-start="424">The name of the client associated with the transaction.</td></tr><tr data-end="592" data-start="484"><td data-col-size="sm" data-end="505" data-start="484">**Transaction ID**</td><td data-col-size="md" data-end="592" data-start="505">Displays the transaction type (e.g. CHARGE) and a unique ID or "No Transaction ID".</td></tr><tr data-end="657" data-start="593"><td data-col-size="sm" data-end="611" data-start="593">**Gross / Net**</td><td data-col-size="md" data-end="657" data-start="611">Amount before and after fees or discounts.</td></tr><tr data-end="731" data-start="658"><td data-col-size="sm" data-end="676" data-start="658">**Balance**</td><td data-col-size="md" data-end="731" data-start="676">The client’s account balance after the transaction.</td></tr><tr data-end="808" data-start="732"><td data-col-size="sm" data-end="750" data-start="732">**Description**</td><td data-col-size="md" data-end="808" data-start="750">Contains a reference to the service and billing logic.</td></tr><tr data-end="871" data-start="809"><td data-col-size="sm" data-end="827" data-start="809">**Period**</td><td data-col-size="md" data-end="871" data-start="827">Time range for which the charge applies.</td></tr><tr data-end="947" data-start="872"><td data-col-size="sm" data-end="890" data-start="872">**Date**</td><td data-col-size="md" data-end="947" data-start="890">The exact timestamp of when the transaction occurred.</td></tr></tbody></table>

<div><div></div></div></div></div>#### 3. Clickable Navigation

- 🔗 **Click on the Client name**  
    → You will be redirected to the **Client Summary page** of that user.
- 🔗 **Click on the link in the Description column**  
    → You will be redirected to the **specific Service page** within the client's profile that generated the transaction.

#### Notes:

- Transactions are displayed in real-time.
- You can search, filter, and track charges per hour, per service.
- Currency is shown per client’s preference (e.g., CAD, USD).

# Create and manage a Home Company

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

A **Home Company** is the legal entity that appears on your invoices, credit notes, emails, and payment pages (name, address, logo, tax IDs, etc.). You can keep one or many Home Companies and switch which one is **Default**.

**Path:** `Dashboard → Home Companies`

- - - - - -

#### 1) Create a Home Company

1. Go to **Menu → Finance → Home Companies**.  
    *(Screenshot: list view with “+ Create”)[![image-1756818634040.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818634040.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818634040.png)*
2. Click **+ Create**.  
    *(Screenshot: “Create” modal)[![image-1756818825973.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818825973.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818825973.png)*
3. Enter **Name** (internal name, e.g., “PUQ sp. z o.o.” or “North America”).
4. Click **Save**.  
    *(Screenshot: list shows new row)[![image-1756818655145.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818655145.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818655145.png)*

##### Tips

- The **green check** means “Default”. The **red dot** means “not default”.
- Use the **search** box to find companies quickly.

- - - - - -

#### 2) Edit a Home Company

1. In the list, click the **yellow edit** button on the row.  
    *(Screenshot: edit icon highlighted)[![image-1756818733003.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818733003.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818733003.png)*
2. You’ll open the **Home Company** editor with tabs:
    
    
    - **General**
    - **Images**
    - **Email Settings**
    - **Tax Settings**
    - **Invoice Settings**
    - **Proforma Template**
    - **Invoice Template**
    - **Credit Note Template**
    - **Payment Gateways**
3. After changes, click **Save** (top-right).

- - - - - -

#### 3) Fill out each tab

##### General

*(Screenshot: General tab)[![image-1756818744131.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818744131.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818744131.png)*

- **Name** — internal label (already set).
- **Company Name** — legal name shown on documents.
- **Address 1/2, Postcode, City, Country, State/Region** — printed on invoices/credit notes.
- **Default: Yes/No** — set this company as the **Default** sender across billing.
- Click **Save**.

##### Images

*(Screenshot: Images tab)*

[![image-1756818881868.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818881868.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818881868.png)

- Upload your **Logo** (drag &amp; drop or “Browse”).
- Use a transparent PNG for best results.
- Click **Save**.

##### Email Settings

*(Screenshot: Email Settings tab)[![image-1756818840426.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818840426.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818840426.png)*

- **Group** — choose the email group this company uses (for templates/routing).
- **Signature** — footer appended to outgoing emails (support info, legal note).
- Click **Save**.

##### Tax Settings

*(Screenshot: Tax Settings tab)*

[![image-1756818888015.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818888015.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818888015.png)

**European Tax Information**

- **Local Tax ID Name** / **Local Tax ID** (e.g., NIP, VAT, etc.)
- **EU VAT ID Name** / **EU VAT ID**
- **Registration Number Name** / **Registration Number**

**Country-Specific Tax Information**

- **United States:** **US EIN**, **US State Tax ID**, **US Entity Type**
- **Canada:** **CA Business Number**, **CA GST/HST Number**, **CA PST/QST Number**, **CA Entity Type**

**Tax Rates**

- **Tax 1/2/3 Name** and **Rate (%)** — define up to three stacked taxes.
- Click **Save**.

##### Invoice Settings

*(Screenshot: Invoice Settings tab)*

[![image-1756818896962.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818896962.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818896962.png)

**Numbering**

- **Proforma / Invoice / Credit Note Number Format** — use tokens such as `{YEAR}`, `{MONTH}`, `{DAY}`, `{NUMBER}`.
- **Next … Number** — starting counter (e.g., `1`).
- **… Number Reset** — how often to reset numbering (e.g., **Never**, yearly).

**Item Texts**

- **Balance Credit Purchase Item Name/Description** — wording shown when adding balance.
- **Refund Item Name/Description** — wording shown on credit/refunds.

**Customization**

- **PDF Font** (e.g., DejaVu Sans for multilingual).
- **Paper Size** (**A4** or **Letter**).
- **Pay To Text** — payment instructions.
- **Invoice Footer Text** — legal notes, company disclaimer.
- Click **Save**.

##### Proforma Template

[![image-1756818972382.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818972382.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818972382.png)

- Works like the Invoice/Credit Note Template editors below.
- Edit the HTML/Blade content; preview and **Save**.

##### Invoice Template

*(Screenshot: Invoice Template editor with live preview)*

[![image-1756818995388.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756818995388.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756818995388.png)

- Modes: **Combined**, **Code Mode**; Previews: **A4** / **Letter**.
- Left pane: template code (Blade + HTML/CSS).
- Right pane: **HTML Preview**.
- Variables available (examples):
    
    
    - `$invoice`, `$invoice->invoiceItems`, `$invoice->client`, `$invoice->homeCompany`, etc.
- Keep your styles simple for nice PDFs. **Save** after edits.

##### Credit Note Template

*(Screenshot: Credit Note Template editor with live preview)*

[![image-1756819003904.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819003904.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819003904.png)

- Same tools as Invoice Template; shows “Credit Note” preview.
- **Save** after edits.

##### Payment Gateways

*(Screenshot: Payment Gateways tab — empty table with **+ Create**)*

[![image-1756819018539.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819018539.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819018539.png)

**Add a Gateway**

1. Click **+ Create**.  
    *(Screenshot: Create Payment Gateway modal)*
    
    [![image-1756819028569.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819028569.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819028569.png)
2. Fill **Key** (internal ID, e.g., `stripe_main`).
3. Pick **Module**:
    
    
    - **PUQ Przelewy24 (active)**
    - **PUQ Stripe (active)**
    - **PUQ PayPal (active)**
    - **PUQ Bank Transfer (active)**
4. Click **Save**.

**Configure the Gateway**  
*(Screenshot: Payment Gateway detail form)*

[![image-1756819044196.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819044196.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819044196.png)

- **Key** — internal ID.
- **Currencies** — choose supported currencies.
- **Icon Image** — optional logo for checkout.
- Multilingual **Name** and **Description** (English / Ukrainian / Polish).
- Module fields (example: **Stripe**):
    
    
    - **WEB Hook URL** (paste into Stripe dashboard).
    - **Publishable Key**, **Secret Key**, **WEB Hook Secret**.
    - **Sandbox Mode** toggle + sandbox keys.
    - **Test Connection** — verify credentials.
- Click **Save**.

- - - - - -

#### 4) Make a company Default (or change it)

1. Open the company → **General** tab.
2. Toggle **Default** to **Yes**.
3. **Save**.  
    The Default Home Company will be used on new billing documents unless a module or workflow specifies otherwise.

- - - - - -

#### 5) Manage the list

- **Edit** (yellow pencil) — change details.
- **Delete** (red trash) — remove a company you no longer need.
    
    
    - Tip: do not delete a company that still appears on historical invoices.
- **Search** — filter by name.

- - - - - -

#### Best Practices

- **Numbering:** include `{YEAR}` in formats to avoid duplicates across years (e.g., `INV-{YEAR}-{NUMBER}`).
- **Logos:** upload a high-resolution PNG with transparent background.
- **Taxes:** set the correct country section (US or CA) and fill local VAT/GST fields to keep invoices compliant.
- **Backups:** before editing templates, export or copy the current code.

#### Troubleshooting

- **Gateway test fails:** recheck the keys, ensure you used the **live** or **sandbox** pair to match the **Sandbox Mode** setting.
- **Wrong logo/text on documents:** verify you edited the correct **Home Company** and that it’s set as **Default**.
- **Numbers jumping:** confirm the **Next … Number** and the **Reset** policy; avoid changing formats mid-year.

# Create and manage Tax Rules

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

This guide shows you how to set up and maintain **Tax Rules** for different countries and regions in the **PUQcloud Panel**. Use these rules to automatically apply the correct taxes on invoices based on the client type and location.

- - - - - -

#### Overview

- **Where:** **Menu → Finance → Tax Rules**
- **What you can do:** Create rules, generate presets for Canada/EU, edit, delete, and change the order of rules.
- **Who can do it:** Administrators with access to the Finance area.

<p class="callout info">**How matching works**  
The system reads rules **from top to bottom**. The **first matching rule** is applied. Keep your most specific rules (e.g., province/state) **above** more general ones.</p>

- - - - - -

#### Before You Start

1. Make sure you have at least one **Home Company** configured (Settings → Finance → Home Companies).
2. Know your target **tax rates** (GST/HST/PST/VAT, etc.).
3. Decide which **client types** the rule should apply to:
    
    
    - **Private Client** (individual)
    - **Company Without TAX ID**
    - **Company With TAX ID**

<p class="callout info">Always verify rates with your accountant or the official tax authority.</p>

- - - - - -

#### Quick Start: Generate Preset Rules

You can auto-create a starting set of rules and then fine‑tune them.

##### Create Canadian Rules

1. Go to **Finance → Tax Rules**.
2. Click **Create Canadian Rules**.
3. Select your **Home Company** and **Save**.
4. Review the generated rules and adjust rates as needed.

*(Screenshot reference: “Create Canadian Rules” modal)*

[![image-1756819758460.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819758460.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819758460.png)

##### Create EU Rules

1. Go to **Finance → Tax Rules**.
2. Click **Create EU Rules**.
3. Select your **Home Company** and **Save**.
4. Review the generated rules and adjust rates as needed.

*(Screenshot reference: “Create EU Rules” modal)*

[![image-1756819763523.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819763523.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819763523.png)

<p class="callout info">**Note:** Presets are a convenience. You are responsible for validating the final rates.</p>

- - - - - -

#### Create a Tax Rule Manually

1. Open **Finance → Tax Rules**. *(See: List view)*
    
    [![image-1756819775855.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819775855.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819775855.png)
2. Click **Create**. *(See: “Create” modal)*
    
    [![image-1756819780375.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819780375.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819780375.png)
3. Fill the fields:
    
    
    - **Country** and **State/Region** (optional).
    - Turn on the client‑type toggles the rule should apply to:  
        **Private Client**, **Company Without TAX ID**, **Company With TAX ID**.  
        (Use **Individual TAX Rate** if the rule should tax individuals.)
    - Enter up to **three taxes** (name + percent). Example:
        
        
        - *Tax 1 Name:* `VAT` — *Tax 1 Rate:* `23.000`
        - *Tax 2 Name:* `PST` — *Tax 2 Rate:* `7.000` (if applicable)
        - *Tax 3 Name:* `GST` — *Tax 3 Rate:* `5.000` (if applicable)
    - Choose **Home Company**.
4. Click **Save**. Your rule appears in the list. *(See: List after creating a rule)*
    
    [![image-1756819804598.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819804598.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819804598.png)

- - - - - -

#### Edit a Rule

1. In **Finance → Tax Rules**, click the **Edit** icon on the desired row.
2. Change any fields (country/region, toggles, tax names/rates, home company).
3. Click **Save**.

*(Screenshot reference: “Edit” modal)*

[![image-1756819810427.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819810427.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819810427.png)

- - - - - -

#### Delete a Rule

1. In **Finance → Tax Rules**, click the **Delete** (trash) icon on the row.
2. Confirm the deletion.

<p class="callout info">Deleting a rule does not change past invoices; it only affects new invoices going forward.</p>

- - - - - -

#### Change Rule Order (Priority)

1. In **Finance → Tax Rules**, use the **up/down arrows** in the **Order** column.
2. Place **specific** rules (e.g., province/state) **above** general country-wide rules.

- - - - - -

#### Field Reference

<table id="bkmrk-field-type-what-it-c"><thead><tr><th>Field</th><th>Type</th><th>What it controls</th><th>Example</th></tr></thead><tbody><tr><td>Country</td><td>Dropdown</td><td>The country the rule applies to.</td><td>Poland</td></tr><tr><td>State/Region</td><td>Dropdown</td><td>Optional region/province/state inside the country.</td><td>Mazowieckie</td></tr><tr><td>Private Client</td><td>Toggle</td><td>Apply this rule to **individuals**.</td><td>On</td></tr><tr><td>Company Without TAX ID</td><td>Toggle</td><td>Apply when client is a **company without** a valid tax ID.</td><td>On</td></tr><tr><td>Company With TAX ID</td><td>Toggle</td><td>Apply when client is a **company with** a valid tax ID.</td><td>On</td></tr><tr><td>Individual TAX Rate</td><td>Toggle</td><td>Enable taxation for individuals per this rule.</td><td>On</td></tr><tr><td>Tax 1 Name / Rate (%)</td><td>Text / Number</td><td>First tax component name and percentage.</td><td>VAT / 23.000</td></tr><tr><td>Tax 2 Name / Rate (%)</td><td>Text / Number</td><td>Second tax component (if needed).</td><td>PST / 7.000</td></tr><tr><td>Tax 3 Name / Rate (%)</td><td>Text / Number</td><td>Third tax component (if needed).</td><td>GST / 5.000</td></tr><tr><td>Home Company</td><td>Dropdown</td><td>Which Home Company owns/uses this rule.</td><td>Default (Your Company Name)</td></tr></tbody></table>

- - - - - -

#### Example: Poland → Mazowieckie (VAT 23%)

1. **Create** a rule.
2. Country: **Poland**; State/Region: **Mazowieckie**.
3. Toggles: **Private Client = Off** (if you only tax businesses), **Company Without TAX ID = On**, **Company With TAX ID = On**.
4. Tax 1 Name: **VAT**; Tax 1 Rate: **23.000**.
5. Select **Home Company**.
6. **Save**. *(See: List after creating a rule)*
    
    [![image-1756819913571.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756819913571.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756819913571.png)

- - - - - -

#### Tips &amp; Good Practices

- Keep a **country-wide** rule at the bottom and **region‑specific** rules above it.
- Use clear tax names: **VAT**, **GST**, **PST**, **HST**.
- Review rules after **tax law changes** or when you expand to new regions.
- For multi‑company setups, double‑check the **Home Company** on each rule.

- - - - - -

#### Troubleshooting

- **My client is taxed incorrectly**
    
    
    - Check rule **order** (a broader rule may be matched first).
    - Verify the **client’s country/region** and **tax ID** status.
    - Confirm the **toggles** (Private/With ID/Without ID) match your intent.
    - Ensure tax **rates are numeric** (e.g., `23.000`).
- **I don’t see my Home Company**
    
    
    - Create it in **Home Companies** and then return to Tax Rules.

- - - - - -

#### Screenshot References

- **List view (empty)** — overall layout and action buttons *(Create, Create Canadian Rules, Create EU Rules).*
- **Create modal** — full form with toggles and tax fields.
- **Create Canadian Rules modal** — select Home Company.
- **Create EU Rules modal** — select Home Company.
- **List view (after creating)** — shows Poland/Mazowieckie, indicators and VAT 23.000%.
- **Edit modal** — modify existing rule fields.

# Create and Manage a Product

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

This guide explains how to create, configure, and maintain **Products** in the PUQcloud Panel, including pricing, attributes, options, and module settings.

- - - - - -

#### Overview

- **Path:** **Menu → Products → Products**
- **You can:** Create products, edit details, upload images, add prices, link attributes &amp; option groups, choose a module, and control visibility/availability.
- **Who:** Admins with product management permissions.

<p class="callout info">A **Product** is what your customers buy. Prices, options, and the provisioning **module** all live under the product.</p>

- - - - - -

#### Products List

From **Products → Products** you’ll see: Icon, **Key**, **Visible**, **Active**, **Stock**, **Services**, and actions (**Edit**, **Delete**). Use **Search** to filter.

*(Screenshot reference: Products list view)*

[![image-1756903017354.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903017354.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903017354.png)

**Actions**

- **+ Create** — start a new product.
- **Edit** — open the product tabs (General, Images, Pricing, Attributes, Options, Module).
- **Delete** — remove the product (does not remove existing services already provisioned).

- - - - - -

#### Create a Product

1. Click **+ Create**.
2. Enter a unique **Key** (e.g., `influxdb`).
3. Click **Save** — the product opens on the **General** tab for further setup.

*(Screenshots: Create Product modal → Product General tab)*

[![image-1756903047710.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903047710.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903047710.png)

- - - - - -

#### Configure the Product

Use the tabs across the top to complete setup.

##### 1) General

Fields you’ll see:

- **Key** — internal identifier (read-only after creation).
- **Hourly Billing** — enable if the product can be charged hourly.
- **Allow Idle** — allow an "idle" price tier.
- **Convert Price** — auto-convert base currency rates to other currencies.
- **Cancellation Delay** / **Termination Delay (Hours)** — grace windows before cancel/terminate executes.
- **Stock Control** — enable and set quantity to track stock.
- **Hidden** — hide from storefront/catalog.
- **Retired** — prevent new purchases while keeping existing services.
- **Localized content** — **Name**, **Short Description**, **Description** per language.
- **Notes** — internal notes for admins.  
    Click **Save**.

*(Screenshot reference: Product → General tab)*

[![image-1756903073473.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903073473.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903073473.png)

##### 2) Images

- **Icon image** — small logo shown in listings.
- **Background image** — larger visual used on product pages/cards.  
    Drag &amp; drop or click to upload, then **Save**.

*(Screenshot reference: Product → Images tab)*

[![image-1756903090331.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903090331.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903090331.png)

##### 3) Pricing

The table shows **Period**, **Currency**, **Setup**, **Base**, **Idle**, **Switch down**, **Switch up**, **Uninstall** with **Edit/Delete** actions.[![image-1756903104284.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903104284.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903104284.png)

**Add a price**

1. Click **+ Add**.
2. Choose **Currency** and **Period** (One‑Time, Daily, Weekly, Bi‑weekly, Monthly, etc.).
3. Enter amounts as needed (Setup, Base, Idle, Switch up/down, Uninstall).
4. **Save**.[![image-1756903111741.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903111741.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903111741.png)

**Edit a price**

- Click the **Edit** icon on a row, adjust amounts, **Save**.
    
    [![image-1756903119210.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903119210.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903119210.png)

##### 4) Attributes

Attach predefined **attributes** that describe or parameterize the product (often used by modules or displayed to customers).

[![image-1756903212627.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903212627.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903212627.png)

**Add an attribute**

1. Open **Attributes** and click **+ Add Attribute**.
2. Pick an item from the dropdown list (e.g., `proxmox-lxc-rootfs-raid10`).
3. **Save**.

[![image-1756903218589.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903218589.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903218589.png)

##### 5) Options

Link **option groups** like CPU, RAM, Disk to let customers configure variants during order.

[![image-1756903301898.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903301898.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903301898.png)

**Add an option group**

1. Open **Options** and click **+ Add Option**.
2. Select a group (e.g., **Firewall**, **Location**, **Additional Disk**) and **Save**.

[![image-1756903308668.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903308668.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903308668.png)

**Manage option groups**

- **Order** — use the up/down arrows to change display order.
- **Edit** — open the option group editor.
- **Hide/Show** — toggle visibility for this product.
- **Unlink** — detach the group from this product (confirm in the dialog).

[![image-1756903317194.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903317194.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903317194.png)

[![image-1756903362963.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903362963.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903362963.png)

##### 6) Module

Choose the **provisioning module** and fill in any required fields. Each module exposes its own parameters.

1. Go to **Module**.
2. Pick the **Module** from the dropdown (e.g., *PUQ Sample Product (active)*).
3. Complete the module fields.
4. Click **Save**.

*(Screenshot reference: Module tab)*

[![image-1756903370916.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1756903370916.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1756903370916.png)

- - - - - -

#### Manage Visibility &amp; Lifecycle

- Set **Hidden = On** to keep the product out of public listings while you work.
- Use **Retired = On** to stop new sales but keep existing services intact.
- Control **Stock** to cap new orders when capacity is limited.

- - - - - -

#### Best Practices

- Start with **Hidden** while configuring; unhide only after pricing and module are ready.
- Use clear, multilingual **Name/Descriptions** for customer understanding.
- Keep **Pricing** consistent across currencies (use **Convert Price** if appropriate).
- Keep option groups organized; put common groups (CPU/RAM/Disk) at the top.
- Test a full order path with a sandbox client before going live.

- - - - - -

#### Troubleshooting

- **Product not visible on site** → Check **Hidden** and **Retired** toggles; ensure at least one **Price** exists.
- **Options missing at checkout** → Verify the groups are **linked** and **visible** for this product.
- **Provisioning fails** → Confirm **Module** is selected and all required fields are filled; review module logs.
- **Wrong currency shown** → Check the **Pricing** table and **Convert Price** setting.

# Create and Manage Product Groups

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

**Product Groups** let you organize related products (e.g., Mini/Medium/Advanced plans) into a single category with shared visuals and templates.

- - - - - -

#### Overview

- **Path:** **Menu → Products → Product Groups**
- **You can:** Create groups, set icons/images, localize copy, assign templates, add/remove products, change order and visibility.
- **Who:** Admins with product management permissions.

<p class="callout info">Groups control how products are displayed on the storefront (list/order/manage templates) and provide a place to order items and manage visibility.</p>

- - - - - -

#### Product Groups List

You’ll see: **Icon**, **Key**, **Visible**, **Products** (count), **Order** controls (down / index / up), and actions (**Edit**, **Delete**). Use **Search** to filter.  
*(Screenshot reference: Product Groups list)*

[![image-1757599011970.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599011970.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599011970.png)

**Actions**

- **+ Create** — add a new group. *(Screenshot: Create Group modal)*
    
    [![image-1757599028793.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599028793.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599028793.png)
- **Order** — use arrows to arrange groups on the storefront.
- **Edit** — open tabs **General / Images / Products**.
- **Delete** — remove the group (does not delete products).

- - - - - -

#### Create a Product Group

1. Click **+ Create**.
2. Enter a unique **Key** (e.g., `proxmox-lxc`).
3. Click **Save**. The group opens on the **General** tab.  
    *(Screenshots: Create modal → General tab)*
    
    [![image-1757599035155.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599035155.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599035155.png)

- - - - - -

#### Configure the Group

##### General tab

- **Key** — internal identifier (read‑only after creation).
- **Icon** — choose an icon from your set (**Pick**).
- **Hidden** — hide/show the group from storefront.
- **Templates**
    
    
    - **List Template** — how the group appears on the catalog page.
    - **Order Template** — layout for the order page of products in this group.
    - **Manage Template** — layout for the client’s service management page.
- **Localized content** — **Name**, **Short Description**, **Description** per language.
- **Notes** — internal, visible to admins only.  
    Click **Save**.

##### Images tab

Upload visuals that represent the group:

- **Icon Image** — small logo used in lists/cards.
- **Background Image** — large banner-style image.  
    Drag &amp; drop or **Browse**, then **Save**.  
    *(Screenshot: Images tab)*
    
    [![image-1757599044206.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599044206.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599044206.png)

- - - - - -

#### Add &amp; Manage Products in the Group

Open the **Products** tab. *(Screenshot: Products tab)*

[![image-1757599050153.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599050153.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599050153.png)

##### Add products

1. Click **+ Add Product**.
2. Select one or more **existing products** to link to this group.
3. **Save**.

##### Manage items

- **Visible** — the green check indicates the product is visible inside this group.
- **Order** — use arrows to set the display order (e.g., Mini = 1, Medium = 2, Advanced = 3).
- **Edit** — open the product for editing in a new view.
- **Hide/Show** — toggle product visibility in this group (without altering the product’s global status).
- **Unlink** — detach the product from the group (confirmation dialog).

<p class="callout info">Tip: Keep a clear progression (e.g., Mini → Medium → Advanced) and ensure at least one **visible** product exists per group.</p>

- - - - - -

#### Best Practices

- Keep groups **Hidden** while drafting, then unhide when ready.
- Use consistent naming/visuals across **Name**, **Icon**, and **Images**.
- Choose templates that match the **product type** for a seamless order flow.
- Reuse groups for families of products (e.g., CPU/RAM tiers for the same service).
- Review the **Products** count in the list to quickly spot empty groups.

- - - - - -

#### Troubleshooting

- **Group doesn’t appear in catalog** → Turn **Hidden = Off**; verify that the group contains at least **one visible product**.
- **Product not showing under the group** → Ensure it’s **linked** and **visible** in the **Products** tab; also check the product’s own **Hidden/Active** flags.
- **Wrong page layout** → Confirm **List/Order/Manage Templates** are correct for this group.
- **Unexpected order** → Use the arrow controls in both **Group list** (for groups) and **Products tab** (for items) to correct ordering.

- - - - - -

#### Screenshot References

- **Product Groups list** — overview of groups with counts, visibility and order.
- **Create Group modal** — single Key field.
- **General tab** — Key, Icon, Hidden, Templates, localized fields.
- **Images tab** — Icon Image and Background Image uploaders.
- **Products tab** — list with Visible, Order, Edit, Hide/Show, Unlink.

# Create and Manage an Attribute Group

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

**Product Attribute Groups** are collections of attributes (e.g., IPv4, IPv6, 10 Gbps) you can later attach to products. They help standardize feature flags and technical capabilities across multiple products.

- - - - - -

#### Overview

- **Path:** **Menu → Products → Attribute Groups**
- **You can:** Create groups, localize names/descriptions, upload images, add/edit/delete attributes in a group, and control group visibility.
- **Who:** Admins with product management permissions.

<p class="callout info">A **Product Attribute** is a single capability/flag (e.g., `IPv6`). An **Attribute Group** is a labeled collection of such attributes.</p>

- - - - - -

#### Attribute Groups List

The list shows **Icon**, **Key**, **Visible**, and **Attributes** (count) with actions **Edit** and **Delete**. Use **Search** to filter.  
*(Screenshot reference: Attribute Groups list)*

[![image-1757599579030.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599579030.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599579030.png)

**Actions**

- **+ Create** — add a new attribute group. *(Screenshot: Create Group modal)*
    
    [![image-1757599585569.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599585569.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599585569.png)
- **Edit** — open tabs **General / Images / Attributes**.
- **Delete** — remove the group (does **not** remove attributes already linked to products).

- - - - - -

#### Create an Attribute Group

1. Click **+ Create**.
2. Enter a unique **Key** (e.g., `proxmox-lxc-pn`) and **Save**.

- - - - - -

#### Configure the Group

Use the tabs across the top.

##### General tab

- **Key** — internal identifier (read‑only after creation).
- **Hidden** — hide/show the entire group from selection lists.
- **Localized content** — **Name**, **Short Description**, and **Description** per language.
- **Notes** — internal notes for admins.  
    Click **Save**.  
    *(Screenshot: Attribute Group → General tab)*
    
    [![image-1757599606940.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599606940.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599606940.png)

##### Images tab

Upload visuals representing the group:

- **Icon Image** — small logo used in lists/cards.
- **Background Image** — larger banner image.  
    Drag &amp; drop files or **Browse**, then **Save**.  
    *(Screenshot: Attribute Group → Images tab)*
    
    [![image-1757599613048.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599613048.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599613048.png)

##### Attributes tab (inside the group)

Add and manage the individual attributes that belong to this group.  
You’ll see columns **Key** and **Visible** with actions **Edit** and **Delete** for each attribute.

**Add an attribute**

1. Click **+ Create** (top‑right while on the group).
2. Fill out the attribute details (e.g., **Key** `proxmox-lxc-pn-ipv6`, Name `IPv6`).
3. Set **Visible** as needed and **Save**.

**Edit / Delete**

- Use the **Edit** (pencil) or **Delete** (trash) on a row.  
    *(Screenshot: Attribute Group → Attributes tab showing IPv4, IPv6, 10 Gbps)*
    
    [![image-1757599621969.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1757599621969.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1757599621969.png)

- - - - - -

#### Using Attributes in Products

Once your attributes exist, attach them to products.

1. Open **Products → Products**, select a product.
2. Go to the product’s **Attributes** tab.
3. Click **+ Add Attribute** and pick from available attributes (they are organized by their groups).
4. **Save** the product.

<p class="callout info">Tip: Consistent keys (e.g., `proxmox-lxc-pn-ipv4`) make it easier for modules/automation to reference attributes programmatically.</p>

- - - - - -

#### Best Practices

- **Plan the taxonomy**: create groups by domain (e.g., Networking, Storage, CPU features).
- **Keep keys stable**: avoid renaming keys after products reference them.
- **Localize** names/descriptions so storefronts are consistent across languages.
- **Use visibility** to stage new attributes before making them selectable.

- - - - - -

#### Troubleshooting

- **Attribute not selectable on a product** → Ensure the attribute **exists**, is **Visible**, and you’re on the product’s **Attributes** tab.
- **Old attribute still appears** → It may be linked on products; unlink from those products before deletion.
- **Module fails expecting a flag** → Verify the attribute **Key** matches what the module/integration expects (case‑sensitive).

- - - - - -

#### Screenshot References

- Attribute Groups list page.
- **Create** Attribute Group modal.
- Attribute Group → **General** tab.
- Attribute Group → **Images** tab.
- Attribute Group → **Attributes** tab with items (IPv4, IPv6, 10 Gbps).

# Create and Manage Product Option Groups

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Why Option Groups?

Option Groups let you package reusable choices (like **Firewall levels**, **CPU tiers**, **RAM sizes**) and attach them to many products at once. You get consistent naming, pricing, and ordering — and one place to update them.

- - - - - -

#### Step-by-step, with pro tips

##### 1) Create the Group

- Go to **Products → Option Groups** → **+ Create**.  
    Screenshot list view.
    
    [![image-1758024679732.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024679732.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024679732.png)
    
    Screenshot “Create Option Group” modal[![image-1758024679765.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024679765.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024679765.png)

**Naming rule of thumb**

- **Key**: machine-friendly &amp; permanent (e.g., `Firewall`, `CPU`, `puqPmLXC-disk`).
- **Name**: client-facing &amp; translatable (e.g., “Firewall Protection”).
- Avoid spaces in **Key**; use hyphens or camelCase for consistency.

- - - - - -

##### 2) Set General Properties

Open the group and configure:

- **Hidden**: set to **No** to display to clients.
- **Convert Price**: **Yes** if pricing should auto-convert across currencies.
- **Multilingual content**: fill **Name**, **Short Description**, **Description**, plus **Notes** for internal admins.  
    Screenshot General tab
    
    [![image-1758024727339.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024727339.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024727339.png)

<p class="callout info">**Pro tip:** Put upgrade logic in the **Description** (“Level 2 adds IP reputation filter”), so clients know what changes between levels.</p>

- - - - - -

##### 3) Add Visuals (optional, but nice)

Add an **Icon** for quick recognition and a **Background** for storefront cards.  
Screenshot Images tab

[![image-1758024839999.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024839999.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024839999.png)

<p class="callout info">**Branding tip:** Use neutral, product-agnostic icons so this group can be reused across offerings.</p>

- - - - - -

##### 4) Add Options (the items clients actually choose)

Go to **Options** → **+ Create** and add each selectable item (e.g., *Firewall level 0/1/2/3*).  
Screenshot Options list with order controls[![image-1758024854462.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024854462.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024854462.png)  
Screenshot “Create Option” modal

[![image-1758024854491.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024854491.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024854491.png)

- Keep **Key** short (e.g., `firewall-level-1`).
- Use the **order arrows** to arrange from lowest → highest tier.
- Toggle **Visible** to quickly remove an option from the storefront without deleting it.

<p class="callout info">**UX tip:** List from “basic → advanced”. Clients upgrade more confidently when progression is obvious.</p>

- - - - - -

##### 5) Edit an Option &amp; Add Prices

Click **Edit** on an option:

- Fill **Key**, optional **Value** (if your module reads a value), **Hidden**, **Notes**.
- Upload **Icon/Background** for this option (optional).
- Localize **Name**, **Short Description**, **Description**.  
    Screenshot Edit Option page
    
    [![image-1758024902746.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024902746.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024902746.png)

Now add a price row:

- Click **+ Add Price** → choose **Currency** &amp; **Period** (One-time, Daily, Monthly, etc.).
- Fill **Setup**, **Base** (recurring), **Idle** (if billed when idle), **Switch up/down** (upgrade/downgrade delta), **Uninstall** (one-time removal fee).  
    Screenshot “Add Price” modal
    
    [![image-1758024914898.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758024914898.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758024914898.png)

<p class="callout info">**Pricing tip:** Only add price rows you actually need. If an option is informational, leave pricing blank.</p>

- - - - - -

#### Example: “Firewall Protection” (ready-to-copy model)

**Group Key:** `Firewall`  
**Options (ordered):**

1. Firewall level 0 — baseline filtering
2. Firewall level 1 — adds IP reputation lists
3. Firewall level 2 — + geo-blocking
4. Firewall level 3 — + L7 rules &amp; rate limiting

**Minimal price matrix idea**

- Level 0: Base 0.00 (included)
- Level 1: Base 3.00 (Monthly)
- Level 2: Base 6.00 (Monthly)
- Level 3: Base 9.00 (Monthly)  
    (Use **Convert Price = Yes** for multi-currency catalogs.)

- - - - - -

#### Attaching the Group to Products

1. Open a **Product** → **Options** tab → link your **Option Group**.
2. Save and preview the product order page to verify order, visibility, and prices.

<p class="callout info">**Governance tip:** Reuse one **Firewall** group across multiple products; update once, benefit everywhere.</p>

- - - - - -

#### Quality checks (2-minute audit)

- ✅ Group is **Visible** and option order makes sense.
- ✅ Each option has localized **Name** (and descriptions where needed).
- ✅ Price rows exist **only** where you charge.
- ✅ Group is attached to every relevant product.
- ✅ Upgrade paths are clear (level numbers or size increments).

- - - - - -

#### Troubleshooting &amp; gotchas

- **Group doesn’t show on the product:** It isn’t attached on the product’s **Options** tab.
- **Wrong currency on price:** Add a row per currency or enable **Convert Price**.
- **Client can’t see an option:** The option is **Hidden** or priced for a period the product doesn’t use.
- **Reordering doesn’t reflect on storefront:** Refresh cache and verify product still points to the same group.

- - - - - -

#### Maintenance playbook

- Use **Notes** to record internal logic (e.g., “Level 2 requires WAF module v2.1+”).
- When deprecating, switch an option to **Hidden** first, then remove after migrations.
- Version your groups with a suffix only when schema changes (e.g., `Firewall-v2`).

# Check and manage Task Queue

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

In **PUQcloud Panel**, many system operations are processed **in the background**, allowing multiple tasks to run simultaneously **without affecting overall performance**.  
This background job system ensures that resource-intensive operations — such as permission checks, automated provisioning, or notifications — are executed efficiently and asynchronously.

The **Task Queue** section gives administrators full visibility and control over these background jobs.  
It allows monitoring, filtering, and inspection of all automated system tasks.

- - - - - -

#### Navigation Path

**Dashboard → Monitoring → Task Queue**

- - - - - -

#### Key Features

<table id="bkmrk-feature-description-"><thead><tr><th>Feature</th><th>Description</th></tr></thead><tbody><tr><td>**Background Execution**</td><td>Multiple jobs run in parallel without slowing down the panel or user sessions.</td></tr><tr><td>**Job List**</td><td>Displays all queued, running, or completed background tasks.</td></tr><tr><td>**Status Indicators**</td><td>Each job shows a colored label: *Pending*, *Processing*, or *Completed*.</td></tr><tr><td>**Queue Info**</td><td>Indicates which queue the job belongs to (e.g., System, Default, etc.).</td></tr><tr><td>**Dates**</td><td>Displays job creation, start, and completion timestamps.</td></tr><tr><td>**Filter Range**</td><td>Allows selection of specific date/time intervals to refine results.</td></tr><tr><td>**Task Detail View**</td><td>Shows raw input and output data for each job.</td></tr></tbody></table>

- - - - - -

#### Using the Task Queue

##### 1. Access the Task Queue

Navigate to  
**Dashboard → Monitoring → Task Queue**

You will see a list of recent system jobs.  
Each entry contains:

- **Job Name**
- **Queue**
- **Dates**
- **Status**

[![Task Queue Overview](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/1.png)](https://doc.puq.info/uploads/images/gallery/2025-10/1.png)

- - - - - -

##### 2. Filter by Date and Time

Use the **Filter** field to narrow down results.  
Click the date range bar and select a start and end date/time using the popup calendar.

After choosing the range, click **Apply**.

[![Date Range Filter](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/emM2.png)](https://doc.puq.info/uploads/images/gallery/2025-10/emM2.png)

- - - - - -

##### 3. View Task Details

To inspect a specific job:

1. Click the **eye icon** next to the job.
2. A popup window will display **Input Data** and **Output Data**.

This information helps identify job parameters and verify successful completion.

[![Task Detail View](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/3.png)](https://doc.puq.info/uploads/images/gallery/2025-10/3.png)

- - - - - -

#### Status Colors

<table id="bkmrk-color-meaning-%F0%9F%9F%A1-proc"><thead><tr><th>Color</th><th>Meaning</th></tr></thead><tbody><tr><td>🟡 **Processing**</td><td>Task is currently being executed.</td></tr><tr><td>⚫ **Queued**</td><td>Task is waiting to start.</td></tr><tr><td>🟢 **Completed**</td><td>Task has finished successfully.</td></tr><tr><td>🔴 **Failed**</td><td>Task encountered an error during execution.</td></tr></tbody></table>

- - - - - -

#### Queue Controls

<table id="bkmrk-control-description-"><thead><tr><th>Control</th><th>Description</th></tr></thead><tbody><tr><td>**Auto Refresh Interval**</td><td>Located in the top right corner. Choose how often the list updates (e.g., every 2 seconds).</td></tr><tr><td>**Switch (Off/On)**</td><td>Enables or disables automatic refreshing.</td></tr><tr><td>**Search Field**</td><td>Quickly locate jobs by name or ID.</td></tr></tbody></table>

- - - - - -

#### Example Use Case

A system job such as  
**`App\Jobs\CheckingAdminPermissionsJob`**  
verifies admin permission configurations.

When completed, the **Task Detail** window shows output data like:

```json
{
  "jobId": "3de9043e-dfbb-4335-9796-48e137c1b5b9"
}
```

- - - - - -

#### Tips

- PUQcloud automatically manages queues, ensuring high performance even when many jobs are running simultaneously.
- Use **short intervals (2–5 seconds)** when debugging background tasks.
- To reduce load, disable auto-refresh when not actively monitoring.
- If a task fails, use the job ID from the output data to locate logs or related errors.

# Check and manage Admin Sessions

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

The **Admin Sessions** section in **PUQcloud Panel** allows system administrators to monitor all admin activities and requests executed through both **web** and **API interfaces**.  
Each session is logged automatically, showing the **admin user**, **IP address**, **accessed URL**, and **method type**.

This monitoring tool helps maintain transparency, detect unusual activity, and ensure security compliance within your PUQcloud environment.  
Just like the Task Queue, these operations run **in the background**, ensuring **no performance impact** on the system while recording all admin actions.

- - - - - -

#### Navigation Path

**Dashboard → Monitoring → Admin Sessions**

- - - - - -

#### Key Features

<table id="bkmrk-feature-description-"><thead><tr><th>Feature</th><th>Description</th></tr></thead><tbody><tr><td>**Complete Admin Logs**</td><td>Tracks all admin operations across the web panel and API requests.</td></tr><tr><td>**Background Tracking**</td><td>Logs are recorded automatically without slowing down system performance.</td></tr><tr><td>**Filter by Date Range**</td><td>Focus on specific time periods for auditing or troubleshooting.</td></tr><tr><td>**Auto Refresh Control**</td><td>Choose how often session logs update automatically.</td></tr><tr><td>**Search and Sorting**</td><td>Quickly find specific admins, URLs, or IP addresses.</td></tr><tr><td>**“Hide Me” Option**</td><td>Exclude your own sessions from the view for cleaner analysis.</td></tr></tbody></table>

- - - - - -

#### Using the Admin Sessions Page

##### 1. Access the Page

Go to  
**Dashboard → Monitoring → Admin Sessions**

You will see a list of session entries, each containing:

- **Date and Time**
- **Admin Name and Email**
- **IP Address**
- **Request Type (WEB/API, GET/POST)**
- **Accessed URL**

[![Admin Sessions Overview](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/vxA1.png)](https://doc.puq.info/uploads/images/gallery/2025-10/vxA1.png)

- - - - - -

##### 2. Filtering Sessions

Use the **Filter** field to select a time range.  
Click inside the date field to open the calendar, choose a start and end date, and confirm with **Apply**.

This helps narrow the view to a specific investigation period.

[![Date Range Filter](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/3BH2.png)](https://doc.puq.info/uploads/images/gallery/2025-10/3BH2.png)

- - - - - -

#### Columns Explained

<table id="bkmrk-column-description-d"><thead><tr><th>Column</th><th>Description</th></tr></thead><tbody><tr><td>**Date**</td><td>Timestamp of when the admin made a request.</td></tr><tr><td>**Admin**</td><td>Name and email of the administrator.</td></tr><tr><td>**IP Address**</td><td>Logged IP address from which the request was made.</td></tr><tr><td>**URL**</td><td>Full path of the accessed page or API endpoint.</td></tr><tr><td>**Type (WEB/API)**</td><td>Indicates the source of the request.</td></tr><tr><td>**Method (GET/POST)**</td><td>Shows the HTTP method used.</td></tr></tbody></table>

- - - - - -

#### Status Labels

<table id="bkmrk-label-meaning-%F0%9F%9F%A6-api-" style="height: 145px;"><thead><tr style="height: 29px;"><th style="height: 29px; width: 75.3438px;">Label</th><th style="height: 29px; width: 272.453px;">Meaning</th></tr></thead><tbody><tr style="height: 29px;"><td style="height: 29px; width: 75.3438px;">🟦 **API**</td><td style="height: 29px; width: 272.453px;">Request came through the system API.</td></tr><tr style="height: 29px;"><td style="height: 29px; width: 75.3438px;">🟩 **WEB**</td><td style="height: 29px; width: 272.453px;">Request made through the web interface.</td></tr><tr style="height: 29px;"><td style="height: 29px; width: 75.3438px;">🟢 **GET**</td><td style="height: 29px; width: 272.453px;">Data was fetched from the system.</td></tr><tr style="height: 29px;"><td style="height: 29px; width: 75.3438px;">🟠 **POST**</td><td style="height: 29px; width: 272.453px;">Data was sent or modified.</td></tr></tbody></table>

- - - - - -

#### Queue Controls

<table id="bkmrk-control-description-"><thead><tr><th>Control</th><th>Description</th></tr></thead><tbody><tr><td>**Auto Refresh Interval**</td><td>Located in the top right. You can set refresh time (e.g., every 5 seconds).</td></tr><tr><td>**Off/On Switch**</td><td>Enables or disables automatic refreshing.</td></tr><tr><td>**Search Box**</td><td>Filter results by keyword (admin name, URL, IP).</td></tr></tbody></table>

- - - - - -

#### Example Use Case

An administrator wants to verify recent API requests:  
By opening **Monitoring → Admin Sessions**, they can view every endpoint accessed, including timestamps, IP addresses, and request types.

Example entry:

```
2025-10-28 12:48:47 | puq puq | demo-admin@puqcloud.com  
API GET → https://demo.puqcloud.com/admin/api/admin_session_logs  
IP: 77.87.125.4

```

- - - - - -

#### Tips

- Enable short auto-refresh intervals (2–5 seconds) for real-time monitoring.
- Use the **Hide Me** checkbox to exclude your own requests while observing other admins.
- Combine **date filtering** with **keyword search** for precise audits.
- API and web sessions are logged in one unified view for maximum traceability.

# Check and manage Client Sessions

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

The **Client Sessions** section in **PUQcloud Panel** provides full visibility into all user and client activities occurring in the system.  
Each client’s interaction — whether via the **web panel** or **API requests** — is automatically logged in real time.

All session tracking runs **in the background**, so even with thousands of simultaneous connections, the system performance remains unaffected.  
This feature is essential for **security auditing**, **support troubleshooting**, and **usage monitoring**.

- - - - - -

#### Navigation Path

**Dashboard → Monitoring → Client Sessions**

- - - - - -

#### Key Features

<table id="bkmrk-feature-description-"><thead><tr><th>Feature</th><th>Description</th></tr></thead><tbody><tr><td>**Complete Client Logs**</td><td>Monitors every user’s actions through the Client Area and API.</td></tr><tr><td>**Background Execution**</td><td>Sessions are recorded asynchronously, ensuring no system slowdown.</td></tr><tr><td>**Real-Time Tracking**</td><td>Displays ongoing requests with instant refresh intervals.</td></tr><tr><td>**Filter by Date Range**</td><td>Analyze session activity for a specific period.</td></tr><tr><td>**Auto Refresh Option**</td><td>Set automatic updates every few seconds.</td></tr><tr><td>**Detailed Metadata**</td><td>Includes timestamp, IP, client name, user name, and accessed URL.</td></tr></tbody></table>

- - - - - -

#### Using the Client Sessions Page

##### 1. Access the Page

Navigate to  
**Dashboard → Monitoring → Client Sessions**

You’ll see a list of recorded client activities including:

- **Date and Time**
- **Client and User**
- **IP Address**
- **Request Source (WEB/API)**
- **HTTP Method (GET/POST)**
- **Full URL Accessed**

[![Client Sessions Overview](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/axp1.png)](https://doc.puq.info/uploads/images/gallery/2025-10/axp1.png)

- - - - - -

##### 2. Filter by Date and Time

To narrow results, use the **Filter** field at the top.  
Click the date range selector, choose your **start** and **end** times, then click **Apply** to confirm.

[![Date Range Filter](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/3WP2.png)](https://doc.puq.info/uploads/images/gallery/2025-10/3WP2.png)

- - - - - -

#### Columns Explained

<table id="bkmrk-column-description-d"><thead><tr><th>Column</th><th>Description</th></tr></thead><tbody><tr><td>**Date**</td><td>When the request was made.</td></tr><tr><td>**Client**</td><td>Name of the organization or customer account.</td></tr><tr><td>**User**</td><td>Name and email of the user under that client.</td></tr><tr><td>**IP Address**</td><td>Source IP used during the session.</td></tr><tr><td>**URL**</td><td>Exact web or API endpoint accessed.</td></tr><tr><td>**Type (WEB/API)**</td><td>Indicates the request source.</td></tr><tr><td>**Method (GET/POST)**</td><td>HTTP action type (data retrieval or update).</td></tr></tbody></table>

- - - - - -

#### Status Labels

<table id="bkmrk-label-meaning-%F0%9F%9F%A6-api-"><thead><tr><th>Label</th><th>Meaning</th></tr></thead><tbody><tr><td>🟦 **API**</td><td>Request executed through system API.</td></tr><tr><td>🟩 **WEB**</td><td>Request sent via client web interface.</td></tr><tr><td>🟢 **GET**</td><td>Data retrieved from the system.</td></tr><tr><td>🟠 **POST**</td><td>Data submitted or changed.</td></tr></tbody></table>

- - - - - -

#### Queue Controls

<table id="bkmrk-control-description-"><thead><tr><th>Control</th><th>Description</th></tr></thead><tbody><tr><td>**Auto Refresh Interval**</td><td>Located in the top-right corner. Select update frequency (e.g., every 5 seconds).</td></tr><tr><td>**Off/On Switch**</td><td>Turns automatic refreshing on or off.</td></tr><tr><td>**Search Box**</td><td>Quickly find sessions by client name, user, IP, or URL.</td></tr></tbody></table>

- - - - - -

#### Example Use Case

Support staff can use this section to trace a client’s recent activity.  
For instance, you can identify when a client accessed their service list or triggered an API call.

Example entry:

```
2025-10-27 21:13:37 | Demo Client | demo-client@puqcloud.com  
API GET → https://demo.puqcloud.com/api/logout  
IP: 92.246.84.133

```

- - - - - -

#### Tips

- Use **short refresh intervals (3–5 seconds)** to watch active client activity in real time.
- Combine **date filters** with **keyword searches** to quickly find suspicious or failed API calls.
- Logs include both **web panel navigation** and **API usage**, providing full operational transparency.
- Background tracking ensures **stable system performance** even with heavy usage.

# Check and manage Activity Log

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

The **Activity Log** section in **PUQcloud Panel** provides a centralized record of all important system and user actions.  
Every event — whether triggered by an administrator, client, or automated background job — is logged here to ensure full transparency and accountability.

Activity tracking runs **entirely in the background**, meaning multiple operations can be recorded simultaneously **without affecting system performance**.  
This allows administrators to trace actions, monitor transactions, and quickly investigate unusual activity.

- - - - - -

#### Navigation Path

**Dashboard → Monitoring → Activity Log**

- - - - - -

#### Key Features

<table id="bkmrk-feature-description-"><thead><tr><th>Feature</th><th>Description</th></tr></thead><tbody><tr><td>**Full Action History**</td><td>Tracks all actions performed by users and system processes.</td></tr><tr><td>**Performance-Safe Logging**</td><td>Background operation ensures stable performance during heavy load.</td></tr><tr><td>**Detailed Event Data**</td><td>Each record includes time, initiator, action type, and description.</td></tr><tr><td>**Filter by Date Range**</td><td>Focus on specific periods to analyze system behavior.</td></tr><tr><td>**Search Function**</td><td>Quickly find specific actions or users.</td></tr><tr><td>**Auto Refresh Option**</td><td>Keep the log updated in real time for live monitoring.</td></tr></tbody></table>

- - - - - -

#### Using the Activity Log

##### 1. Access the Activity Log

Navigate to  
**Dashboard → Monitoring → Activity Log**

You’ll see a structured table displaying all recent system activities with columns for:

- **Date**
- **Initializer** (User or System)
- **Action**
- **Description**

[![Activity Log Overview](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/HiT1.png)](https://doc.puq.info/uploads/images/gallery/2025-10/HiT1.png)

- - - - - -

##### 2. Filter by Date and Time

To focus on a specific time range, use the **Filter** field.  
Click the input box to open the date/time selector, choose your preferred period, and click **Apply**.

[![Date Range Filter](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/1xN2.png)](https://doc.puq.info/uploads/images/gallery/2025-10/1xN2.png)

- - - - - -

#### Columns Explained

<table id="bkmrk-column-description-d"><thead><tr><th>Column</th><th>Description</th></tr></thead><tbody><tr><td>**Date**</td><td>Timestamp of when the action occurred.</td></tr><tr><td>**Initializer**</td><td>The actor who performed the action (e.g., system, admin, or client).</td></tr><tr><td>**Action**</td><td>The operation type (e.g., charge, login, create, update).</td></tr><tr><td>**Description**</td><td>Detailed log entry including affected model, transaction link, and related data.</td></tr></tbody></table>

- - - - - -

#### Action Types

<table id="bkmrk-label-meaning-%F0%9F%9F%A6-info"><thead><tr><th>Label</th><th>Meaning</th></tr></thead><tbody><tr><td>🟦 **INFO**</td><td>Informational log (e.g., successful login, transaction created).</td></tr><tr><td>🟧 **WARNING**</td><td>Indicates potential issue or unusual operation.</td></tr><tr><td>🔴 **ERROR**</td><td>Operation failed or triggered an exception.</td></tr></tbody></table>

- - - - - -

#### Queue Controls

<table id="bkmrk-control-description-"><thead><tr><th>Control</th><th>Description</th></tr></thead><tbody><tr><td>**Auto Refresh Interval**</td><td>Located at the top right. Define how often logs refresh (e.g., every 5 seconds).</td></tr><tr><td>**Off/On Switch**</td><td>Enables or disables automatic refresh.</td></tr><tr><td>**Search Box**</td><td>Find actions by keyword, ID, or user.</td></tr></tbody></table>

- - - - - -

#### Example Use Case

An administrator wants to verify all automated billing actions executed by the system.  
By filtering the **Activity Log**, they can view entries such as:

```
2025-10-28 12:37:07 | System | charge | Transaction:9e0077dd-aad4-400a-8437-01bf61b41de6 created.
Amount Net: -0.0645 USD Amount Gross: -0.0645 USD Fees: 0.0000 USD

```

This helps confirm that automated transactions ran correctly and without errors.

- - - - - -

#### Tips

- Use **Activity Log** as your primary audit trail for all background and user operations.
- Combine it with **Admin Sessions** and **Client Sessions** for full transparency.
- Use **search filters** to isolate suspicious events quickly.
- Since logging runs asynchronously, you can safely enable **real-time refresh** during monitoring.

# Check and manage Module Log

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

The **Module Log** in **PUQcloud Panel** provides detailed records of all operations executed by modules — including API requests, SSH commands, and service actions.  
It helps administrators **debug**, **monitor**, and **audit** communication between PUQcloud and external systems such as **Proxmox**, **Nextcloud**, and others.

All logging processes run **in the background**, allowing multiple modules to record events simultaneously **without impacting performance**.  
This ensures that even heavy automation tasks remain fast and efficient.

- - - - - -

#### Navigation Path

**Dashboard → Monitoring → Module Log**

- - - - - -

#### Key Features

<table id="bkmrk-feature-description-"><thead><tr><th>Feature</th><th>Description</th></tr></thead><tbody><tr><td>**Detailed Module-Level Tracking**</td><td>Records every request and response for each module.</td></tr><tr><td>**Safe Background Execution**</td><td>All logs are generated asynchronously to avoid slowing down the system.</td></tr><tr><td>**Live Monitoring**</td><td>Real-time updates every few seconds for active debugging.</td></tr><tr><td>**Filter by Date and Time**</td><td>Review specific activity ranges.</td></tr><tr><td>**Search and Filter**</td><td>Quickly locate logs by module name, action, or keyword.</td></tr><tr><td>**Log Viewer**</td><td>Inspect full request and response content for debugging.</td></tr><tr><td>**Delete All Logs**</td><td>Instantly clear old logs when troubleshooting is complete.</td></tr></tbody></table>

- - - - - -

#### Using the Module Log

##### 1. Access the Page

Navigate to  
**Dashboard → Monitoring → Module Log**

You’ll see all module-related activity displayed in a structured table with columns for:

- **Date**
- **Name** (module name)
- **Action**
- **Level**

[![Module Log Overview](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/Kxn1.png)](https://doc.puq.info/uploads/images/gallery/2025-10/Kxn1.png)

- - - - - -

##### 2. Filter by Date and Time

To focus on a specific period, use the **Filter** control at the top.  
Select the desired start and end dates and times, then click **Apply** to reload the results.

[![Date Range Filter](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/ogC2.png)](https://doc.puq.info/uploads/images/gallery/2025-10/ogC2.png)

- - - - - -

##### 3. View Log Details

Each record includes a “View” (👁️) icon on the right.  
Click it to open the detailed log window showing:

- **Type and Module Name**
- **Action Type**
- **Log Level**
- **Request Payload**
- **Response Data**

This view is essential for debugging API and SSH communication.

[![Log Detail View](https://doc.puq.info/uploads/images/gallery/2025-10/scaled-1680-/mAb3.png)](https://doc.puq.info/uploads/images/gallery/2025-10/mAb3.png)

- - - - - -

#### Columns Explained

<table id="bkmrk-column-description-d"><thead><tr><th>Column</th><th>Description</th></tr></thead><tbody><tr><td>**Date**</td><td>Timestamp of the log entry.</td></tr><tr><td>**Name**</td><td>The name of the module (e.g., puqProxmox, puqNextcloud).</td></tr><tr><td>**Action**</td><td>Describes what operation was executed (API Request, SSH Command, etc.).</td></tr><tr><td>**Level**</td><td>Indicates the log type (Debug, Info, Warning, Error).</td></tr></tbody></table>

- - - - - -

#### Log Levels

<table id="bkmrk-level-description-%F0%9F%9F%A3-"><thead><tr><th>Level</th><th>Description</th></tr></thead><tbody><tr><td>🟣 **DEBUG**</td><td>Detailed technical data for developers and administrators.</td></tr><tr><td>🟦 **INFO**</td><td>Informational events indicating normal operation.</td></tr><tr><td>🟧 **WARNING**</td><td>Non-critical issue or irregular response.</td></tr><tr><td>🔴 **ERROR**</td><td>Operation failed or received invalid data.</td></tr></tbody></table>

- - - - - -

#### Controls and Options

<table id="bkmrk-control-description-"><thead><tr><th>Control</th><th>Description</th></tr></thead><tbody><tr><td>**Auto Refresh**</td><td>Refresh interval (top-right) allows you to monitor logs in real time.</td></tr><tr><td>**Off/On Switch**</td><td>Enable or disable live updates.</td></tr><tr><td>**Search Box**</td><td>Quickly find logs by action or module name.</td></tr><tr><td>**Delete All**</td><td>Clears all logs at once — useful after debugging sessions.</td></tr></tbody></table>

- - - - - -

#### Example Use Case

While testing the **puqProxmox** module, the administrator can open **Module Log** to check the API and SSH calls executed during a provisioning process.

Example entry:

```
2025-10-28 08:25:23 | puqProxmox | API Request - Sending Request | DEBUG

```

By clicking the 👁️ icon, the admin can inspect both the request JSON and the response received from the external system.

- - - - - -

#### Tips

- Use **DEBUG** level logs for troubleshooting module integrations.
- Regularly clear old logs to keep your workspace clean.
- Combine with the **Task Queue** section to trace background automation steps.
- Since logs are recorded asynchronously, there’s **no performance degradation**, even during heavy module execution.

# Check and manage Notification History

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

# Create & Manage Administrators

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

Use this quick, practical guide to add new admins, edit access, reset passwords, and keep your panel secure. Each step tells you exactly where to place your screenshots.

- - - - - -

#### Open the Administrators page

**Path:** **Settings → Staff → Admins**  
Here you’ll see the current admins list with **Edit** ✏️ and **Delete** 🗑️ actions.

Administrators list (with Edit/Delete).

[![image-1758113045196.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758113045196.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758113045196.png)

- - - - - -

#### Create a new Administrator

1. Click **+ Create** (top-right).
2. Fill in:
    
    
    - **Email**, **Firstname**, **Lastname**
    - **Language** (UI language for this admin)
    - **Groups** (permission set; e.g., *Super Admin* or your custom groups)
    - **Password** and **Confirm password**
3. Click **Save**.

“Create Administrator” modal (all fields)

[![image-1758113062417.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758113062417.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758113062417.png)

**Notes**

- Use a **unique, work email** per person (no shared logins).
- Assign the **minimum necessary group** (least privilege).

- - - - - -

#### Edit an Administrator (status, groups, details)

From the list, click **Edit**:

- **Status:** toggle **Enabled/Disabled** to grant or block access.
- **Groups:** add/remove roles to change permissions.
- **Language**, **Phone Number**, and **Notes** as needed.
- **Session IPs** (right side): quick audit of recent logins.

Click **Save** when done.

Edit Administrator page (Status, Groups, Session IPs, Save)

[![image-1758113074934.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758113074934.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758113074934.png)

- - - - - -

#### Change an Administrator’s Password

On the **Edit** page, click **Change password** (top-right), enter **Password** and **Confirm**, then **Save**.

“Change password” modal

[![image-1758113088563.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758113088563.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758113088563.png)

<p class="callout info">Tip: enforce strong passwords and ask the user to enable 2FA in their Client Area.</p>

- - - - - -

#### Delete an Administrator

On the **Admins** list, click the **🗑️ Delete** button next to the user and confirm.

**Best practice:** never delete your **last Super Admin**. Create/assign another Super Admin first.

- - - - - -

#### Groups &amp; permissions (quick tips)

- Define groups in **Settings → Staff → Groups** (e.g., *Support*, *Finance*, *Ops*).
- Follow **least privilege**: grant only what the role needs.
- Separate **Finance** vs **Technical** access when possible.
- Review group membership regularly (monthly/quarterly).

- - - - - -

#### Security checklist

- One person = one account (no shared logins).
- Require **2FA** for all admins (set in the user’s Client Area).
- Rotate passwords for high-privilege accounts.
- Watch the **Session IPs** for unusual activity.
- Immediately **Disable** or **Delete** ex-staff accounts.

- - - - - -

#### Troubleshooting

- **“Save” is greyed out / error:** check required fields, unique email, password match.
- **Can’t log in:** ensure **Status = Enabled**; verify correct email.
- **Missing features:** user likely lacks the right **Group**.
- **Password change fails:** confirm both fields match and meet policy.

# Create & Manage Administrator Groups

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

Use this to build role-based access for your staff. I’ll also show where to place each screenshot.

- - - - - -

#### Open Groups

**Path:** **Settings → Staff → Groups**  
Here you can see all groups plus **Edit** ✏️ / **Delete** 🗑️.

Groups list (with action buttons).

[![image-1758114573798.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758114573798.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758114573798.png)

- - - - - -

#### Create a Group (for Admins)

1. Click **+ Create** (top-right).
2. Fill in:
    
    
    - **Name** — e.g., *Support*, *Finance*, *Ops*
    - **Type** — choose **Groups** (this is the correct type for administrator roles)
3. **Save**.

“Create Group” modal (Type dropdown visible).

[![image-1758114580687.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758114580687.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758114580687.png)

<p class="callout info">Other types (System, Notification, Admin/Client Template) are system/helper sets. For admin roles, use **Groups**.</p>

- - - - - -

#### Configure Permissions

After saving, you’re on the **Edit Group** page. Toggle capabilities the group should have, e.g.:

- **System Permission** — system-level operations.
- **Admin Modules Permission** — access to admin modules/features.
- **Admin Notifications** — receive back-office alerts.
- **Client Notifications** — receive client-side alerts (usually off for admins unless needed).
- **Admin Template Permission** / **Client Template Permission** — manage templates.

Add a **Description**, then **Save**.

Edit Group with toggles (On/Off).

[![image-1758114588329.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758114588329.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758114588329.png)

- - - - - -

#### Assign the Group to Administrators

**Path:** **Settings → Staff → Admins → Edit** an admin → **Groups** field → add your group → **Save**.  
(Use least-privilege: only the access they need.)

- - - - - -

#### Edit / Delete a Group

- From the **Groups** list, click **✏️ Edit** to change toggles or rename/describe.
- Click **🗑️ Delete** to remove a group (only if no critical users rely on it).

- - - - - -

#### Tips &amp; Good Practice

- Start with broad roles (*Support*, *Finance*, *Ops*), then refine toggles.
- Keep **Super Admin** for a few trusted people only.
- Review memberships monthly; remove access for ex-staff immediately.
- Test new roles with a non-super-admin account before rollout.

# Manage scheduler in the Admin Area

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

<p class="callout info">**Why Scheduler?** So billing, cleanups, lifecycle actions, and Proxmox jobs run *on time*, *automatically*, and *predictably*.</p>

#### Where is it?

**Automation → Scheduler**

[![image-1758198466372.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198466372.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198466372.png)Scheduler overview (System tab) with task card UI (Last/Next Run, cron, On/Off, Save, Reset).

- - - - - -

#### 60-second UI tour

Every task card has 6 key parts:

1. **Title** + short description.
2. **Last Run** — when it last executed (great to spot stalls).
3. **Next Run** — when it will run next.
4. **Cron expression** — schedule in `* * * * *` format.
5. **On/Off** toggle — enable/disable instantly.
6. **Save** (disk) / **Reset** (↺) — apply or discard changes.

<p class="callout info">**Rule #1:** change cron → **Save** → confirm **Next Run** updates. If it didn’t, your change isn’t applied.</p>

- - - - - -

#### Tabs &amp; what they’re for

##### 1. System

Service/test tasks.

- Keep **Off** in production unless you use them intentionally.
    
    [![image-1758198498265.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198498265.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198498265.png)  
    Scheduler overview (System tab) with task card UI (Last/Next Run, cron, On/Off, Save, Reset).

- - - - - -

##### 2. Cleanup

Housekeeping for logs, sessions, and “lost” queue jobs.

- **System:clearingLostTasks** — converts `pending/processing` to `failed/duplicate`.
- **System:Cleanup** — clears logs/history by retention.

Suggested schedule:

- LostTasks: `*/30 * * * *`
- Cleanup: `0 3 * * *` (daily at 03:00)
    
    [![image-1758198722637.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198722637.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198722637.png)Cleanup tab showing “System:clearingLostTasks” and “System:Cleanup” with example cron values.

<p class="callout info">**Tip:** while debugging you can run them more often; switch back to the nightly window later.</p>

- - - - - -

##### 3. Products

Bulk price conversions/recalculation.

- **Products:ConvertPrice** — keeps prices aligned with currency rates.  
    Schedules that work:
- `0 * * * *` (hourly) or `*/15 * * * *` in volatile markets.
    
    [![image-1758198746129.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198746129.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198746129.png)  
    Products tab showing “Products:ConvertPrice” enabled with sample cron.

- - - - - -

##### 4. Finance

The billing heart: charges and transactions.

- **Finance:ChargeServices** — charges active services and creates transactions.  
    Balanced options:
- `*/10 * * * *` — near-real-time customer experience.
- `0 * * * *` — lighter load, OK for hourly charging.
    
    [![image-1758198833647.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198833647.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198833647.png)Finance tab showing “Finance:ChargeServices” enabled with sample cron.

<p class="callout info">**Pro tip:** do faster cycles by day (`*/10`), slower at night if you manage cron externally with “day/night” profiles.</p>

- - - - - -

##### 5. Service

Service lifecycle automation:

- **Service:CreateServices** — create on sufficient funds.
- **Service:SuspendServices** — suspend on debt.
- **Service:TerminationServices** — terminate after grace.
- **Service:UnsuspendServices** — restore after top-up.
- **Service:CancellationServices** — process cancellations.

Recommended starter profile:

- Create/Suspend/Unsuspend: `*/10 * * * *`
- Cancellation: `*/30 * * * *`
- Termination: `0 4 * * *` (nightly)
    
    **[![image-1758198856071.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198856071.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198856071.png)**Service tab with lifecycle tasks (Create, Suspend, Unsuspend, Termination, Cancellation) and their toggles.

<p class="callout info">**Safety:** run terminations once per night to avoid heavy daytime I/O.</p>

- - - - - -

##### 6. PUQ Proxmox

Cluster sync and backups.

- **puqProxmox:SyncClusters** — `*/5 * * * *`.
- **puqProxmox:MakeBackups** — `0 2 * * *` (02:00 daily).
    
    [![image-1758198884128.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198884128.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198884128.png)PUQ Proxmox tab showing “puqProxmox:SyncClusters” and “puqProxmox:MakeBackups” with recommended schedules.

<p class="callout info">**Practice:** give backups a dedicated quiet window; watch storage I/O.</p>

- - - - - -

##### 7. PUQ Sample Plugin / PUQ Sample Product

Demo tasks — keep **Off** in production.

[![image-1758198911958.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198911958.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198911958.png)PUQ Sample Plugin tab showing “puqSamplePlugin:test” (demo task) in Off state.

[![image-1758198911975.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758198911975.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758198911975.png)PUQ Sample Product tab showing “puqSampleProduct:test” (demo task) in Off state.

- - - - - -

#### Cron cheat sheet (no pain)

<table id="bkmrk-expression-meaning-%2A"><thead><tr><th>Expression</th><th>Meaning</th></tr></thead><tbody><tr><td>`* * * * *`</td><td>Every minute</td></tr><tr><td>`*/5 * * * *`</td><td>Every 5 minutes</td></tr><tr><td>`*/10 * * * *`</td><td>Every 10 minutes</td></tr><tr><td>`0 * * * *`</td><td>At the start of every hour</td></tr><tr><td>`0 2 * * *`</td><td>Daily at 02:00</td></tr><tr><td>`0 3 * * 1`</td><td>Mondays at 03:00</td></tr><tr><td>`*/30 8-20 * * 1-5`</td><td>Every 30 min 08:00–20:00 on weekdays</td></tr></tbody></table>

<p class="callout info">**Note:** Times follow the server’s timezone. If times look odd, verify the host TZ.</p>

- - - - - -

#### Ready-made profiles (copy/paste)

##### “Starter” (safe and effective)

- Finance: `*/10 * * * *`
- Service Create/Suspend/Unsuspend: `*/10 * * * *`
- Service Cancellation: `*/30 * * * *`
- Service Termination: `0 4 * * *`
- Cleanup Lost: `*/30 * * * *`
- Cleanup: `0 3 * * *`
- Convert Price: `0 * * * *`
- SyncClusters: `*/5 * * * *`
- MakeBackups: `0 2 * * *`

##### “Nightly heavy-lifting”

- All heavy tasks (Termination/Cleanup/Backups) between **02:00–04:00**.
- Frequent light tasks during the day (Charge/Status/Sync).

- - - - - -

#### Safe-change checklist

1. **Environment** — test on **staging** first.
2. **Snapshot current crons** — copy or take a screenshot for rollback.
3. Change cron → **Save** → confirm **Next Run** updated.
4. Monitor 24–48h: **Last Run**, billing effects, backups, system load.
5. If issues appear — **Reset** on the card (or revert cron) and **Save**.

- - - - - -

#### Troubleshooting quick tree

**A. Task doesn’t run**

- Toggle is **Off**? → turn **On**.
- **Next Run** missing? → fix cron syntax and **Save**.
- Workers/cron down? → restart your queue workers/system cron.

**B. System load too high**

- Move heavy jobs to night (02:00–04:00).
- Reduce frequency (`*/10` → `*/30`, `*/30` → `0 * * * *`).

**C. Data gets stale (prices/sync/status)**

- Increase frequency (hourly → every 15 or 10 minutes).
- Check worker logs for task errors.

- - - - - -

#### Micro-FAQ

- **Why is “Next Run” showing an X?**  
    Task is **Off** or cron is invalid. Enable and/or fix cron, then **Save**.
- **Can I trigger a task now?**  
    UI focuses on schedules. For ad-hoc runs, temporarily set the cron to the nearest minute, **Save**, then revert.
- **How do I know it’s healthy?**  
    Watch **Last Run**, see that service lifecycle events occur on time, finance entries are up-to-date, and backups are fresh.

- - - - - -

##### Wrap-up

1. Define “day/night” profiles.
2. Heavy jobs at night; routine jobs every 5–15 minutes.
3. After any change: **Save** → check **Next Run**.
4. Use **Last Run** + worker logs as your health sensors.

# Manage Notification Senders in the Admin Area

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

Use this guide to add, edit, and configure the channels your system uses to send emails/alerts (PHP mailer, SMTP, Bell, etc.).

- - - - - -

#### Open the Notification Senders page

1. In the Admin Area, go to **Email &amp; Notifications → Notification Senders**.
2. You’ll see all existing senders with their **Module** (delivery method) and quick actions.

*Notification Senders list with Edit/Delete actions.*

[![image-1758199850390.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758199850390.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758199850390.png)

- - - - - -

#### Understand sender types (Modules)

When creating a sender you’ll choose a **Module**:

- **PUQ PHPMailer** — uses PHP mail; simple to set up, limited deliverability controls.
- **PUQ SMTP** — sends through your mail server (recommended for deliverability).
- **PUQ Bell** — internal “bell”/in-app notifications (no email).

- - - - - -

#### Create a new sender

1. Click **+ Create** (top-right).
2. In the modal, fill **Name** (e.g., “Support SMTP”) and choose a **Module**.

*“Create Notification Sender” modal with Module dropdown.*

[![image-1758199862367.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758199862367.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758199862367.png)

<p class="callout info">Tip: Create one sender per use case (e.g., “System Alerts (SMTP)”, “Marketing (SMTP)”, “In-app Bell”).</p>

- - - - - -

#### Configure SMTP details (if you chose **PUQ SMTP**)

After saving the modal, you’ll land on the sender’s settings page. Fill the fields:

- **Name / Description** — friendly label for admins.
- **Email** — the “From” address (often must be a verified mailbox/domain).
- **Sender Name** — the “From name” (e.g., “PUQ Cloud”).
- **Server** — SMTP host (e.g., `mail.example.com`).
- **Port** — usually **465** (SSL) or **587** (TLS).
- **Encryption** — **SSL**/**TLS**/**None** per your provider.
- **Username / Password** — mailbox credentials.

Click **Test Connection** to verify, then **Save**.

*SMTP sender edit form with Test Connection button.*

[![image-1758199886166.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758199886166.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758199886166.png)

<p class="callout info">Deliverability tips  
• Use a dedicated subdomain (e.g., `mail.example.com`).  
• Set up SPF, DKIM, and DMARC where you host DNS.  
• Match the **Email** domain with the authenticated SMTP domain.</p>

- - - - - -

#### Edit or remove a sender

- From the list, click **✏️ Edit** to update any field and **Save**.
- Click **🗑️ Delete** to remove a sender (you’ll be asked to confirm).

<p class="callout info">Heads-up: If a sender is referenced by a **Notification Template** or workflow, update those to the new sender before deleting.</p>

- - - - - -

#### Best practices

- Maintain at least **one SMTP sender** for production.
- Keep separate senders for **transactional** vs **marketing** mail.
- Periodically **Test Connection** after password/host changes.
- Restrict who can edit senders via **Admin Groups/Roles**.

- - - - - -

#### Troubleshooting checklist

- ❌ **Test Connection fails** → verify host/port/encryption; check firewall blocks.
- 📬 **Emails land in spam** → fix SPF/DKIM/DMARC; use consistent “From” domain; warm up IP if applicable.
- 🔐 **Auth errors** → re-enter username/password; confirm app-passwords if using Google/Microsoft; ensure 2FA policies allow SMTP.

- - - - - -

That’s it! Your Notification Senders are now set up and ready to power templates and automated notifications.

# Manage Notification Layouts in the Admin Area

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

Below is a compact, step-by-step guide to creating and customizing the HTML wrappers (“layouts”) that your notification templates use. You’ll: find the section, add a layout, and tailor the HTML/CSS with live preview and multi-language tabs.

- - - - - -

#### Open Notification Layouts

- Go to **Email &amp; Notifications → Notification Layouts**.
- You’ll see the built-in **Admin Default Layout** and **Client Default Layout**.

**What you can do here**

- **✏️ Edit** an existing layout.
- **🗑️ Delete** a custom layout (system layouts are protected).
- **+ Create** a new layout.

*Notification Layouts list with built-in Admin/Client entries.*

[![image-1758200468585.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758200468585.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758200468585.png)

- - - - - -

#### Create a new layout

1. Click **➕ Create** (top-right).
2. Give the layout a **Name** (e.g., “Marketing Layout”).
3. Click **Save**.

*“Create Notification Layout” modal (Name).*

[![image-1758200473815.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758200473815.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758200473815.png)

- - - - - -

#### Edit a layout (HTML/CSS + preview)

Open a layout (e.g., **Admin Default Layout**). The editor provides:

- **Multi-language tabs** across the top (🇺🇸 English, 🇺🇦 Ukrainian, 🇵🇱 Polish, 🇫🇷 French).
- A **code editor** (left) for your HTML/CSS wrapper.
- A **live HTML preview** (right) showing how variables render.

##### Key variables/partials you’ll use

- `{{ $title }}` – Notification/title string.
- `{!! $content !!}` – The body that each specific notification template injects.
- `{{ $locale }}` – Current language code (often used on the `<html lang="">` tag).
- Optional: `{{ $signature }}` or `{!! $signature !!}` if your layout includes a signature partial (depends on your installation).

<p class="callout info">Tip: Your layout is the *frame*. Individual notification templates only inject their own content into `{!! $content !!}`. Keep shared branding, header, footer, fonts, and styling in the layout.</p>

*“Edit Notification Layout” (Admin Default) with code editor and live preview.*

[![image-1758200496592.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758200496592.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758200496592.png)

- - - - - -

#### Style a client-facing layout

For the **Client Default Layout**, you might include:

- A branded header with gradient background.
- A **CTA button** (e.g., “Visit Client Area”).
- A footer with company signature.

<p class="callout info">Best practice: Keep fonts, spacing, and colors consistent with your website, and ensure the CTA is visible in both light/dark email clients.</p>

*“Edit Notification Layout” (Client Default) with branded CTA preview.*

[![image-1758200514588.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758200514588.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758200514588.png)

- - - - - -

#### Apply layouts to your notification templates

- Each **notification template** (e.g., “Invoice Paid”, “Password Reset”) can reference one of your layouts.
- Use the **Client Default Layout** for customer-facing emails and **Admin Default Layout** for staff/internal alerts.

<p class="callout info">If your system allows choosing the layout inside each template: open **Email &amp; Notifications → Notification Templates**, pick the template, and select the layout from the dropdown. (If not present, your installation may assign layouts automatically by scope—Client vs Admin.)</p>

- - - - - -

#### Test before you go live

- Use **Notification Senders** (SMTP/PHPMail/Bell) to ensure delivery works.
- Send a **real test** for each language tab you changed.
- Check the email in a few clients (Gmail, Outlook, Apple Mail) and on mobile.

- - - - - -

#### Tips &amp; safeguards

- **Do not remove** `{!! $content !!}` — your template body inserts here.
- **Keep inline styles** where possible; many email clients strip external CSS.
- **Avoid heavy JS** (email clients ignore it).
- **Dark mode**: test contrast (buttons and text).
- **Language tabs**: update all languages to avoid fallback mismatches.
- **Versioning**: copy your HTML to a snippet file or Git before big edits.

- - - - - -

#### Quick Troubleshooting

- **Broken layout?** Revert to the default layout or restore your last working HTML.
- **Variables not rendering?** Ensure you used the correct blade/templating syntax (`{{ }}` for escaped, `{!! !!}` for raw HTML).
- **Images blocked?** Host images over HTTPS and add `alt` text; consider base64 for critical icons.

- - - - - -

That’s it! Your notifications are now consistent, branded, and ready to ship.

# Manage Notification Templates (Admin Area)

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

Here’s a clear, step-by-step guide to managing **Notification Templates** in the Admin Area.

- - - - - -

#### Open the Templates list

- Go to **Email &amp; Notifications → Notification Templates**.
- This page lists all built-in (“**SYSTEM**”) and any custom templates, grouped by category (Staff/Client – Operational/Administrative).
- Use the **Search** box to filter by name and the **✏️ Edit** button to customize a template.

Notification Templates list with categories and edit actions.

[![image-1758200948928.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758200948928.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758200948928.png)

- - - - - -

#### Create a new template

1. Click **+ Create** (top-right).
2. Enter a **Name**.
3. Pick a **Category**:
    
    
    - **Staff Administrative**
    - **Staff Operational**
    - **Client Administrative**
    - **Client Operational**
4. Click **Save**.

<p class="callout info">Tip: Categories help route who receives the message and where it shows up in the UI.</p>

“Create Notification Template” modal (Category).

[![image-1758200953032.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758200953032.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758200953032.png)

- - - - - -

#### Edit a template (content &amp; languages)

When you edit a template you’ll see:

- **Language tabs** (EN/UA/PL/FR): maintain localized versions for each language you support.
- **Subject**: the email subject line for that language.
- **Text Mini**: a short/plain snippet (great for SMS/push or the top of text-only emails).
- **HTML Preview**: a live preview of the HTML you’re composing on the left.

Changes are independent per language; remember to save after editing each language if you switch tabs.

Edit Notification Template: language tabs, Subject, Text Mini, live preview.

[![image-1758200965950.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758200965950.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758200965950.png)

- - - - - -

#### Write the message (variables &amp; logic)

- The editor supports template variables and light blade-style syntax. Common objects include:
    
    
    - `$client` (e.g., `$client->company_name`, `$client->firstname`)
    - `$service` (e.g., `$service->uuid`, `$service->price`, `$service->product`)
    - `$product`, `$price_detail`, `$currency`, `$period`, etc., depending on the event
- Use control structures (`@if`, `@foreach`) to conditionally render parts of the email.

Examples you’ll often see:

```blade
{{ $service->uuid }}
{{ $client->firstname }} {{ $client->lastname }}
@foreach($price_detailed['options'] ?? [] as $option)
  {{ $option['name'] }} — {{ $option['price'] }}
@endforeach

```

- Keep **Text Mini** short and human-readable; reserve full markup for the HTML body.
- Watch the **HTML Preview** on the right to validate your structure and data placeholders.

- - - - - -

#### Best practices

- **Clone behavior:** Editing a SYSTEM template effectively overrides it (your changes become the active version); you can always re-apply defaults later by copying from a fresh environment.
- **Keep it accessible:** Use semantic HTML and inline styles; avoid images for critical info.
- **Localization parity:** Ensure every language tab has at least a basic subject/body.
- **Personalization:** Prefer `$client->firstname` over generic “Dear Customer”.
- **Links &amp; safety:** Use absolute URLs and include a clear **call to action** (e.g., “Visit Client Area”).
- **Testing:** Trigger the real event (e.g., create a proforma invoice) in a sandbox account to see the final message flowing through your selected **Notification Sender** (SMTP/PHPMail/Bell).

- - - - - -

#### Troubleshooting

- **Variables show blank:** That variable isn’t available for the event. Inspect other defaults for that event to see which fields are used.
- **Rendering issues:** Check unclosed tags and preview; simplify nested tables if needed.
- **Wrong language sent:** Confirm the client’s preferred language and that the localized version exists.

- - - - - -

##### Related setup (optional but recommended)

- Configure **Email &amp; Notifications → Notification Senders** (SMTP, PHPMail, Bell) so mail actually goes out.
- Adjust **Notification Layouts** if you want a shared header/footer or branding that wraps your templates.

That’s it—you’re ready to create polished, localized notifications that fit your brand and workflows.

# DNS Manager — Server Groups

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### 1) What Server Groups are for

A **Server Group** is a logical pool of one or more DNS servers that act together as the authoritative nameservers for the zones you assign to the group.  
You define the public **NS hostnames** for the group (what registrars and resolvers will see), and you attach real DNS servers to the group (PowerDNS or HestiaCP via PUQcloud modules). Any **Zone** linked to this group will be created/updated on **all** servers in the group.

**Path:** **Settings → DNS Manager → Server Groups**

[![Server Groups list (columns: Name, Description, NS Domains, actions)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/1.png)](https://doc.puq.info/uploads/images/gallery/2025-11/1.png)

- - - - - -

#### 2) When you need groups

- You operate **two or more** DNS servers for redundancy.
- You separate **production** vs **staging/tech** DNS (e.g., ACME DNS-01 challenge zone).
- You roll out **multi-region** authoritative DNS and want a single switch to move zones between clusters.
- You’re **migrating** from one platform to another and need both pools side by side.

- - - - - -

#### 3) Supported modules (for servers you’ll attach)

- **PUQ PowerDNS** — talks directly to PowerDNS HTTP API (typically port `8081`).
- **PUQ HestiaCP DNS** — manages zones/records through HestiaCP API.

> You can mix group types: one group may contain only PowerDNS nodes, another only HestiaCP, etc.

- - - - - -

#### 4) Before you start (prereqs)

- Prepare your **NS hostnames** (e.g., `ns1.example.com`, `ns2.example.com`) and make sure they will resolve to the public IPs of your real DNS servers.
- Add your physical DNS servers in **DNS Manager → Servers** and verify them with **Save and Test**.
- If these hostnames are used for **domain delegation**, update them at the registrar after you finish (or set glue records if needed).

- - - - - -

#### 5) Creating a Server Group — step by step

1. Go to **Server Groups** and click **+ Create**.
2. Fill in **Name** and (optional) **Description**.
3. In **NS Domains**, enter the authoritative NS hostnames — **one per line** (e.g., `ns1.appuw.com`, `ns2.appuw.com`).
4. Click **Save**.

[![Create DNS Server Group modal (Name, Description, NS Domains)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/2.png)](https://doc.puq.info/uploads/images/gallery/2025-11/2.png)

- - - - - -

#### 6) Editing a Server Group (fields explained)

Open the group you just created.

[![image-1763040701669.png](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/image-1763040701669.png)](https://doc.puq.info/uploads/images/gallery/2025-11/image-1763040701669.png)

##### Fields

<table id="bkmrk-field-purpose-notes-"><thead><tr><th>Field</th><th>Purpose</th><th>Notes / Examples</th></tr></thead><tbody><tr><td>**Name**</td><td>Friendly title of the group</td><td>e.g., `PowerDNS (devns)`</td></tr><tr><td>**NS TTL**</td><td>TTL for NS records this group advertises</td><td>300–900 is typical; use 300 during migrations</td></tr><tr><td>**NS Domains**</td><td>The public authoritative NS hostnames for the group</td><td>`ns1.appuw.com` and `ns2.appuw.com`, each on a new line</td></tr><tr><td>**DNS Servers**</td><td>The real servers (from **DNS Manager → Servers**) to run this group</td><td>Select 2+ for redundancy; can be PowerDNS or HestiaCP nodes</td></tr></tbody></table>

##### Actions

- **Reload All Zones** — push/refresh **every zone** assigned to this group across all attached servers (useful after adding/removing a server).
- **Save** — persist changes.

- - - - - -

#### 7) How groups, servers, and zones interact

- A **Zone** belongs to exactly **one Server Group**.
- A **Server Group** can contain **multiple servers** (recommended: at least two).
- When you create/edit a zone, PUQcloud writes changes to **all servers** in the selected group.
- Changing the group for a zone (via **Zones → Move To**) moves its management to the new server pool.

- - - - - -

#### 8) Typical patterns

##### A. ACME “Tech Zone” group (DNS-01 for SSL)

Create a group like **PowerDNS (devns)** with NS hostnames such as `devns1.yourdomain.com` and `devns2.yourdomain.com`, attach 2+ PowerDNS servers, and delegate these NS in the registry.  
Use this group to host a technical zone (e.g., `acme.yourdomain.com`) where SSL Manager will place TXT records during issuance. In target zones you only set CNAME for `_acme-challenge` pointing into the tech zone; Let’s Encrypt follows the CNAME and validates TXT there.

##### B. Production authoritative DNS

Create a group **PowerDNS ns1-2** with `ns1.example.com` and `ns2.example.com`, attach your production servers, and assign all public zones to this group.

##### C. Migration between platforms

Keep **Group A (HestiaCP)** and **Group B (PowerDNS)** simultaneously.  
Import zones to Group B, test, then in **Zones** use **Move To** to switch each zone from A to B. Lower **NS TTL** before switching to reduce propagation delays.

- - - - - -

#### 9) Best practices

- Always have **≥2 servers** per group, ideally in different networks/regions.
- Choose **clear names**: `PowerDNS ns1-2`, `PowerDNS (devns)`, `HestiaCP-EU`.
- Keep **NS TTL** low (300) during migrations or frequent changes.
- After adding a server to a group, run **Reload All Zones**.
- Ensure **NS Domains** here match the **actual delegation** at your registrar.
- Secure server APIs (IP allowlist, HTTPS where applicable) and use distinct API keys.

- - - - - -

#### 10) Troubleshooting

<table id="bkmrk-symptom-likely-cause"><thead><tr><th>Symptom</th><th>Likely cause</th><th>Fix</th></tr></thead><tbody><tr><td>Zones don’t appear on a new server</td><td>Server not attached to the group or not reloaded</td><td>Add it under **DNS Servers**, click **Reload All Zones**</td></tr><tr><td>Public NS answers are inconsistent</td><td>One node out of sync or offline</td><td>Check server health, run **Reload All Zones**, review logs</td></tr><tr><td>Registrar warns about NS mismatch</td><td>NS hostnames in group don’t match registry delegation</td><td>Align **NS Domains** here with registrar NS; wait for TTL</td></tr><tr><td>SSL DNS-01 fails</td><td>Tech group/zone mis-delegated or CNAME wrong</td><td>Verify tech zone delegation and `_acme-challenge` CNAME chain</td></tr></tbody></table>

# DNS Manager — Servers

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### 1) Purpose of this section

In **Servers** you connect your **real DNS servers** to PUQcloud. Then you attach these servers to **Server Groups**, and groups power your **Zones** (create/update records, reload zones, import/export).

**Path:** **Settings → DNS Manager → Servers**  
[![DNS Servers list (e.g., hCP-211 / pDNS-194 / pDNS-204, Module column visible)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/3.png)](https://doc.puq.info/uploads/images/gallery/2025-11/3.png)

- - - - - -

#### 2) Supported modules

PUQcloud integrates via pluggable modules:

##### • PUQ PowerDNS

Direct integration with the **PowerDNS HTTP API** (typically port `8081`). The panel creates/updates zones and records through the REST API and provides **Save and Test** to confirm connectivity and show the PowerDNS version.

**Use when:** you run your own PowerDNS authoritative servers and want fast, transparent automation (including ACME/SSL “tech zone” workflows).

##### • PUQ HestiaCP DNS

Manages zones/records via the **HestiaCP API**. Operations are performed under a HestiaCP user/API key you supply.

**Use when:** your DNS lives inside HestiaCP and you want to centralize control via PUQcloud.

> You can run both modules side-by-side in different **Server Groups** (handy for migrations or prod/staging separation).

- - - - - -

#### 3) Create a server — step by step

1. Open **Servers** and click **+ Create**.
2. Enter a **Name** (a friendly label).
3. Choose **Module**: **PUQ PowerDNS** or **PUQ HestiaCP DNS**.
4. Click **Save** — you’ll land on the edit page with connection fields.

[![Create DNS Server (module selector with PUQ PowerDNS / PUQ HestiaCP DNS)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/4.png)](https://doc.puq.info/uploads/images/gallery/2025-11/4.png)

- - - - - -

#### 4) Configure PowerDNS (PUQ PowerDNS)

**[![Edit DNS Server (PowerDNS): Name, Description, Server, API Key; buttons Save / Save and Test / Import](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/5.png)](https://doc.puq.info/uploads/images/gallery/2025-11/5.png)**

[![Connection Test Result — “Server is available”, PowerDNS version shown](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/6.png)](https://doc.puq.info/uploads/images/gallery/2025-11/6.png)

##### Fields

<table id="bkmrk-field-what-to-enter-"><thead><tr><th>Field</th><th>What to enter</th><th>Example / Tip</th></tr></thead><tbody><tr><td>**Name**</td><td>Any friendly name</td><td>`pDNS-194`</td></tr><tr><td>**Description**</td><td>Optional note</td><td>`PowerDNS on dev node`</td></tr><tr><td>**Server**</td><td>Full API URL incl. protocol &amp; port</td><td>`http://203.0.113.194:8081` or `https://dns.example.com:8081`</td></tr><tr><td>**API Key**</td><td>PowerDNS API token (`api-key=` in config)</td><td>Create a **dedicated key** for PUQcloud only</td></tr></tbody></table>

##### Buttons

- **Save and Test** — checks connectivity and displays the **PowerDNS version**.
- **Import** — pulls existing zones from this server (useful on first attach).
- **Save** — persists the settings.

##### Security tips

- **IP-restrict** the PowerDNS API to your PUQcloud host.
- Prefer **HTTPS** to the API, use a separate **API Key** with least privilege.
- Watch PowerDNS logs during imports or bulk changes.

- - - - - -

#### 5) Configure HestiaCP (PUQ HestiaCP DNS)

After selecting **PUQ HestiaCP DNS**, the edit form shows the HestiaCP API connection fields (API URL + authentication parameters according to your HestiaCP setup — token or user/password).

**Recommendations:**

- Create a **dedicated HestiaCP user/API key** for PUQcloud.
- Confirm the API is **enabled and reachable** from the PUQcloud host.
- After **Save and Test**, verify by creating a test zone under **Zones**.

- - - - - -

#### 6) Add the server to a group

Once the server tests OK, go to **Settings → DNS Manager → Server Groups → Edit** and add it under **DNS Servers** for the target group.  
Then click **Reload All Zones** to deploy **all group zones** onto this newly attached node.

- - - - - -

#### 7) Typical scenarios

##### A. PowerDNS cluster for the ACME tech zone

1. Add **2+ PowerDNS servers** (in **Servers**), test each with **Save and Test**.
2. Create a group **PowerDNS (devns)**, set **NS Domains** (e.g., `devns1.example.com`, `devns2.example.com`), and attach both servers.
3. Delegate those NS at your registrar.
4. Create the **tech zone** `acme.example.com` in this group.
5. In **SSL Manager → Certificate Authorities**, select this tech zone as **DNS Zone**. Done.

##### B. Migrating from HestiaCP to PowerDNS

1. Connect your PowerDNS servers.
2. Import zones from HestiaCP (use the **Import** button on PowerDNS or **Zones → Export / Import**).
3. Create a new **Server Group** for PowerDNS and **Move To** switch zones into it.
4. After validation, change domain **delegation** at the registrar to the new NS.

- - - - - -

#### 8) Best practices

- **Redundancy:** attach **at least two** servers to each group (ideally different regions/ASNs).
- **Naming:** keep labels clear — `pDNS-194`, `pDNS-204`, `hCP-211`.
- Always run **Save and Test** after changing connection params.
- Keep zone **TTL 300–600s** during active changes/migrations.
- Lock down APIs by **IP allowlists** and use **HTTPS** where possible.
- Export zones as backups before **bulk operations**.

- - - - - -

#### 9) Troubleshooting

<table id="bkmrk-symptom-likely-cause"><thead><tr><th>Symptom</th><th>Likely cause</th><th>Fix</th></tr></thead><tbody><tr><td>**Save and Test** fails</td><td>Wrong URL/port/key or firewall blocks access</td><td>Verify `http(s)://host:port`, API key, and allow the PUQcloud IP</td></tr><tr><td>Zone import incomplete</td><td>API/user lacks permissions</td><td>Grant appropriate rights or use **Zones → Import**</td></tr><tr><td>Group zones don’t deploy to the new server</td><td>Server not added to **Server Group**</td><td>Add it, then **Reload All Zones**</td></tr><tr><td>Different answers from NS nodes</td><td>One node out of sync or offline</td><td>Check health/logs, **Reload All Zones**, restore connectivity</td></tr></tbody></table>

# DNS Manager — Zones

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### 1) What a Zone is and how it works

A **DNS Zone** is the set of DNS records for a domain (e.g., `example.com`) or a **reverse** domain (`in-addr.arpa`, `ip6.arpa`).  
In PUQcloud, every zone is assigned to exactly one **Server Group**, and that group has one or more real DNS servers attached. As a result:

- When you create or change records in **Zones**, PUQcloud writes those changes to **all servers in the selected group**.
- Zone-level meta (e.g., **Primary NS**, **NS Domains**, **SOA fields**) is stored with the zone and deployed to the group’s servers.

**Path:** **Settings → DNS Manager → Zones**

[![DNS Zones — list (columns: Name, Record Count, Server Group, Primary NS, Admin Email, Actions)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/7.png)](https://doc.puq.info/uploads/images/gallery/2025-11/7.png)

- - - - - -

#### 2) The Zones list &amp; actions

The list shows all zones, how many records each has, which **Server Group** it belongs to, the **Primary NS** (SOA MNAME), and the **Admin Email** (SOA RNAME).

Per-row actions:

- **Edit** — open the zone editor
- **Delete** — remove the zone

Top-right: **+ Create** to add a new zone.

- - - - - -

#### 3) Create a zone

Click **+ Create** and fill the form.

[![Create DNS Zone (Name, DNS Server Group, SOA Admin Email, SOA TTL, Refresh, Retry, Expire, Minimum TTL)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/8.png)](https://doc.puq.info/uploads/images/gallery/2025-11/8.png)

##### Field reference

<table id="bkmrk-field-description-ti"><thead><tr><th>Field</th><th>Description</th><th>Tip</th></tr></thead><tbody><tr><td>**Name**</td><td>Zone name. For forward zones use `example.com`. For reverse: IPv4 uses `x.y.z.in-addr.arpa`, IPv6 uses the `…ip6.arpa` nibble format.</td><td>Use correct reverse notation.</td></tr><tr><td>**DNS Server Group**</td><td>Which group of servers will host this zone</td><td>Choose the group you prepared (e.g., *PowerDNS ns1-2* or *PowerDNS (devns)* for the ACME tech zone).</td></tr><tr><td>**SOA Admin Email**</td><td>Email in SOA (RNAME, with a dot instead of `@`)</td><td>Commonly `hostmaster@domain.tld`.</td></tr><tr><td>**SOA TTL (seconds)**</td><td>TTL for the SOA record</td><td>`3600` is a safe default.</td></tr><tr><td>**SOA Refresh**</td><td>Slave refresh interval</td><td>`86400` (24h) typical.</td></tr><tr><td>**SOA Retry**</td><td>Retry interval if refresh fails</td><td>`7200` (2h).</td></tr><tr><td>**SOA Expire**</td><td>When slaves consider zone expired</td><td>`1209600` (14 days).</td></tr><tr><td>**SOA Minimum TTL**</td><td>Negative caching (minimum TTL)</td><td>`3600`.</td></tr></tbody></table>

Click **Save** to create the zone.

- - - - - -

#### 4) Edit a zone

Opening a zone leads to **Edit DNS Zone**.

[![Edit DNS Zone (Name, DNS Server Group, Primary NS, NS Domains, SOA fields; buttons Create Record / Reload Zone / Move To / Export / Import / Save)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/9.png)](https://doc.puq.info/uploads/images/gallery/2025-11/9.png)

##### What you see

- **Name** — zone name (read-only for some reverse templates).
- **DNS Server Group** — which group serves this zone.
- **Primary NS** — SOA MNAME (main NS).
- **NS Domains** — authoritative nameserver hostnames shown as badges. These should match your actual registrar delegation.
- **SOA** fields — TTL, Refresh, Retry, Expire, Minimum TTL.
- **Records table** — the list of all records in this zone.

##### Top actions

- **+ Create Record** — add A/AAAA/CNAME/TXT/MX/SRV/NS/PTR etc.
- **Reload Zone** — force-sync this zone across all servers in the group.
- **Move To** — move the zone to another **Server Group** (useful for migrations).
- **Export / Import** — export to/import from a standard zone format (PowerDNS/BIND-compatible).
- **Save** — save changes to the zone **properties** (record edits have their own save flow in the record modal).

- - - - - -

#### 5) Add records

Click **+ Create Record**.

[![Create DNS Record (Type, TTL, Name; show PTR target field example)](https://doc.puq.info/uploads/images/gallery/2025-11/scaled-1680-/10.png)](https://doc.puq.info/uploads/images/gallery/2025-11/10.png)

##### Common record types

- **A / AAAA** — IPv4/IPv6 address mappings (e.g., `www → 203.0.113.10`).
- **CNAME** — alias (e.g., `www → @` or `example.com`).
- **TXT** — free-form text (SPF, DKIM, ACME challenges).
- **MX** — mail exchangers with priority.
- **SRV** — service records (VoIP, LDAP, etc.).
- **NS** — delegate sub-zones to other nameservers.
- **PTR** — reverse mapping (IP to hostname) for reverse zones.

##### Examples (forward)

- `@` → A → `203.0.113.10`
- `www` → CNAME → `@`

##### Example (mail)

- `@` → MX (10) → `mx1.example.com.`
- `@` → TXT → `v=spf1 include:spf.example.net -all`

##### Reverse example (PTR)

In `0.168.192.in-addr.arpa`:

- `130` → PTR → `host130.example.com.`

- - - - - -

#### 6) ACME / SSL with a technical zone

For DNS-01 challenges, SSL Manager commonly uses a **technical zone** (e.g., `acme.yourdomain.tld`) hosted by a dedicated **Server Group** (e.g., *PowerDNS (devns)*). The workflow:

1. In the **target** zone (the zone for which you want a cert), create a **CNAME**:  
    `_acme-challenge.yourdomain.tld → _acme-challenge.yourdomain.tld.acme.yourdomain.tld.`
2. During issuance, SSL Manager automatically creates/updates the **TXT** in the **tech zone** (via PowerDNS/Hestia modules).
3. The CA queries `_acme-challenge` on the target zone, **follows the CNAME** into the tech zone, and reads the TXT.
4. Once validated, the certificate becomes **ACTIVE** (see **SSL Certificates** guide).

> Ensure the tech group’s **NS Domains** are really authoritative and are properly delegated at the registrar.

- - - - - -

#### 7) Export / Import

- **Export** — download the zone in a PowerDNS/BIND-compatible format (great for backups and migrations).
- **Import** — upload a zone file to quickly populate records. After import, verify records and click **Reload Zone**.

- - - - - -

#### 8) Best practices

- Use **TTL 300–600s** while actively changing/migrating; raise later for stability.
- Keep **≥2 NS** in the serving group (prefer distinct regions/ASNs).
- For **ACME**, keep a **separate tech zone** and **separate group**.
- Always **Export** before bulk edits.
- After changing a zone’s **Server Group**, use **Move To** and then **Reload Zone**.
- Regularly verify delegation (`dig NS yourdomain.tld`) and key records resolution from multiple locations.

- - - - - -

#### 9) Troubleshooting

<table id="bkmrk-symptom-likely-cause"><thead><tr><th>Symptom</th><th>Likely cause</th><th>Fix</th></tr></thead><tbody><tr><td>Public resolvers can’t see your changes</td><td>Registrar delegation wrong or **NS Domains** don’t match real NS</td><td>Correct delegation, align **NS Domains**, wait for TTL</td></tr><tr><td>Different answers on NS1 vs NS2</td><td>One node out of sync or offline</td><td>**Reload Zone**, check server health, review logs</td></tr><tr><td>ACME DNS-01 fails</td><td>Missing/wrong CNAME to tech zone; caching</td><td>Validate with `dig`, fix CNAME/TXT, wait for TTL</td></tr><tr><td>Zone import errors</td><td>Incompatible format or invalid entries</td><td>Fix offending lines, re-import</td></tr></tbody></table>

# SSL Manager - Certificate Authorities

<article class="text-token-text-primary w-full focus:outline-none [--shadow-height:45px] has-data-writing-block:pointer-events-none has-data-writing-block:-mt-(--shadow-height) has-data-writing-block:pt-(--shadow-height) [&:has([data-writing-block])>*]:pointer-events-auto [content-visibility:auto] supports-[content-visibility:auto]:[contain-intrinsic-size:auto_100lvh] scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]" data-scroll-anchor="false" data-testid="conversation-turn-20" data-turn="assistant" data-turn-id="request-WEB:d6ffa71c-b040-4199-a144-4b49b9e11a0c-15" dir="auto" id="bkmrk-puqcloud-panel-order" tabindex="-1">### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

**Certificate Authorities (CA)** are provider profiles the panel uses to issue and renew SSL/TLS certificates via ACME. PUQcloud follows a simple rule: **one module per CA**.  
Currently supported modules:

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- **Let’s Encrypt** (plus **Let’s Encrypt Staging** for safe testing)
- **ZeroSSL**

</div></div></div></div></div></div></div>**Where to find it:** **Settings → SSL Manager → Certificate Authorities**

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- - - - - -

</div></div></div></div></div></div></div>#### What you can do here

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- Create and configure CA profiles (ACME account, technical DNS zone, timeouts).
- Test connectivity to the CA (**Save and Test**) and see the CA directory endpoints.
- Keep multiple profiles (e.g., Production vs Staging) and select them per-certificate.

- - - - - -

</div></div></div></div></div></div></div>#### Create a CA Profile (step-by-step)

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>1. Go to **Settings → SSL Manager → Certificate Authorities** and click **+ Create**.
2. Enter **Name** and choose **Module = PUQ ACME (active)** → **Save**.
3. Click **Edit** on the new CA profile and fill in the fields (see the Field Reference below).
4. Click **Save and Test**. A modal should show **API is available** plus a dump of **ACME directory endpoints**.
5. Click **Save**.

- - - - - -

</div></div></div></div></div></div></div>#### Field Reference (when &amp; why)

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div><div><div><table class="w-fit min-w-(--thread-content-width)" data-end="2664" data-start="1251"><thead data-end="1286" data-start="1251"><tr data-end="1286" data-start="1251"><th data-col-size="sm" data-end="1259" data-start="1251">Field</th><th data-col-size="md" data-end="1272" data-start="1259">What it is</th><th data-col-size="md" data-end="1286" data-start="1272">When / Why</th></tr></thead><tbody data-end="2664" data-start="1301"><tr data-end="1401" data-start="1301"><td data-col-size="sm" data-end="1312" data-start="1301">**Name**</td><td data-col-size="md" data-end="1336" data-start="1312">Internal display name</td><td data-col-size="md" data-end="1401" data-start="1336">Use meaningful names like `LE PROD`, `LE STAGING`, `ZeroSSL`.</td></tr><tr data-end="1515" data-start="1402"><td data-col-size="sm" data-end="1420" data-start="1402">**Description**</td><td data-col-size="md" data-end="1441" data-start="1420">Short profile note</td><td data-col-size="md" data-end="1515" data-start="1441">Note target usage: “production issuance”, “sandbox”, or project scope.</td></tr><tr data-end="1661" data-start="1516"><td data-col-size="sm" data-end="1544" data-start="1516">**Certificate Authority**</td><td data-col-size="md" data-end="1568" data-start="1544">Selected CA directory</td><td data-col-size="md" data-end="1661" data-start="1568">Use **Let’s Encrypt Staging** for tests, **Let’s Encrypt** or **ZeroSSL** for production.</td></tr><tr data-end="1834" data-start="1662"><td data-col-size="sm" data-end="1703" data-start="1662">**Email address for the ACME account**</td><td data-col-size="md" data-end="1752" data-start="1703">Email used to register/manage the ACME account</td><td data-col-size="md" data-end="1834" data-start="1752">Required. Prefer a shared ops mailbox (e.g., `it@company.tld`) for continuity.</td></tr><tr data-end="1974" data-start="1835"><td data-col-size="sm" data-end="1867" data-start="1835">**EAB Key ID / EAB HMAC Key**</td><td data-col-size="md" data-end="1894" data-start="1867">External Account Binding</td><td data-col-size="md" data-end="1974" data-start="1894">Needed by some providers/plans (e.g., ZeroSSL). Leave empty if not required.</td></tr><tr data-end="2150" data-start="1975"><td data-col-size="sm" data-end="1990" data-start="1975">**DNS Zone**</td><td data-col-size="md" data-end="2050" data-start="1990">**Technical zone** where TXT records are actually created</td><td data-col-size="md" data-end="2150" data-start="2050">Example: `acme.puqcloud.com`. The target domain’s `_acme-challenge` will **CNAME** to this zone.</td></tr><tr data-end="2260" data-start="2151"><td data-col-size="sm" data-end="2185" data-start="2151">**Allow wildcard certificates**</td><td data-col-size="md" data-end="2205" data-start="2185">Allows `*.domain`</td><td data-col-size="md" data-end="2260" data-start="2205">Enable if you plan wildcard issuance (DNS-01 only).</td></tr><tr data-end="2395" data-start="2261"><td data-col-size="sm" data-end="2292" data-start="2261">**DNS Record TTL (seconds)**</td><td data-col-size="md" data-end="2322" data-start="2292">TTL for created DNS records</td><td data-col-size="md" data-end="2395" data-start="2322">30–60 speeds up DCV; raise slightly if your DNS is slow to propagate.</td></tr><tr data-end="2513" data-start="2396"><td data-col-size="sm" data-end="2424" data-start="2396">**API Timeout (seconds)**</td><td data-col-size="md" data-end="2458" data-start="2424">Max wait for ACME API responses</td><td data-col-size="md" data-end="2513" data-start="2458">Increase (e.g., 20–30) on flaky networks/CI bursts.</td></tr><tr data-end="2664" data-start="2514"><td data-col-size="sm" data-end="2543" data-start="2514">**Save and Test** (button)</td><td data-col-size="md" data-end="2564" data-start="2543">Connectivity check</td><td data-col-size="md" data-end="2664" data-start="2564">Opens a modal with **API is available** and the list of ACME endpoints. Investigate if it fails.</td></tr></tbody></table>

</div></div>- - - - - -

</div></div></div></div></div></div></div>#### Provider specifics

##### Let’s Encrypt (incl. Staging)

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- Uses **DNS-01 via a technical zone**:
    
    
    1. On the **target domain** you create a **CNAME** for `_acme-challenge.domain` pointing into your technical zone (e.g., `_acme-challenge.domain CNAME <token>.acme.puqcloud.com`).
    2. Let’s Encrypt queries `_acme-challenge` on the target domain, **follows the CNAME** into the tech zone, and reads the TXT value there.
- **Let’s Encrypt Staging** is ideal for testing without spending production rate limits.
- Wildcards (`*.domain`) require DNS-01 and the **Allow wildcard** flag.

</div></div></div></div></div></div></div>##### ZeroSSL

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- Supports **account API keys** so that **issued certificates appear in your ZeroSSL account**.
- If you **don’t** provide keys, the system will create **temporary keys per certificate** automatically.
- With a paid ZeroSSL plan (~$12/month), generate API keys and add them to PUQcloud so all certs are visible/manageable in your ZeroSSL panel.

- - - - - -

</div></div></div></div></div></div></div>#### Good practices

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- Start with **Let’s Encrypt Staging** to validate your flow, then enable **Let’s Encrypt** (production).
- Keep **DNS TTL** low (30–60s) in the CA profile to speed up challenges.
- For ZeroSSL at scale, use **account keys** for visibility and auditing.

- - - - - -

</div></div></div></div></div></div></div>#### Migration cheat-sheet (e.g., from Let’s Encrypt to ZeroSSL)

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>1. **Create** a new CA profile (add EAB/API keys if required by your ZeroSSL plan).
2. **Save and Test** to confirm directory endpoints.
3. Check/update your **technical DNS zone** if it differs from previous setup.
4. **Issue a test cert** on a non-critical domain to validate DCV.
5. For **new** certs, select the new CA in the creation form. For **existing** certs, you cannot “switch issuer”; **issue a new** certificate under the new CA and deploy it.
6. Verify **Days Remaining / Auto Renew** behavior on new certs (and, with ZeroSSL keys, that issues appear in the ZeroSSL account).

- - - - - -

</div></div></div></div></div></div></div>#### Troubleshooting

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- **“Save and Test” doesn’t show “API is available”**
    
    
    - Check selected CA, network access, EAB keys (if required), and **API Timeout**.
- **LE DNS validation fails**
    
    
    - Confirm the **CNAME** is correct and already resolves to the tech zone; wait for **TTL**.
- **Wildcard fails**
    
    
    - Ensure **Allow wildcard** is enabled and you are using **DNS-01**.
- **ZeroSSL certificates don’t show in the ZeroSSL dashboard**
    
    
    - Add **account API keys** to the CA profile (temporary per-certificate keys don’t link certs to your account).

</div></div></div></div></div></div></div><div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div></div></div></div></div></div></div>#### Related

<div><div><div><div><div data-message-author-role="assistant" data-message-id="3f828955-9e77-4062-8b3a-2d9922fdd868" data-message-model-slug="gpt-5-thinking"><div><div>- **SSL Certificates** — issuance workflow (Draft → CSR → Pending (CNAME) → Active), auto-renew, metadata.
- **DNS Manager** — managing your technical zone and verifying `_acme-challenge` records.
- **Email &amp; Notifications** — reminders for expiry and operational alerts.

</div></div></div></div></div></div></div></article>

# SSL Manager - SSL Certificates

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Overview

The **SSL Certificates** section is your single place to issue, renew, import, and store SSL/TLS certificates.

Each certificate page is split into two columns:

- **Left column** — generated by the panel and **identical for all certificates** (fields, statuses, PEM blocks, metadata).
- **Right column** — **module-specific**, driven by the selected CA module (PUQ ACME). It may show provider-specific hints or controls.

**Where to find it:** **Settings → SSL Manager → SSL Certificates**

- - - - - -

#### What you can do

- Create a certificate (set the domain, choose a CA profile, add SANs/aliases).
- Generate a **CSR** and a private key.
- Complete domain control validation (DNS-01 via CNAME → tech zone).
- Enable **Auto-renewal** and track **Days Remaining**.
- View/copy **Certificate / Private Key / CSR (PEM)**.
- Change status (Draft → Active via standard actions).
- Delete certificates.
- (Optionally) Import existing certificates.

> The private key is **encrypted in the database** and **visible only on the certificate’s page**.

- - - - - -

#### Certificates list

The list shows:

- **Domain**, **Certificate Authority (PUQ ACME)**
- **Status** (e.g., **ACTIVE**, **“X DAYS”**, **“AUTO RENEW: 7”**)
- Actions: **Edit / Delete**
- **+ Create** to add a new certificate

- - - - - -

#### Create a certificate (step-by-step)

1. Click **+ Create** in **SSL Certificates**.
2. Fill in:
    
    
    - **Domain** — primary domain (CN).
    - **Certificate Authority** — select a CA profile (e.g., Let’s Encrypt / ZeroSSL).
    - **Aliases** — SAN domains, one per line (optional).
3. Click **Save** — this **only saves form data** (no keys or certificate yet).
4. Click **Generate CSR**:
    
    
    - The system creates the **CSR** and **Private Key** (they **do not exist** before this step).
    - The private key is encrypted in DB; it is **only** visible on this page.
5. Status switches to **Pending**. The panel shows instructions to create a **CNAME** for `_acme-challenge.<domain>` pointing into your **tech zone** (e.g., `acme.puqcloud.com`).
6. Once the CNAME resolves, issuance **starts automatically**. When finished, the card turns **Active** and shows all metadata/PEMs.

- - - - - -

#### Certificate page — left column fields

##### Top block (editable in Draft)

- **Certificate Status (Draft toggle)** — draft state.
- **Auto Renew Days** — how many days before expiry to auto-renew (typically `7`).
- **Days Remaining** — remaining days until expiry (LE defaults are ~90 days from issue).
- **Email (ACME account email)** and **Agree to Terms of Service** — required by the CA policy.

##### Domain &amp; Organization

- **Domain** — CN.
- **Aliases (SANs)** — additional domains/subdomains, one per line.
- **Wildcard** — `*.domain` (works with DNS-01 and “Allow wildcard” enabled in the CA profile).
- **Email (contact)** — certificate contact (may differ from ACME account email, if present).
- **Organization / Organizational Unit / Country / State / Locality** — subject fields (as required by policy).

##### CA / Crypto / Metadata

- **Certificate Authority** — selected profile (read-only once active).
- **Module = PUQ ACME** — issuance module.
- **Key Size**, **Signature Algorithm** — set/visible after CSR/issuance.
- **Issued At / Expires At / CSR Valid From / Renewed At** — lifecycle timestamps.
- **Issuer** — e.g., Let’s Encrypt / Let’s Encrypt Staging.
- **Serial Number (DEC/HEX)**, **Fingerprints (MD5/SHA1/SHA256)** — identifiers.
- **Certificate PEM / Private Key PEM / CSR PEM** — PEM blocks.

##### Actions

- **Generate CSR** — create CSR + private key (mandatory before issuance).
- **Change Status** — service actions.
- **Save** — persist form changes (no CA interaction).

> In **Draft**, the upper part of the left column is editable; after issuance, many fields become read-only.

- - - - - -

#### Workflow: statuses &amp; transitions

1. **Draft**
    
    
    - Edit primary fields (domain, SANs, email, ToS, auto-renew threshold).
    - **Save** only stores data; no key/CSR is created.
2. **Generate CSR**
    
    
    - Creates **CSR** and **Private Key** (encrypted; visible only on this page).
    - Crypto fields/PEM blocks appear.
3. **Pending (CNAME → tech zone)**
    
    
    - The panel displays the exact **CNAME** instruction for `_acme-challenge.<domain>` → into your tech zone.
    - As soon as the CNAME resolves, the panel continues issuance (DNS-01).
4. **Active**
    
    
    - Certificate is issued; **Certificate PEM** is available; a success panel shows **“Certificate is active!”**.
    - **Days Remaining** and **Auto Renew** operate; crypto/metadata are filled.
5. **Expired / Error / Revoked**
    
    
    - **Expired** — reissue/renew required.
    - **Error** — check logs/CA setup/DNS path.
    - **Revoked** — revoked per CA policy.

- - - - - -

#### Auto-renewal

- Controlled by **Auto Renew Days** (e.g., `7`).
- The panel tracks **Days Remaining** and triggers renewal ahead of expiry.
- For LE/ZeroSSL via DNS-01, ensure your **CNAME** and tech zone remain intact.

- - - - - -

#### Importing an existing certificate (if used)

1. Open **SSL Certificates → + Import** (or equivalent).
2. Paste **CRT / Private Key / CA Bundle** in PEM.
3. **Save** and verify validity/expiry.
4. Configure **Auto Renew** manually if needed (imports are usually not tied to ACME).

- - - - - -

#### Key security

- The private key is created at **Generate CSR**, **encrypted in the database**, and **never shown outside** this certificate page.
- Visibility follows your role-based access.
- Export a secure copy and store it in your organization’s secret vault.

- - - - - -

#### Troubleshooting

<div id="bkmrk-symptom-likely-cause"><div><table class="w-fit min-w-(--thread-content-width)" data-end="6294" data-start="5636"><thead data-end="5668" data-start="5636"><tr data-end="5668" data-start="5636"><th data-col-size="sm" data-end="5646" data-start="5636">Symptom</th><th data-col-size="sm" data-end="5661" data-start="5646">Likely cause</th><th data-col-size="md" data-end="5668" data-start="5661">Fix</th></tr></thead><tbody data-end="6294" data-start="5683"><tr data-end="5828" data-start="5683"><td data-col-size="sm" data-end="5706" data-start="5683">Stuck in **Pending**</td><td data-col-size="sm" data-end="5743" data-start="5706">CNAME not resolving / wrong target</td><td data-col-size="md" data-end="5828" data-start="5743">Verify `_acme-challenge.<domain>` name and target in tech zone; wait for **TTL**.</td></tr><tr data-end="5926" data-start="5829"><td data-col-size="sm" data-end="5854" data-start="5829">Issuance doesn’t start</td><td data-col-size="sm" data-end="5874" data-start="5854">CSR not generated</td><td data-col-size="md" data-end="5926" data-start="5874">Click **Generate CSR**, then follow CNAME steps.</td></tr><tr data-end="6061" data-start="5927"><td data-col-size="sm" data-end="5973" data-start="5927">No **“Certificate is active!”** after CNAME</td><td data-col-size="sm" data-end="6001" data-start="5973">DCV incomplete / CA error</td><td data-col-size="md" data-end="6061" data-start="6001">Check logs; ensure the tech zone is publicly resolvable.</td></tr><tr data-end="6199" data-start="6062"><td data-col-size="sm" data-end="6091" data-start="6062">Auto-renew doesn’t trigger</td><td data-col-size="sm" data-end="6133" data-start="6091">Bad **Auto Renew Days** or broken CNAME</td><td data-col-size="md" data-end="6199" data-start="6133">Use a sensible threshold (e.g., 7) and verify CNAME/tech zone.</td></tr><tr data-end="6294" data-start="6200"><td data-col-size="sm" data-end="6225" data-start="6200">PEM mismatch on import</td><td data-col-size="sm" data-end="6255" data-start="6225">Key/cert pair doesn’t match</td><td data-col-size="md" data-end="6294" data-start="6255">Import the correct pair or reissue.</td></tr></tbody></table>

</div></div>- - - - - -

#### Related

- **Certificate Authorities** — profiles, tech zone, TTL, EAB.
- **DNS Manager** — manage your tech zone and verify `_acme-challenge` resolution.
- **Notifications** — expiry and operational alerts.

# Manage General on Admin Area

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

The **General** page centralizes platform-wide defaults and housekeeping rules. It’s organized into four tabs:

1. **Time Based** – how long to keep logs and histories
2. **Finance** – billing and balance limits
3. **Client** – customer-facing timeouts
4. **Social** – your company’s social/profile links

<p class="callout info">All tabs share a **Save** button (top-right). Changes apply system-wide.</p>

- - - - - -

#### Time Based (log retention)

Use this tab to control how long different histories are kept before cleanup jobs remove them.

- **Admin Session Log History** – days to keep admin login/session logs.
- **Client Session Log History** – days to keep client session logs.
- **Activity Log History** – days to keep system activity logs (actions, events).
- **Module Log History** – days to keep module-specific logs.
- **Notification History** – days to keep notification entries.
- **Completed Task Queue History** – days to keep completed queue items.
- **Task Queue History** – days to keep all queue task records.
- **User Verification Code Lifetime** – minutes a verification code remains valid.

**Tips**

- Shorter values reduce storage usage and improve log queries.
- Keep compliance needs in mind (audit requirements) before trimming aggressively.

General › Time Based tab with retention fields.

[![image-1758202056756.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758202056756.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758202056756.png)

- - - - - -

#### Finance (billing defaults &amp; limits)

Define monetary guardrails and invoice behavior.

- **Default Invoice Due Days** – number of days after issue date when invoices are due.
- **Minimum Add Funds Amount** – smallest wallet/top-up amount allowed.
- **Maximum Add Funds Amount** – largest single top-up amount allowed.
- **Maximum Client Balance** – hard ceiling for a client’s total wallet balance.

**Best practices**

- Align *Default Invoice Due Days* with your dunning/collections process.
- Set realistic *Min/Max Add Funds* to reduce micro-payments and risk.
- Use *Max Client Balance* to avoid accounting or AML headaches.

General › Finance tab with invoice and balance limits.

[![image-1758202070700.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758202070700.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758202070700.png)

- - - - - -

#### Client (customer timeouts)

A small but important setting for customer security &amp; UX.

- **Reset Password URL Expire (minutes)** – how long a password-reset link remains valid after it’s issued.

**Guidance**

- 30–120 minutes is common; lower values are more secure, higher values are more forgiving.

General › Client tab with reset link expiry.

[![image-1758202083150.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758202083150.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758202083150.png)

- - - - - -

#### Social (brand &amp; contact presence)

Store the official social/profile identifiers used across notifications and the client portal. Fields include:

- **Facebook, YouTube, LinkedIn, WhatsApp, Telegram, Twitter (X), Viber, Discord, Reddit, Vimeo, GitHub, Flickr, Skype, Bitbucket, Gitter, Slack**.

**Usage**

- Enter full URLs where applicable; for chat apps, follow the placeholder notes (e.g., WhatsApp in full international format, Discord invite URL path).
- These can be pulled into notification templates or shown in the client area footer/headers, depending on your theme.

General › Social tab with profile/link fields.

[![image-1758202093382.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758202093382.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758202093382.png)

- - - - - -

#### Workflow summary

1. Go to **Dashboard → Settings → General**.
2. Work through each tab (**Time Based → Finance → Client → Social**).
3. Click **Save** (top-right).
4. If you reduced retention periods, confirm your **Scheduler/Cleanup** tasks are enabled (so old data is actually purged).
5. Review notification templates/layouts if you plan to surface your social links there.

- - - - - -

#### Quick defaults (safe starting points)

- **Admin/Activity/Module logs:** 7–30 days
- **Client/Task queues:** 7–14 days
- **Verification code lifetime:** 10–30 minutes
- **Invoice due days:** 7–14 days
- **Min/Max add funds:** set to your business model (e.g., 10 / 10,000)
- **Max client balance:** large enough for typical prepayments, but not unlimited

# Сheck Countries in the Admin Area

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

Follow these steps to review country records and their regions.

- - - - - -

#### Go to Countries

- In the left menu, open **Settings → General → Countries**.  
    You’ll see a paginated table with columns **Flag**, **Code**, **Name**, **Calling Code**, and **Regions**.  
    Use the **Search** box (top-right) and the **Show entries** dropdown to filter and page through results.

Countries list with search, pagination, and “Regions (eye)” action.

[![image-1758202738977.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758202738977.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758202738977.png)

#### View a country’s regions

- In the **Regions** column, click the **eye** button for the country you want to inspect.

Regions modal listing Region Name, Native Name, and Code (with Close button).

[![image-1758202748215.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758202748215.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758202748215.png)

#### Tips

- Click column headers to sort (e.g., by **Code** or **Calling Code**).
- The Regions modal is read-only; use the **Close** button to return to the list.

# Create and manage Currencies in the Admin Area

### PUQcloud Panel

##### [Order Now](https://puqcloud.com/puqcloud-panel.php) | [Download](https://github.com/puqcloud/PUQcloud) | [FAQ](https://faq.puqcloud.com/)

#### Where to find it

1. In the left menu go to **Settings → General → Currencies**.  
    *Currencies list with search, paging, and row actions (Edit/Delete).*
    
    [![image-1758204026462.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758204026462.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758204026462.png)

- - - - - -

#### Create a new currency

1. Click **+ Create** (top-right of the page).
2. In the **Create** modal, fill in:
    
    
    - **Code** – the ISO currency code (e.g., `USD`, `EUR`, `JPY`).
    - **Prefix** – symbol shown **before** the amount (e.g., `$`, `CHF`).
    - **Suffix** – symbol shown **after** the amount (e.g., `zł` for PLN).
    - **Exchange Rate** – base conversion rate against your system’s base currency.
    - **Format** – choose the number formatting style (thousand/decimal separators).
    - **Default** – tick if this should become the **system default** currency.
3. Click **Save**.

*Notes*

- You can use either a sign (e.g., `€`) or a short text (e.g., `NZ$`) for prefix/suffix.
- The **Exchange Rate** is relative to your base currency (the one you treat as “1.00”).

*“Create Currency” modal with all fields (Code, Prefix, Suffix, Exchange Rate, Format, Default).*

[![image-1758204035047.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758204035047.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758204035047.png)

- - - - - -

#### Edit an existing currency

1. In the list, click the **pencil** icon for the currency you want to change.
2. Update **Code**, **Prefix**, **Suffix**, **Exchange Rate**, **Format**, or toggle **Default**.
3. Click **Save** to apply changes.

*Tips*

- Use Format to enforce consistent display (e.g., `1,234.56` vs `1.234,56`).
- When you change **Exchange Rate**, all derived conversions will use the new rate going forward.

*“Edit Currency” modal opened from the row (rate/format/default shown).*

[![image-1758204072477.png](https://doc.puq.info/uploads/images/gallery/2025-09/scaled-1680-/image-1758204072477.png)](https://doc.puq.info/uploads/images/gallery/2025-09/image-1758204072477.png)

- - - - - -

#### Delete a currency

- Click the **trash** icon on the currency row you wish to remove, then confirm.  
    (You cannot delete a currency that is currently set as **Default**; switch default first.)

- - - - - -

#### Search, sort, and paginate

- **Search** (top-right) filters by code or symbols.
- Click column headers to **sort** (e.g., by **Code**).
- Use page controls at the bottom to navigate through the list.

- - - - - -

#### Best practices

- Keep **one** clear **Default** currency at all times.
- Review **Exchange Rates** regularly or automate updates if available elsewhere.
- Prefer **ISO codes** for clarity (`USD`, `EUR`, `GBP`, etc.).
- Use **Prefix/Suffix** consistently across your currencies (e.g., `$` as prefix, `zł` as suffix).

That’s it—you can now add, edit, remove, and format currencies in the Admin Area with confidence.

