Appurl.json is a file that should be hosted by developers at the root of their domain / subdomain (like http://appurl.org/app/foursquare.com/appurl.json), declaring their http-to-custom-scheme transformation. appurl.json tells AppURL clients to transform “http” into “custom” schemes, which then allows the app to open the URL and directly load relevant deep states.

Example appurl.json file:

{
    // @id: A domain or subdomain starting with "func://" to identify your app.
    //      You must have control over the server at that (sub)domain to host
    //      an appurl.json file at the root path there.
    //      An appurl.json file is only considered legitimate if it's hosted at
    //      the path "/appurl.json" in the (sub)domain of its @id field.
    //      E.g. "func://yelp.com" is only legitimate if this file is hosted at
    //           "http://yelp.com/appurl.json"
    "@id": "func://yelp.com",

    // @context: (Optional) A mapping of names to URI prefixes which can be
    //           used to make CURIEs in func.params.type
    "@context": {
        "@vocab": "http://appurl.org/2.0/",
        "Yelp": "http://terms.quixey.com/app-ontology/com.yelp/",
        "QuixeyTypes": "http://types.data.quixey.com/"
    },

    // label: The human-readable name of your Software Product
    "label": "Yelp",

    // editions: An object for each Edition of this Software Product
    "editions": [
        {
            // slug: A unique identifier for this edition which the
            //       funcs.accessMethods.editions entries refer to.
            //       Also enables external applications to reference
            //       Editions using pointers of the form
            //       (SoftwareProduct.@id, Edition.slug)
            "@id": "ios",

            // platform: From a fixed global set of platform-identifier strings
            "platform": "ios",

            // minVersion: (Optional) A String value specifying the minimum
            //             version number of a release that would be considered
            //             part of this Edition.
            //             For an Android Edition, this must be the value of the
            //             "versionCode" attribute of the <manifest> element, e.g.:
            //                 "4", "75", "300"
            //             For an iOS Edition, this must be the CFBundleVersion String,
            //             e.g.:
            //                 "0.11.2", "0.9.0", "3.2.10"
            //             For a Windows Edition, this must be of the form
            //             major.minor.build.revision, e.g.:
            //                 "0.0.0.1", "5.0.4.53", "3.0.0.8421"
            //             Editions must not have overlapping version ranges.
            "minVersion": "2.4.1",

            // maxVersion: (Optional) A String value specifying the maximum
            //             version number of a release that would be considered
            //             part of this Edition.
            //             Editions must not have overlapping version ranges.
            //             See minVersion for platform-specific syntax requirements.
            "maxVersion": null,


            // catalogEntries: (Optional) An object for each app catalog / app store
            //                 where this Edition can be downloaded.
            "catalogEntries": [
                {
                    // catalog: From a fixed global set of catalog-identifier strings
                    "catalog": "itunes",

                    // downloadUrl: URL of an app store page from which this
                    //              Edition can be downloaded
                    "downloadUrl": "https://itunes.apple.com/us/app/yelp/id284910350"
                }
            ]
        },
        {
            "@id": "android-4.0",
            "platform": "android",
            "maxVersion": "172",
            "catalogEntries": []
        },
        {
            "@id": "android-5.0",
            "platform": "android",
            "minVersion": "173",
            "catalogEntries": [
                {
                    "catalog": "googleplay",
                    "downloadUrl": "https://play.google.com/store/apps/details?id=com.yelp.android"
                }
            ]
        }
    ],

    // funcs: An object for each Function of this Software Product.
    "funcs": [
        {
            // @id: A unique identifier for this Function for use in
            //       external references of the form
            //       (SoftwareProduct.@id, SoftwareProduct.func.name)
            "@id": "bizSearch",

            // label: (Optional) A human-readable name for the Function
            "label": "Local Business Search",

            // description: (Optional) A human-readable text description of the
            //              Function
            "description": "Search for local businesses by keyword, location and/or business category.",

            // funcUrlTemplate: A parameterizable template for constructing the set of
            //                  Functional URLs spanned by this Function.
            "funcUrlTemplate": "func://yelp.com/search?find_desc={find_desc}&find_loc={find_loc}&cflt={cflt.slug}",

            // params: Each object specifies the name and type of a parameter of this
            //         Function's funcUrlTemplate.
            //         Every combination of valid values for these params must
            //         correspond to a State of this Function by way of the
            //         funcUrlTemplate parameter-value-substitution rules.
            "params": {
                // Parameter name as it appears in the funcUrlTemplate
                "find_desc": {
                    // type: Parameter type. May use CURIE notation using the
                    //       prefix definitions from SoftwareProduct.@context.
                    "type": "String",

                    // required: (Optional, default is false.) Boolean value. If false,
                    //           this parameter may have a null value; otherwise it
                    //           must not be null.
                    "required": false
                },
                "find_loc": {
                    "type": "String",
                    "required": false
                },
                "cflt": {
                    "type": "String",
                    "required": false
                }
            },

            // accessMethods: Each object specifies a set of Editions
            //                and a method of accessing this Function's
            //                States in those Editions.
            "accessMethods": [
                {
                    // editions: A set of references to slugs of this
                    //           SoftProduct's Editions for which the
                    //           accessUrlTemplate is applicable
                    "editions": ["android-5.0"],

                    // accessUrlTemplate: A template string that specifies how
                    //                    to generate an Access URL for any State
                    //                    in this Function using its set of param
                    //                    values
                    "accessUrlTemplate": "http://yelp.com/search?find_desc={find_desc}&find_loc={find_loc}&cflt={cflt.slug}"
                },
                {
                    "editions": ["ios", "android-4.0", "android-5.0"],
                    "accessUrlTemplate": "yelp:///search?terms={find_desc}&location={find_loc}&category={cflt}"
                }
            ]
        }
    ]
}