Dashboard
Internet Connection
🔄
Checking...WhatsApp Server
🔄
Checking...Memory Usage
🔄
Checking...Disk Space
🔄
Checking...Connected Sessions
0
Total Contacts
0
Active Campaigns
0
Messages Today
0
0
Questions0
Tokens In0
Tokens Out0
DB Queries0
Requests0
Total Tokens$0.00
Est. CostRecent Campaigns
| Name | Status | Progress | Created |
|---|
Message Stats (24h)
WhatsApp Sessions
Contacts
Groups
Total Contacts: 0
| Phone | Name | Group | Actions |
|---|
Phone Manager Pro
Add Single Number
Import CSV with Phone Validation
Import Preview
0
Total Rows0
✅ Will Add to DB0
Fixed0
Removed0
⚠️ Will Skip| Name | Original | Formatted |
|---|
| Name | Phone | Reason |
|---|
🟡 File Duplicate = Same number appears multiple times in CSV
🔵 Already in DB = Number already exists in your database
| Name | Phone | Type |
|---|
Import Complete!
Test Phone Validation
WhatsApp Number Verification
Quick Number Check
Auto Verification Service
0
Total0
Has WhatsApp0
Has Photo0
No WhatsApp0
Pending| Phone Number | Status | Photo | Last Checked | Check Count | Actions |
|---|---|---|---|---|---|
| No numbers in verification queue. Click "Add Contacts to Queue" to start. | |||||
How it works
- Add contacts to the verification queue
- Click "Check 10 Numbers" to verify (uses your WhatsApp session)
- Numbers marked as "No WhatsApp" can be excluded from campaigns
- Re-checks happen automatically after 30 days
Blocked Contacts
Scan Now rechecks messages older than 24 hours that are still undelivered, where the prior message to the same contact was successfully delivered.
0
Blocked Contacts0
Sessions Affected0
Last 24 Hours0
Last 7 Days| Phone Number | Blocked Session | Detected | Method | Actions |
|---|---|---|---|---|
| No blocked contacts detected yet. Scans run automatically after campaigns. | ||||
Message Templates
Campaigns
Session Limits
| # | Campaign Name | Media | Session | Protection | Group | Status | Progress | Created | Actions |
|---|
Campaign Name
Success rate
0%
0 messages delivered out of 0Failure
0%
0 messages failed out of 0Time elapsed
0 hours
0 processed messagesContact Screening
Filter risky contacts before sending (3+ failures, invalid numbers, opted-out)Campaign Messages
| Contact | Session | Status | Contact Level | Date | Timeline |
|---|
Opt-Out Manager
Total Opted-Out
0
Manual
0
Imported
0
Auto/Keyword
0
| Phone Number | Source | Sent Via | Times Added | Date Added | Actions |
|---|
Message Status
Sent
0
Delivered
0
Read
0
Failed
0
Message History
0 messages| Time | Phone Number | Status | Delivered | Read | Campaign | Message |
|---|
My Profile
Account Info
Push Notifications
Not enabledReceive browser notifications when new messages arrive — works on PC and mobile Chrome.
Social Media URLs
Used in templates with {{facebook}}, {{instagram}}, etc.My AI Usage This Month
| Feature | Requests | Tokens | Cost |
|---|
My Referrals
Your Referral Code
Total Earnings
Commission Rates (6 Levels)
0
0
0
0
0
0
Direct Referrals (Level 1)
0| User | Joined | Expires | Status | Earned |
|---|---|---|---|---|
| Loading... | ||||
Commission History
| Date | From | Level | Payment | Commission | Status |
|---|---|---|---|---|---|
| Loading... | |||||
How It Works - Example
Your Referral Tree:
| Level | Who Signs Up | Your Rate |
|---|---|---|
| You (share your referral code) | ||
| 1 | └── User A signs up with your code | 20% |
| 2 | └── User B signs up with User A's code | 10% |
| 3 | └── User C signs up with User B's code | 5% |
| 4 | └── User D signs up with User C's code | 3% |
| 5 | └── User E signs up with User D's code | 2% |
| 6 | └── User F signs up with User E's code | 1% |
Payment Examples ($100):
| Who Pays | Their Level | You Earn |
|---|---|---|
| User A | Level 1 | $20 (20%) |
| User B | Level 2 | $10 (10%) |
| User C | Level 3 | $5 (5%) |
| User D | Level 4 | $3 (3%) |
| User E | Level 5 | $2 (2%) |
| User F | Level 6 | $1 (1%) |
Key Points:
- Commissions are credited to your Wallet automatically
- Referral links expire after 12 months
- You earn from all payments made by users in your tree (up to 6 levels)
- Minimum withdrawal: $20
My Wallet
Available Balance
Total Earned
Total Withdrawn
Request Withdrawal
Withdrawal Requests
| Date | Amount | Method | Status | Notes |
|---|---|---|---|---|
| No withdrawals yet | ||||
Transaction History
| Date | Type | Amount | Balance | Description |
|---|---|---|---|---|
| No transactions yet | ||||
Admin Dashboard
Total Users
0
Active Users
0
Total Sessions
0
Total Campaigns
0
System Status
Baileys Library
Checking...Users by Plan
Recent Users
View All| User | Joined |
|---|
User Management
| ID | User | Plan | Expires | Status | Sessions | Contacts | Campaigns | Max Users | Proxy | Joined | Actions |
|---|
Subscription Plans
Create new subscription plans for usersSystem Settings
General Settings
WhatsApp Registration Verification
Configure WhatsApp OTP verification for new user registration. Users will receive a verification code on their WhatsApp before completing signup.
Campaign Reply Forwarding
When a contact replies to a campaign message, forward the reply details to a manager's WhatsApp number.
- Contact's phone number
- Reply message text (or media type)
- Preview of the original sent message
- Campaign name
- Link to open inbox
Public API Documentation
Use this API to send WhatsApp messages from external applications (Drupal, PHP, etc.)
http://king-wts.ddns.net/whatsapp/api/v1
API messages follow the same anti-ban limits as the interface. Limits protect your WhatsApp account from being banned.
Message-Based Warmup Levels
Trust is built by sending messages, not just waiting. Both message count AND days must be met:
| Level | Messages Sent | Min Days | Daily | Delay |
|---|---|---|---|---|
| Level 1 | 0+ | 0 | 20/day | 3-5 min |
| Level 2 | 50+ | 5+ | 40/day | 2-4 min |
| Level 3 | 150+ | 10+ | 80/day | 1.5-3 min |
| Level 4 | 300+ | 15+ | 150/day | 1-2 min |
| Level 5 | 500+ | 22+ | 300/day | 45-90s |
Auto-Pause Triggers
Campaigns automatically pause when these conditions are detected:
- Block Rate > 10%: Too many messages failing to send
- Delivery Rate < 30%: Messages not being delivered (account throttled)
- Daily/Hourly Limit Reached: Exceeded allowed messages for current level
- Sleep Hours: Sending paused during configured sleep hours
You need BOTH message count AND days to level up.
Example: 50 messages sent + 5 days active → Level 2 (need 150 msgs + 10 days for Level 3)
Your campaign min/max delay settings are a floor only — the actual delay between messages is always calculated automatically and is usually higher. Here is what affects it:
| Factor | Effect |
|---|---|
| Warmup Level | Sets the minimum delay floor (L1: 3-5 min, L2: 2-4 min, L3: 1.5-3 min…) |
| New Contact | +50% delay for numbers never messaged before (system-wide), +20% for session-new |
| Known Contact | -50% delay (2× faster) at L1-L3 — already have a relationship |
| Message Length | Longer messages add realistic typing simulation time before send |
| Block Rate | Up to 2× slower if block rate is elevated |
| Delivery Rate | Up to 1.5× slower if messages not being delivered |
| Time of Day | 1.5× slower before 9 AM or after 9 PM |
| Random Variation | ±10% applied to final delay — 3 mixed distributions (uniform, gaussian, bimodal) |
Example: 14 messages remaining, 13 active hours left → ~1-2 messages per hour until sleep time, instead of 5/hr for 3 hours then nothing.
session_id to target a specific one.
curl -X POST http://king-wts.ddns.net/whatsapp/api/v1/send \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"phone": "96170123456",
"message": "Hello from API!",
"session_id": "paris" // optional — omit to auto-pick
}'
Response:
{
"success": true,
"message_id": "BAE5...",
"to": "96170123456",
"session_used": "paris",
"status": "sent",
"remaining_today": 142
}
| Field | Type | Required | Description |
|---|---|---|---|
phone | string | Yes | Recipient phone number |
media_url | string | Yes | URL or local path to media file |
message | string | No | Caption text |
media_type | string | No | image (default), video, document, audio |
session_id | string | No | Specific session to use |
curl -X POST http://king-wts.ddns.net/whatsapp/api/v1/send-media \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"phone": "96170123456",
"media_url": "https://example.com/image.jpg",
"message": "Check this image!",
"media_type": "image"
}'
Send the same message to up to 50 numbers in one request. Anti-ban delays apply between each send.
curl -X POST http://king-wts.ddns.net/whatsapp/api/v1/send-bulk \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"phones": ["96170123456", "96171234567", "96176543210"],
"message": "Hello everyone!",
"media_url": "https://example.com/promo.jpg",
"media_type": "image"
}'
Response:
{
"success": true,
"session_used": "paris",
"total": 3, "sent": 2, "failed": 1,
"results": [
{"phone": "96170123456", "success": true, "message_id": "BAE5..."},
{"phone": "96171234567", "success": true, "message_id": "BAE5..."},
{"phone": "96176543210", "success": false, "error": "not on WhatsApp"}
]
}
Use the message_id from the send response to check delivery status.
curl -X GET http://king-wts.ddns.net/whatsapp/api/v1/message/BAE5ABC123 \
-H "X-API-Key: YOUR_API_KEY"
Response:
{
"success": true,
"message_id": "BAE5ABC123",
"phone": "96170123456",
"status": "delivered",
"sent_at": "2026-03-18T10:30:00Z",
"delivered_at": "2026-03-18T10:30:05Z",
"read_at": null
}
Status values: sent → delivered → read or failed
curl -X GET "http://king-wts.ddns.net/whatsapp/api/v1/messages?limit=20&offset=0" \
-H "X-API-Key: YOUR_API_KEY"
Response:
{
"success": true,
"messages": [
{"message_id": "BAE5...", "phone_number": "961...", "status": "sent", "content": "Hello!", "sent_at": "..."}
],
"total": 150,
"limit": 20,
"offset": 0
}
curl -X GET http://king-wts.ddns.net/whatsapp/api/v1/status \
-H "X-API-Key: YOUR_API_KEY"
Response:
{"success": true, "sessions": [{"session_id": "paris", "phone_number": "961...", "status": "connected"}]}
Quick check if any session is ready to send + remaining daily quota.
curl -X GET http://king-wts.ddns.net/whatsapp/api/v1/check \
-H "X-API-Key: YOUR_API_KEY"
Response:
{"success": true, "connected": true, "ready": true, "session": {"session_id": "paris", "phone": "961..."}, "remaining_today": 142}
<?php
// Send a WhatsApp message via API
$api_key = 'YOUR_API_KEY';
$base_url = 'http://king-wts.ddns.net/whatsapp/api/v1';
function sendWhatsApp($phone, $message, $mediaUrl = null) {
global $api_key, $base_url;
$endpoint = $mediaUrl ? '/send-media' : '/send';
$data = ['phone' => $phone, 'message' => $message];
if ($mediaUrl) $data['media_url'] = $mediaUrl;
$ch = curl_init($base_url . $endpoint);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-API-Key: ' . $api_key
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = json_decode($response, true);
if ($httpCode === 429) {
// Rate limited — check remaining_today
error_log("WhatsApp limit reached: " . $result['error']);
return false;
}
return $result['success'] ?? false;
}
// Usage
sendWhatsApp('96170123456', 'Hello from Drupal!');
sendWhatsApp('96170123456', 'See this!', 'https://example.com/image.jpg');
// Bulk send
$data = [
'phones' => ['96170123456', '96171234567'],
'message' => 'Bulk hello!'
];
// POST to /send-bulk with same headers
| HTTP | Error | Fix |
|---|---|---|
401 | API key required / Invalid | Check X-API-Key header |
403 | Account suspended | Contact admin |
400 | No connected session | Connect a WhatsApp session first |
400 | Failed to send | Number may not be on WhatsApp |
429 | Daily limit reached | Wait until tomorrow. Check remaining_today |
500 | Internal error | Retry in a few seconds |
Call Handling
When a WhatsApp session is linked as a companion device, incoming calls are intercepted by the server. Choose how each session handles calls from the Sessions page (per-session dropdown). Set the auto-reply text here (used when mode is Auto-reject + reply).
Anti-Detection Fingerprint
Controls how sessions look to Meta — affects battery, browser, pauses, profile picture. Changes apply to all sessions and sub-users.Browser Profile
Battery Simulation
Distraction Pauses (phone put down mid-session)
Offline Gaps (shorter random offline periods)
Profile Picture Rotation (change profile pic automatically to vary fingerprint)
{phone}/{YYYY-MM-DD}/{username}_{YYYY-MM-DD}_{HH-MM-SS}.extNetwork mode saves to the network share and keeps a local copy for browser display.
{user} = the agent's username (e.g. Amira)
Subscription Plans
Help & Documentation
Getting Started
1. Connect Your WhatsApp
- Go to Sessions page
- Click New Session and enter a name
- Scan the QR code with your WhatsApp app
- Wait for the status to show Connected
3. Create a Message Template (Optional)
- Go to Templates page
- Click Create Template
- Write your message with placeholders like
{{name}} - Save — you can reuse it in any campaign
5. Monitor & Track
- Watch live progress in Campaign Monitor
- Check Activity Logs for detailed events
- View replies in Inbox
6. Manage Opt-Outs
- Contacts who reply "CANCEL" are auto-removed
- View the list in Opt-Out page
- Verify numbers in WhatsApp Verification
WhatsApp Sessions
What is a Session?
A session is a WhatsApp account connected to the system. You can connect multiple WhatsApp numbers depending on your plan.
Session Status
| Connected | WhatsApp is online and ready to send |
| Connecting | Session is connecting to WhatsApp servers |
| Disconnected | Session lost connection - will auto-reconnect |
| QR Pending | Waiting for you to scan QR code |
Features
- Auto-Reconnect: If disconnected, the system automatically tries to reconnect (up to 5 times/day)
- Auto-React: Set an emoji to automatically react to every incoming message
- Resync: Re-download chat history from WhatsApp
Campaigns
Creating a Campaign
- Go to Campaigns and click Create Campaign
- Enter a campaign name and your message
- Optionally attach an image or video
- Select which contacts to send to (group or all)
- Choose one or more WhatsApp sessions to send from
- Click Send Campaign or Schedule for later
Message Personalization
Use placeholders in your message that get replaced with contact info:
{{name}} | Contact's full name |
{{first_name}} | Contact's first name |
{{phone}} | Contact's phone number |
Campaign Status
| Running | Campaign is actively sending messages |
| Paused | Temporarily paused (hourly limit, sleep hours, etc.) |
| Completed | All messages have been sent |
| Draft | Not yet started |
Multi-Session Sending
Select multiple sessions for a campaign. The system distributes messages across sessions automatically. If one session hits its hourly limit, it switches to another.
Meta Force Disconnect Analysis
Full analysis of how Meta detects automation and why sessions get force-disconnected simultaneously. Covers 13 detection signals, scoring model, and recommended fixes.
- Signal #1: Shared IP address (CRITICAL)
- Signal #5: TLS fingerprint detection (HIGH)
- Signal #6: 50-minute proxy kill (HIGH)
- Signal #7: Presence heartbeat pattern (HIGH)
Warmup & Account Safety
Warmup Levels
New WhatsApp accounts start at Level 1 with low limits. As you send more messages over time, your account levels up and limits increase.
| Level | Messages Sent | Days Active | Daily Limit | Delay Between |
|---|---|---|---|---|
| Level 1 | 0+ | 0 | 20/day | 3-5 min |
| Level 2 | 50+ | 10+ | 40/day | 2-4 min |
| Level 3 | 150+ | 20+ | 80/day | 1.5-3 min |
| Level 4 | 300+ | 30+ | 150/day | 1-2 min |
| Level 5 | 500+ | 45+ | 300/day | 45-90s |
Trust Score
The system monitors your message delivery success. If too many messages fail or go undelivered, the trust score drops and the session is temporarily skipped.
- Score above 70%: Normal sending
- Score below 70%: Session skipped until score recovers (resets daily)
URL Restriction
Level 1-2 accounts cannot send URLs in messages. This prevents new accounts from being flagged as spam. Reach Level 3 (150+ messages) to unlock URLs.
Contacts & Groups
Adding Contacts
- Manual: Add one by one with name and phone number
- Import CSV/Excel: Upload a file with columns for name, phone, etc.
- Sync from WhatsApp: Import contacts from your connected WhatsApp sessions
Contact Groups
Organize contacts into groups for targeted campaigns. When creating a campaign, you can select a specific group or send to all contacts.
Contact Screening
When a campaign starts, the system automatically screens contacts:
- Numbers with 3+ previous failures are removed
- Invalid phone numbers are skipped
- Opted-out contacts are excluded
WhatsApp Number Verification
What It Does
The verification service checks if phone numbers in your contact list are registered on WhatsApp. This helps you avoid sending to non-WhatsApp numbers.
How It Works
- Runs in the background during work hours
- Checks a limited number of contacts per day to avoid rate limits
- Marks contacts as "Has WhatsApp" or "No WhatsApp"
- Also checks if the contact has a profile picture
Using Results in Campaigns
When creating a campaign, you can enable "Exclude non-WhatsApp numbers" to skip contacts that were verified as not having WhatsApp.
Opt-Out System
How Opt-Out Works
When a contact replies with "CANCEL", "STOP", or "unsubscribe", they are automatically added to the opt-out list.
- Opted-out contacts are excluded from all future campaigns
- The message footer includes "Send CANCEL to unsubscribe"
- You can view and manage the opt-out list in the Opt-Out page
- You can manually add or remove numbers from the list
Message Templates
What Are Templates?
Templates are pre-written messages you can reuse across campaigns. Create them once and select when creating a campaign.
Creating a Template
- Go to Templates page
- Click Create Template
- Write your message (supports placeholders like
{{name}}) - Optionally attach media
- Save the template
When creating a campaign, select a template to auto-fill the message content.
Campaign Reply Forwarding
What It Does
When a contact replies to a campaign message, the system can forward the reply details to your personal WhatsApp number.
Setup
- Go to System Settings (admin only)
- Find Campaign Reply Forwarding section
- Enable the toggle and enter your WhatsApp number
- You'll receive a message with the sender's phone, campaign name, and reply text
Frequently Asked Questions
Why is my campaign paused?
Campaigns auto-pause for several reasons: hourly/daily sending limit reached, sleep hours (configurable in settings), session disconnected, or low trust score. They auto-resume when the condition clears.
Why are some contacts skipped?
The system screens contacts before sending. Numbers with repeated failures, invalid phone formats, or opt-out history are automatically skipped to protect your account.
Why can't I add URLs in my message?
New accounts (Level 1-2) cannot send URLs. Send at least 150 messages to reach Level 3 and unlock URL support.
Why is the delay between messages so long?
The system mimics human behavior to protect your account. At Level 1, delays are 3-5 minutes. As your account levels up, delays decrease (down to 45-90 seconds at Level 5).
Can I send to groups?
Campaigns send to individual contacts, not WhatsApp groups. This is by design for better delivery tracking and to avoid group spam detection.
What happens if my WhatsApp gets restricted?
The system detects account restrictions automatically and pauses all campaigns for that session. Wait at least 24 hours before resuming. Repeated restrictions may lead to a permanent ban.
Proxy Pool
| ID | Label | Proxy URL | Status | Assigned To | Assigned At | Actions |
|---|---|---|---|---|---|---|
| No proxies added yet | ||||||
Plan Add-ons
| ID | Name | Slug | Type | Quantity | Price | Active | Actions |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
| User | Add-on | Type | Qty | Status | Expires | Created | Actions |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
AI Assistant Settings
0
Questions0
DB Queries0
Tokens In0
Tokens Out0
Requests0
Tokens In0
Tokens Out$0.00
Estimated Cost| Source | Model | Tokens In | Tokens Out | Requests | Cost |
|---|
AI Auto-Reply
Conversation Window
| Phone | Session | Stop Word | When | Action |
|---|---|---|---|---|
| No stopped contacts | ||||
Referral Management
Total Balance
Total Earned
Total Withdrawn
Pending Withdrawals
Pending Withdrawal Requests
| User | Amount | Method | Balance | Requested | Actions |
|---|---|---|---|---|---|
| Loading... | |||||
All Withdrawal Requests
| ID | User | Amount | Method | Status | Requested | Processed | Notes |
|---|---|---|---|---|---|---|---|
| Loading... | |||||||
Top Earners
| # | User | Referral Code | Total Referrals | Total Earned | Balance |
|---|---|---|---|---|---|
| Loading... | |||||
AI Agency Travel
GDS AutomationHow portal login works on this server
Click Login — server fills credentials automatically
If OTP required — a screenshot of the portal appears here
Enter the code from SMS/email → server submits it
Session saved — no OTP needed again until it expires
Approved entries are injected into the AI system prompt so it can answer pricing and policy questions accurately.
| Flight | Departs | Arrives | Economy (portal) | Economy (sell) | Business (sell) |
|---|
Booking Execution — Coming Soon
One-click booking via Sabre/Amadeus. AI collects passenger details → agent reviews → server executes booking → PNR returned.
Media Files
Ping Monitor
0
Total Monitors0
Online0
Offline0
Unknown| Status | Name | IP Address | Alert Phone | Interval | Response Time | Last Check | Actions |
|---|---|---|---|---|---|---|---|
|
Loading monitors... |
|||||||
Create New Campaign
Excel Scheduler
0
Total0
Pending0
Sent0
FailedAuto-Send Processor
Stopped| Phone | Message | Scheduled Date | Session | Status | Actions | |
|---|---|---|---|---|---|---|
| Loading... | ||||||
Activity Logs
0
0
0
0
Activity Log
0 events| Timestamp | Session | Action | Phone | Details | Status |
|---|---|---|---|---|---|
| Loading... | |||||
Auto Clean
Set filters and click Preview
Orders
| Customer | Source | First Contact | Status | Purchases | Last Activity | Summary | Actions |
|---|---|---|---|---|---|---|---|
| Run a scan to populate orders | |||||||
| Source Label | If first message contains… | |
|---|---|---|
| Loading… | ||
No examples yet. When you manually mark a conversation's order status, it becomes a training example.
Baileys Raw Test
Raw Baileys — no proxy, no TLS proxy, no passive IQ, no anti-ban. Used to establish baseline connection duration vs our modified stack.
Scan with a fresh number
Contact 227247407546591@lid is in an active conversation with our session. We send the LID to Meta's USync API and ask for the real @s.whatsapp.net JID.
My Users
| Username | Company | Status | Created | Last Login | Notifications | Access | Permissions | Actions | |
|---|---|---|---|---|---|---|---|---|---|
| Loading... | |||||||||
User Statistics
| User | Role | Parent | Sessions | Conversations | Assigned | Replies Sent | Purchases | Campaigns | Msgs Sent | Last Login |
|---|---|---|---|---|---|---|---|---|---|---|
| Loading... | ||||||||||