API Documentation

Quick Task URLs

Quick task URLs are links that create tasks within Sneakers AIO upon being opened. Quick tasks will automatically use certain options set by the user such as their profile, proxy group, and other options. Other task options such as the website, product, bot mode, & potentially the size are dependent on the quick task URL itself.

Common use-cases include:

  • Sharing task configurations
  • Efficiently creating many tasks

NOTE: We have libraries available for Python & Node.js which make creating quick task urls very simple.

If you are using Python or Node.js, we recommend using these libraries instead.
Node.js: Click here to view the npm package.
Python: Click here to view the pip package.

Please refer to the documentation at the above links if you are using either of the libraries. Otherwise, the following will explain how you can create quick task urls on your own.

Quick Task URL Format:

sneakersaio://quick-task?{params}

Query String Params:

Required Parameter:

FieldTypeDescription
sitesString[]
(URL Encoded)
Comma separated list of site URLs to create tasks for.
Site URLs must be of the same type (ie. only shopify or only footsites).
Single site URL is also allowed.
NOTE: Commas separating URLs shouldn't be URL encoded.

Only 1 of the Following Parameters Required:

FieldTypeDescriptionSite Type
keywordsString[]
(URL Encoded)
Comma separated list of product keywords. Negative keywords are prepended with a '-'.
The bot will find a product containing all keywords and no negative keywords.
NOTE: Commas separating keywords shouldn't be URL encoded.
All
product_urlString
(URL Encoded)
URL of the product.
Should only be used with a single website in sites.
All
variantString
(URL Encoded)
Product variant.
Should only be used with a single website in sites.
Shopify
size_idString
(URL Encoded)
Footsites product size id (ID used for carting).
Should only be used with a single website in sites.
Footsites
product_numberString
(URL Encoded)
Footsites product number (number at top of footsites product description or end of footsites product URL).
Should only be used with a single website in sites.
Footsites

Optional Paramaters:

FieldTypeDescriptionDefault
color_keywordsString[]
(URL Encoded)
Comma separated list of color keywords. Negative keywords are prepended with a '-'.
These are keywords which may be in the product title or the products color/style title.
Only used when keywords, product_url, or product_number are set.
NOTE: Commas separating keywords shouldn't be URL encoded.
User Shoe
sizeString
(URL Encoded)
Product Size (ignored when variant or size_id are used).
Special Values:
Any Size: Selects the first available size
One Size: Selects the only available size
User Shoe: Selects the users default shoe size. Falls back to Any Size if not set.
User Clothing: Selects the users default clothing size. Falls back to Any Size if not set.
User Shoe
modeString
(URL Encoded)
The bot mode which must be one of the following:
Shopify: "Safe", "Quick", "Queue", "Input"
Footsites: "Safe", "Release"
"Queue" and "Release" are best for new products, and "Safe" or "Fast" are best for restocks.
Safe

Examples:

Keywords w/ color keywords & User Clothing sizing on Kith:

sneakersaio://quick-task?sites=https%3A%2F%2Fkith.com&keywords=kith,logo,classic&color_keywords=white&size=user%20shoe

URL w/ color keywords & size on Footlocker:

sneakersaio://quick-task?sites=https%3A%2F%2Fwww.footlocker.com&product_url=https%3A%2F%2Fwww.footlocker.com%2Fproduct%2Fnike-air-force-1-lv8-mens%2FC2301001.html&color_keywords=black,silver&size=10.5

Multiple Shopify sites w/ keywords, Queue Mode & Any Size:

sneakersaio://quick-task?sites=https%3A%2F%2Fkith.com,https%3A%2F%2Fwww.deadstock.ca,https%3A%2F%2Fundefeated.com&keywords=yeezy,350,-kid,-infant&color_keywords=&size=Any%20Size&mode=Queue

Code examples of creating Sneakers AIO quick task URLs:

