Welcome to the FindFreeWiFi API docs


Here is all the documentation we think you'd need to build something awesome on top of our WiFi location data.

It's all free - no API key or registration required.

Please let us know what you're building and how you use our data. We'd love to help by adding more API goodness to help you and your team.

Build something amazing!

Explanation

This call will return a list of locations ordered from nearest to furthest.

Example HTTP GET

http://www.findfreewifi.co.za/publicjson/locationsnear?lat=-26.04375187772609&lng=28.09076412071545
                            

Results aren't limited, but if you'd prefer less, then just supply a "topX" parameter:

http://www.findfreewifi.co.za/publicjson/locationsnear?lat=-26.04375187772609&lng=28.09076412071545&topX=5
                            

Example return values

The call will return a JSON object. The first part called message is out of band communication and will be used in future to warn about overuse, etc...
The second part, data, contains zero or many elements with the location information.

{
    "data": [{
        "ID": 68,
        "Address": "Woodmead",
        "OpeningTime": "6 am",
        "Name": "Holiday Inn Express",
        "ClosingTime": "10 pm",
        "CoLocatedService": "Restaurant",
        "Description": null,
        "CredentialRequest": "None",
        "ConnectionTimeLimit": 0,
        "BestReceptionSpot": "Unknown",
        "ConnectionDataLimit": 30,
        "Lat": -26.04340485810253,
        "PasswordControl": "None",
        "Long": 28.091343477862665,
        "Direction": "NE",
        "DistanceFromMe": 0.06956000293017657,
        "FullDirection": "North East",
        "ServiceProvider": "WirelessG"
    }, {
        "ID": 16,
        "Address": "Shop 64, Woodmead Retail Park, Woodmead Drive",
        "OpeningTime": "7 am",
        "Name": "Mugg & Bean",
        "ClosingTime": "7 pm",
        "CoLocatedService": "Restaurant",
        "Description": null,
        "CredentialRequest": "None",
        "ConnectionTimeLimit": 0,
        "BestReceptionSpot": "Inside",
        "ConnectionDataLimit": 30,
        "Lat": -26.047896754937039,
        "PasswordControl": "None",
        "Long": 28.091708258288691,
        "Direction": "S",
        "DistanceFromMe": 0.470419194747921,
        "FullDirection": "South",
        "ServiceProvider": "Unknown"
    }],
    "message": {
        "Success": true,
        "Reason": ""
    }
}
                        

The "DistanceFromMe" value is in kilometers.

A value of 0 for "ConnectionTimeLimit" means unlimited time (i.e. no time cap) at that WiFi spot.

A value of 0 for "ConnectionDataLimit" means unlimited data (i.e. no data cap) at that WiFi spot.

Explanation

This call will return locations for the supplied city name

Example HTTP GET

http://www.findfreewifi.co.za/publicjson/Locations?cityName=Johannesburg
                            

Results aren't limited, but if you'd prefer less, then just supply a "topX" parameter:

http://www.findfreewifi.co.za/publicjson/Locations?cityName=Johannesburg&topX=5
                            

Example return values

The call will return a JSON object. The first part called message is out of band communication and will be used in future to warn about overuse, etc...
The second part, data, contains zero or many elements with the location information. Results are returned in alphabetical order using the name of the location.

{
    "data": [{
        "Name": "Andiccio 24 ",
        "OpeningTime": "8am",
        "Address": "Cambridge Crossing, Corner Witkoppen & Stonehaven Road, Paulshof, South Africa",
        "ID": 87,
        "CoLocatedService": "Restaurant",
        "ConnectionDataLimit": null,
        "ConnectionTimeLimit": null,
        "ServiceProvider": "Unknown",
        "Lat": -26.106339,
        "Long": 28.054244
    }, {
        "Name": "Andiccio 24 ",
        "OpeningTime": "8am",
        "Address": "Sandton Court Shopping Centre, Corner Rivonia Road & South Rd, Sandton, South Africa",
        "ID": 88,
        "CoLocatedService": "Restaurant",
        "ConnectionDataLimit": null,
        "ConnectionTimeLimit": null,
        "ServiceProvider": "Unknown",
        "Lat": -26.106339,
        "Long": 28.054244
    }],
    "message": {
        "Success": true,
        "Reason": ""
    }
}
                        

A value of 0 for "ConnectionTimeLimit" means unlimited time (i.e. no time cap) at that WiFi spot.

A value of 0 for "ConnectionDataLimit" means unlimited data (i.e. no data cap) at that WiFi spot.

Explanation

This end point allows you to add locations into our workflow. All reported locations will need to be reviewed to ensure accuracy, etc...

Example HTTP POST

http://www.findfreewifi.co.za/publicjson/addlocation
                            

Example HTTP POST values

Here is example code using jQuery which demonstrates how to use HTTP POST to add to our workflow of locations.

 $(function () {

     var newLocation = {
         Name: "new location",
         Address: "1 Main Street, Sandton",
         City: "Johannesburg",
         Lat: -26.04375187772609,
         Lng: 28.09076412071545,
         ServiceProvider: "My Neighbor",
         ColocatedService: "None",
         DataLimit: 0,
         TimeLimit: 0,
         ReporterIdentifier: "Simon"
     };
     $.ajax({
         url: 'http://www.findfreewifi.co.za/publicjson/addlocation',
         data: newLocation,
         dataType: 'json',
         type: 'POST',
         success: function (data) {
             if (data.Success == true) {
                 alert("done!");
             } else {
                 alert("failed: " + data.Message);
             }
         }
     });

 });
                        

The Lat and Lng pairs are nullable and can be omitted if not known.

The ReporterIdentifier allows us to get in contact with you should we need more clarification. Feel free to use your Twitter handle/email address.

The following will be returned to indicate success:

{
    "Success": true,
    "Message": "Thanks!"
}
                        

Explanation

This call returns all cities that currently have at least 1 location listed.

The "isTown" flag can be used to separate cities vs towns on the front end.

The "Id" value is our internal identifier and won't change going forward.

Example HTTP GET

http://www.findfreewifi.co.za/publicjson/getcities
                            

Example return values

The call will return a JSON object. The first part called message is out of band communication and will be used in future to warn about overuse, etc...
The second part, data, contains zero or many elements with the city/town information. Results are returned in alphabetical order using the name of the city/town.

{
    "data": [{
        "Id": 1,
        "isTown": false,
        "Name": "Johannesburg",
        "Lat": -26.106339,
        "Long": 28.054244
    }, {
        "Id": 2,
        "isTown": false,
        "Name": "Pretoria",
        "Lat": -25.743236,
        "Long": 28.235706
    }],
    "message": {
        "Success": true,
        "Reason": ""
    }
}
                        

Explanation

This call returns a KML file for use in Google Earth and other programs.

Example HTTP GET

http://www.findfreewifi.co.za/publicjson/kml
                            

An optional city name can be provided to limit the resulting file.

http://www.findfreewifi.co.za/publicjson/kml?city=Johannesburg
                            

Currently, our site only lists hotspots in South Africa.

Explanation

This call returns a CSV file.

Example HTTP GET

http://www.findfreewifi.co.za/publicjson/csv
                            

An optional city name can be provided to limit the resulting file.

http://www.findfreewifi.co.za/publicjson/csv?city=Johannesburg
                            

Currently, our site only lists hotspots in South Africa.