All payments secured via PayPal with full Buyer Protection. 100% Refund if we miss the deadline.
Important Requirements
Chinese E-Passport Holders
Passports starting with ‘E’ (containing nine-dash line map) are not stamped directly. You will receive a separate visa. Upon arrival, proceed to the Visa-on-Arrival counter to exchange your e-visa for a loose-leaf visa (form NA1 required). No extra fee.
Documents Needed:
Portrait Photo: White background, no glasses, straight face.
Passport Scan: High quality, no glare, full info page visible.
Verified Trust
2007
Operating Since
99.9%
Success Rate
“Saved our family vacation. Applied at 8 AM, got visas by 10 AM just in time for our flight. Worth every penny.”
“I was panicking when the government site crashed. These guys fixed it in 2 hours.”
Yes. If we receive your order within the daily slots (before 3:00 PM GMT+7), we guarantee delivery within 2 working hours. If we fail, you get a 100% refund immediately.
Immigration offices are closed on weekends. However, if you submit your request on the weekend, we queue it to be the very first one processed Monday morning (8:00 AM), ensuring you get it by 10:00 AM Monday.
Absolutely. We provide the official electronic visa (E-visa) issued by the Vietnam Immigration Department. It is valid at all international airports and land crossings.
// — State Management —
const state = {
visaStatus: null, // ‘pending’ or ‘new’
urgency: null, // ‘extreme’, ‘high’, ‘standard’
currentTab: ‘pending’
};
// — Wizard Logic —
function wizardNext(step, value) {
if (step === 1) {
state.visaStatus = value;
document.getElementById(‘step-1’).classList.add(‘hidden’);
document.getElementById(‘step-2’).classList.remove(‘hidden’);
document.getElementById(‘step-2’).classList.add(‘animate-fade-in’);
}
}
function wizardResult(urgency) {
state.urgency = urgency;
document.getElementById(‘step-2’).classList.add(‘hidden’);
const resultPanel = document.getElementById(‘wizard-result’);
resultPanel.classList.remove(‘hidden’);
const title = document.getElementById(‘result-title’);
const desc = document.getElementById(‘result-desc’);
const serviceName = document.getElementById(‘result-service-name’);
const price = document.getElementById(‘result-price’);
const icon = document.getElementById(‘result-icon’);
let basePrice = state.visaStatus === ‘pending’ ? 0 : 30; // approx diff between acceleration and new
if (urgency === ‘extreme’) {
icon.innerHTML = ‘‘;
title.innerText = “Critical Urgency: 2-Hour Service Required”;
desc.innerText = “Your flight is imminent. You cannot afford any delays. We will bypass the queue immediately.”;
serviceName.innerText = “2-Hour Ultimate Emergency”;
price.innerText = state.visaStatus === ‘pending’ ? “$200 USD” : “$230 USD”;
price.className = “text-brand-red font-bold text-xl”;
} else if (urgency === ‘high’) {
icon.innerHTML = ‘‘;
title.innerText = “High Priority: 4-Hour Service Recommended”;
desc.innerText = “You have less than 24 hours. Secure your visa today to sleep soundly tonight.”;
serviceName.innerText = “4-Hour Rapid Response”;
price.innerText = state.visaStatus === ‘pending’ ? “$175 USD” : “$200 USD”;
price.className = “text-brand-gold font-bold text-xl”;
} else {
icon.innerHTML = ‘‘;
title.innerText = “Standard Urgent: 8-Hour Service”;
desc.innerText = “You have a small buffer. Ensure your visa is ready by the end of the working day.”;
serviceName.innerText = “8-Hour Standard Urgent”;
price.innerText = state.visaStatus === ‘pending’ ? “$145 USD” : “$170 USD”;
price.className = “text-brand-blue font-bold text-xl”;
}
}
function wizardReset() {
state.visaStatus = null;
state.urgency = null;
document.getElementById(‘wizard-result’).classList.add(‘hidden’);
document.getElementById(‘step-2’).classList.add(‘hidden’);
document.getElementById(‘step-1’).classList.remove(‘hidden’);
}
// — Pricing Tab Logic —
function switchPricing(type) {
state.currentTab = type;
const pendingDiv = document.getElementById(‘pricing-pending’);
const newDiv = document.getElementById(‘pricing-new’);
const btnPending = document.getElementById(‘btn-pending’);
const btnNew = document.getElementById(‘btn-new’);
if (type === ‘pending’) {
pendingDiv.classList.remove(‘hidden’);
pendingDiv.classList.add(‘grid’);
newDiv.classList.add(‘hidden’);
newDiv.classList.remove(‘grid’);
btnPending.classList.add(‘bg-brand-gold’, ‘text-brand-dark’);
btnPending.classList.remove(‘text-gray-400’, ‘hover:text-white’);
btnNew.classList.remove(‘bg-brand-gold’, ‘text-brand-dark’);
btnNew.classList.add(‘text-gray-400’, ‘hover:text-white’);
} else {
newDiv.classList.remove(‘hidden’);
newDiv.classList.add(‘grid’);
pendingDiv.classList.add(‘hidden’);
pendingDiv.classList.remove(‘grid’);
btnNew.classList.add(‘bg-brand-gold’, ‘text-brand-dark’);
btnNew.classList.remove(‘text-gray-400’, ‘hover:text-white’);
btnPending.classList.remove(‘bg-brand-gold’, ‘text-brand-dark’);
btnPending.classList.add(‘text-gray-400’, ‘hover:text-white’);
}
}
// — Clock Logic (GMT+7) —
function updateClock() {
// Create date object for current time
const now = new Date();
// Get UTC time
const utc = now.getTime() + (now.getTimezoneOffset() * 60000);
// create new Date object for Vietnam (GMT+7)
const vnTime = new Date(utc + (3600000 * 7));
// Format string
const timeString = vnTime.toLocaleTimeString(‘en-US’, { hour12: false });
document.getElementById(‘vn-clock’).innerText = timeString;
// Check status
const day = vnTime.getDay(); // 0 is Sunday
const hour = vnTime.getHours();
const statusDiv = document.getElementById(‘office-status’);
// Holidays 2026 (Simple check for demo, ideally exhaustive)
const isHoliday = false; // Placeholder for complicated date logic
if (day === 0 || day === 6 || isHoliday) {
statusDiv.className = “inline-flex items-center px-3 py-1 rounded-full text-sm font-bold mb-6 bg-red-100 text-red-800”;
statusDiv.innerText = “CLOSED (Weekend)”;
} else if ((hour >= 8 && hour = 14 && hour < 18)) {
statusDiv.className = "inline-flex items-center px-3 py-1 rounded-full text-sm font-bold mb-6 bg-green-100 text-green-800";
statusDiv.innerText = "OPEN NOW";
} else {
statusDiv.className = "inline-flex items-center px-3 py-1 rounded-full text-sm font-bold mb-6 bg-yellow-100 text-yellow-800";
statusDiv.innerText = "ON BREAK / CLOSED";
}
}
setInterval(updateClock, 1000);
updateClock(); // Run immediately
// — Chart.js Logic —
document.addEventListener('DOMContentLoaded', function() {
const ctx = document.getElementById('timeComparisonChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Gov Portal (Best Case)', 'Gov Portal (Avg)', 'Gov Portal (Worst)', 'Our Service (2H)'],
datasets: [{
label: 'Processing Time (Hours)',
data: [72, 120, 240, 2], // 3 days, 5 days, 10 days, 2 hours
backgroundColor: [
'rgba(200, 200, 200, 0.5)',
'rgba(150, 150, 150, 0.5)',
'rgba(100, 100, 100, 0.5)',
'rgba(197, 48, 48, 0.9)' // Brand Red
],
borderColor: [
'rgba(200, 200, 200, 1)',
'rgba(150, 150, 150, 1)',
'rgba(100, 100, 100, 1)',
'rgba(197, 48, 48, 1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: {
legend: { display: false },
tooltip: {
callbacks: {
label: function(context) {
return context.raw + ' Hours';
}
}
}
},
scales: {
y: {
beginAtZero: true,
title: {
display: true,
text: 'Hours to Approval'
}
}
}
}
});
// Mobile menu toggle
document.getElementById('mobile-menu-btn').addEventListener('click', function() {
const menu = document.getElementById('mobile-menu');
menu.classList.toggle('hidden');
});
});
// — FAQ Toggle —
function toggleFaq(id) {
const content = document.getElementById(id);
const icon = document.getElementById('icon-' + id);
content.classList.toggle('hidden');
icon.classList.toggle('rotate-180');
}
We provide arrangement service for e-visa | visa on arrival | visa extension | visa renewal | visa run.
We also arrange FnB tours, medical tours | spa tours
Thank you