function jsonToSneakersURL(json) {
    // Return base url + (url component array joined by &)
    return "sneakersaio://quick-task?" + Object.keys(json).map(key => {
        // Create key value pair for url component array
        let keyValue = key + "=";
        if (json[key] instanceof Array) {
            // Encode all elements in array
            for (i = 0; i < json[key].length; i++) {
                json[key][i] = encodeURIComponent(json[key][i]);
            }
            keyValue += json[key].join(","); // Join all elements w/ commas
        } else {
            // Encode current value
            keyValue += encodeURIComponent(json[key]);
        }
        return keyValue;
    }).join("&"); // Join url components w/ &
}

// Showing off all types of of quick task URLs:
let jsonKeywords = {
    "sites": ["https://kith.com", "https://www.deadstock.ca", "https://undefeated.com"],
    "keywords": ["yeezy", "350", "-kid", "-infant"],
    "color_keywords": [],
    "size": "any size",
    "mode": "queue"
};

let jsonURL = {
    "sites": ["https://kith.com"],
    "product_url": "https://kith.com/collections/kith-monday-program/products/kh2636-101",
    "color_keywords": ["white", "red"],
    "size": "Medium"
};

let jsonVariant = {
    "sites": ["https://kith.com"],
    "variant": "39246354940032",
};

let jsonSizeID = {
    "sites": ["https://www.footlocker.ca"],
    "size_id": "22661425"
}

let jsonProductNumber = {
    "sites": ["https://www.footlocker.ca"],
    "product_number": "41047318",
    "color_keywords": ["white", "red", "-yellow"],
    "size": "User Shoe"
}

// Log the converted URLs
console.log(jsonToSneakersURL(jsonKeywords));
console.log(jsonToSneakersURL(jsonURL));
console.log(jsonToSneakersURL(jsonVariant));
console.log(jsonToSneakersURL(jsonProductNumber));
console.log(jsonToSneakersURL(jsonSizeID));
import urllib.parse

def dictToSneakersURL(raw: dict) -> str:
    res = "sneakersaio://quick-task?"
    paramArr = []
    # Iterate keys in arr
    for key in raw:
        keyValue = key + "="
        if type(raw[key]) == list:
            # List case, encode all elements in list
            arr = ([urllib.parse.quote(el, safe="") for el in raw[key]])
            keyValue += ",".join(arr)
        else:
            # Normal case, encode current element
            keyValue += urllib.parse.quote(raw[key], safe="")
        paramArr.append(keyValue)
    # Append & seperated paramArr to res & return
    return res + "&".join(paramArr)

# Showing off all types of of quick task URLs:
dictKeywords = {
    "sites": ["https://kith.com", "https://www.deadstock.ca", "https://undefeated.com"],
    "keywords": ["yeezy", "350", "-kid", "-infant"],
    "color_keywords": [],
    "size": "any size",
    "mode": "queue"
};

dictURL = {
    "sites": ["https://kith.com"],
    "product_url": "https://kith.com/collections/kith-monday-program/products/kh2636-101",
    "color_keywords": ["white", "red"],
    "size": "Medium"
};

dictVariant = {
    "sites": ["https://kith.com"],
    "variant": "39246354940032",
};

dictSizeID = {
    "sites": ["https://www.footlocker.ca"],
    "size_id": "22661425"
}

dictProductNumber = {
    "sites": ["https://www.footlocker.ca"],
    "product_number": "41047318",
    "color_keywords": ["white", "red", "-yellow"],
    "size": "User Shoe"
}

# Log the converted URLs
print(dictToSneakersURL(dictKeywords))
print(dictToSneakersURL(dictURL))
print(dictToSneakersURL(dictVariant))
print(dictToSneakersURL(dictSizeID))
print(dictToSneakersURL(dictProductNumber))
import urllib.parse

