back to overview
Portal coverage

VFS Global automated end-to-end.

VFS Global processes Schengen, UK, and 60+ other destination visas across every corridor that matters. It's also the hardest portal to automate — Cloudflare Turnstile on login, Angular-heavy booking flow, aggressive queue pages, and OTPs at two steps. Opaige runs it as production infrastructure: slot discovery, captcha, 2FA routing, and confirmation, all behind a single API.
Book your first appointment
What we handle

End-to-end, not step-by-step

Slot discovery across centres

Poll every supported VFS centre for your corridor. Adaptive cadence — burst during predicted drop windows, calm otherwise. Per-applicant-count banners parsed and surfaced.

Cloudflare Turnstile solved

The 2026 VFS login wall is Turnstile-gated. We productionised the MessageEvent forge technique (Probe H) so login goes through without you wiring a captcha provider.

2FA routed to your user

When VFS sends an email or SMS code during login or slot hold, we pause the run, push the prompt to your user's dashboard (or webhook), and resume the moment they submit.

Watch-only tier for flex customers

Users not ready to pay the full booking fee? Put them on the $49 watch tier — we monitor and email when slots open, they book themselves. Upgrade to Watch & Book in one click.

Retries that survive portal resets

VFS returns you to a queue waiting room on high load; the worker detects it, waits up to 5 minutes, then re-enters without losing booking state. Backed by a durable state machine.

Evidence bundle on confirmation

Confirmation ref + date + time + center extracted from the final page. Screenshot and DOM snapshot stored. Signed URLs valid 24h, fetchable via GET /bookings/:id/evidence.

The lifecycle

From CREATED to BOOKED

CREATED
Booking accepted. Payment taken. Queued for execution.
AUTHENTICATING
Worker launches Chrome with your applicant's VFS credentials.
AUTH_OTP_REQUIRED
VFS sent a code. Your user submits via dashboard or your app.
CHECKING_AVAILABILITY
Center + visa type selected. Slot grid scanned.
HOLDING_SLOT
Slot claimed. Details auto-filled from applicant record.
CONFIRM_OTP_REQUIRED
Final-step OTP. Usually instant, up to 10-minute window.
BOOKED
Confirmation reference extracted. Webhook fires. Evidence bundle ready.

Non-happy-path states (CREDENTIALS_REQUIRED, OPERATOR_ESCALATED, PORTAL_PAYMENT_REQUIRED, RETRY_SCHEDULED) are all first-class. See the developer reference for the full enum.

What breaks in production

Edge cases we've already solved

VFS queue page

High-load days trigger a waiting-room. Workers hold for up to 5 minutes, then retry the booking lane. No state loss.

CF edge 403201 (hosting ASN block)

VFS blocks all hosting-provider IPs at the Cloudflare layer. We run workers behind residential-proxy egress so requests look like a real applicant from the origin country.

Pre-populated mat-select dropdowns

Some corridors pre-fill center or visa type. Our probe guard detects the existing selection and skips the re-select that would wipe the downstream form.

DD-MM-YYYY availability banners

VFS surfaces 'Earliest available DD-MM-YYYY' text in a sibling element. We regex-parse both the banner and any inline calendar so no-slot states are never silent.

SHORTY STAY sub-type typo

VFS's own option label misspells 'short stay' as 'shorty stay'. Our option-matcher tolerates the typo; new portal tweaks get captured via recon dumps before they break live bookings.

Quickstart

Create a VFS booking via API

bash
curl -X POST https://api.opaige.com/bookings \ -H "Authorization: Bearer opk_live_…" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: vfs-nga-dnk-2026-06-01" \ -d '{ "applicantName": "Ada Lovelace", "applicantEmail": "ada@example.com", "citizenship": "NGA", "destinationCountry": "DNK", "visaType": "TOURIST", "portalType": "VFS_GLOBAL", "bookingCenter": "Lagos", "preferredDateStart": "2026-06-01", "preferredDateEnd": "2026-06-15", "productTier": "WATCH_AND_BOOK" }'

Subscribe your webhook to booking.status_changed to mirror the lifecycle on your side, and booking.confirmed to pull the evidence bundle the moment VFS confirms.