← All Connectors
MyWiFi Networks

MyWiFi Networks

mywifi

White-label captive portal platform. Poll-based connector that ingests aggregate WiFi analytics — footfall counts, session duration, bandwidth, and device-type breakdowns — per location. No per-guest data is ever collected.

Configuration schema

FieldTypeRequiredDescription
api_keystringYesMyWiFi App Secret Key. Found in the MyWiFi Control Panel under Branding. Sent as the "identifier" request header — not a Bearer token.
location_idstringYesMyWiFi numeric location ID for the venue. Found in the MyWiFi Control Panel location settings.
granularity"daily" | "weekly" | "monthly"NoBucket granularity for footfall counts. Defaults to "daily".
emit_unique_visitorsbooleanNoWhen true, also emits a period-level unique-visitor presence rollup. Disabled by default to avoid double-counting with footfall.

Setup instructions

1

Log into the MyWiFi Control Panel.

2

Navigate to Branding (or Settings > API) and copy your App Secret Key. This becomes the api_key.

3

Note the numeric Location ID for the venue from the location settings page. This becomes the location_id.

4

Register the integration via POST /api/venues/:id/integrations with connector_type "mywifi", providing api_key and location_id.

5

No webhook configuration is required — v1 uses polling only. The GuestNetworks scheduler calls POST /internal/connectors/mywifi/poll on a recurring schedule to fetch the latest aggregate data.

6

Once configured, footfall counts and environment metrics appear in the dashboard within the next poll cycle.

Webhook / polling format

mywifi-webhook.json
// MyWiFi connector v1 is POLL-ONLY — no webhook is required.
// The scheduler calls these MyWiFi API endpoints on each cycle:
//
// GET https://www.mywifi.io/api/get-visits
//   ?location_id=<id>&start_date=YYYY-MM-DD&end_date=YYYY-MM-DD&granularity=daily
//   → aggregate footfall buckets (total_visits per date bucket)
//
// GET https://www.mywifi.io/api/get-social-logins?location_id=<id>
//   → aggregate auth-method counts (whatsapp/sms/email/passcode/oauth …)
//
// GET https://www.mywifi.io/api/average-session-time?location_id=<id>
//   → average & median session duration (minutes)
//
// GET https://www.mywifi.io/api/average-bandwidth-used?location_id=<id>
//   → average & total bandwidth consumed (MB/GB)
//
// GET https://www.mywifi.io/api/device-metrics?location_id=<id>
//   → device-type and OS breakdown (aggregate counts, no MAC)
//
// Auth: identifier: <api_key>   (custom header — NOT Authorization: Bearer)
// All responses return PRE-AGGREGATED counts. Zero device identifiers are present.

Normalized canonical event

After normalization, the connector output becomes a standard GNCanonicalEvent:

canonical-event.json
// /get-visits → GN "count" event (footfall bucket, PRIMARY signal)
{
  "event_type": "count",
  "venue_id": "v_ghi789",
  "zone_id": null,
  "device_hash": null,
  "operator_device_hash": null,
  "time": "2026-06-17T00:00:00.000Z",
  "source_id": "mywifi",
  "count": 214,
  "metrics": {},
  "meta": {
    "kind": "footfall_bucket",
    "granularity": "daily",
    "bucket_date": "2026-06-17",
    "new_guests": "138",
    "returning_guests": "76"
  }
}

// /average-session-time → GN "environment" event (aggregate metric snapshot)
{
  "event_type": "environment",
  "venue_id": "v_ghi789",
  "device_hash": null,
  "operator_device_hash": null,
  "count": 1,
  "metrics": { "session_duration_s": 1320 },
  "meta": {
    "kind": "session_time_agg",
    "median_session_minutes": "18",
    "total_sessions": "312"
  }
}

Next steps