class QuickTask:

    @staticmethod
    def __dictToSneakersURL(raw: dict) -> str:
        '''Convert json to quick task url'''
        res = "sneakersaio://quick-task?"
        paramArr = []
        # Iterate keys in arr
        for key in raw:
            if (raw[key] != None):
                keyValue = key + "="
                if type(raw[key]) == list:
                    # List case, encode all elements in list
                    arr = ([urllib.parse.quote(el, safe="") for el in raw[key]])
                    keyValue += ",".join(arr)
                else:
                    # Normal case, encode current element
                    keyValue += urllib.parse.quote(raw[key], safe="")
                paramArr.append(keyValue)
        # Append & seperated paramArr to res & return
        return res + "&".join(paramArr)

    @staticmethod
    def __getSneakersURL(sites: list, keywords: list, colorKeywords: list,
                    productUrl: str, variant: str, sizeID: str,
                    productNumber: str, size: str, mode: str) -> str:
        '''Return quick task url given parameters'''
        dict = {
            "sites": sites,
            "keywords": keywords,
            "color_keywords": colorKeywords,
            "product_url": productUrl,
            "variant": variant,
            "size_id": sizeID,
            "product_number": productNumber,
            "size": size,
            "mode": mode
        }
        return QuickTask.__dictToSneakersURL(dict)

    @staticmethod
    def createKeywordsTask(sites: list, keywords: list, colorKeywords: list = [],
                        size: str = "User Shoe", mode: str = "safe"):
        '''Creates a Sneakers AIO Quick Task URL using the keywords search type.'''
        return QuickTask.__getSneakersURL(sites, keywords, colorKeywords, None, None,
                            None, None, size, mode)

    @staticmethod
    def createProductUrlTask(site: str, productUrl: str, colorKeywords: list = [],
                            size: str = "User Shoe", mode: str = "safe"):
        '''Creates a Sneakers AIO Quick Task URL using the product URL search type.'''
        return QuickTask.__getSneakersURL([site], None, colorKeywords, productUrl, None,
                            None, None, size, mode)

    @staticmethod
    def createVariantTask(site: str, variant: str, mode: str = "safe"):
        '''Creates a Sneakers AIO Quick Task URL using the product URL search type.'''
        return QuickTask.__getSneakersURL([site], None, None, None, variant,
                            None, None, None, mode)

    @staticmethod
    def createSizeIDTask(site: str, sizeID: str, mode: str = "safe"):
        '''Creates a Sneakers AIO Quick Task URL using the product URL search type.'''
        return QuickTask.__getSneakersURL([site], None, None, None, None,
                            sizeID, None, None, mode)

    @staticmethod
    def createProductNumberTask(site: str, productNumber: str, colorKeywords: list = [],
                                size: str = "User Shoe", mode: str = "safe"):
        '''Creates a Sneakers AIO Quick Task URL using the product URL search type.'''
        return QuickTask.__getSneakersURL(site, None, colorKeywords, None, None,
                            None, productNumber, size, mode)

# Create keywords task: sneakersaio://quick-task?sites=https%3A%2F%2Fkith.com,https%3A%2F%2Fwww.deadstock.ca&keywords=yeezy,350,-kid,-infant&color_keywords=&size=any%20size&mode=queue
quickTaskUrl = QuickTask.createKeywordsTask(["https://kith.com", "https://www.deadstock.ca"], ["yeezy", "350", "-kid", "-infant"], [], "any size", "queue");

# Create product url task: sneakersaio://quick-task?sites=https%3A%2F%2Fkith.com&color_keywords=white,red&product_url=https%3A%2F%2Fkith.com%2Fcollections%2Fkith-monday-program%2Fproducts%2Fkh2636-101&size=Medium&mode=safe
quickTaskUrl = QuickTask.createProductUrlTask("https://kith.com", "https://kith.com/collections/kith-monday-program/products/kh2636-101", ["white", "red"], "Medium");

# Create variant task: sneakersaio://quick-task?sites=https%3A%2F%2Fkith.com&variant=39246354940032&mode=safe
quickTaskUrl = QuickTask.createVariantTask("https://kith.com", "39246354940032");

# Create size id task: sneakersaio://quick-task?sites=https%3A%2F%2Fwww.footlocker.ca&size_id=22661425&mode=safe
quickTaskUrl = QuickTask.createSizeIDTask("https://www.footlocker.ca", "22661425");

# Create product number task: sneakersaio://quick-task?sites=https%3A%2F%2Fwww.footlocker.ca&color_keywords=white,red,-yellow&product_number=41047318&size=User%20Shoe&mode=safe
quickTaskUrl = QuickTask.createProductNumberTask("https://www.footlocker.ca", "41047318", ["white", "red", "-yellow"], "User Shoe")