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:
Field | Type | Description |
---|---|---|
sites | String[] (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:
Field | Type | Description | Site Type |
---|---|---|---|
keywords | String[] (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_url | String (URL Encoded) | URL of the product. Should only be used with a single website in sites. | All |
variant | String (URL Encoded) | Product variant. Should only be used with a single website in sites. | Shopify |
size_id | String (URL Encoded) | Footsites product size id (ID used for carting). Should only be used with a single website in sites. | Footsites |
product_number | String (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:
Field | Type | Description | Default |
---|---|---|---|
color_keywords | String[] (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 |
size | String (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 |
mode | String (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")