"Integrate Kairos API for AI-powered product discovery and recommendations. Use when building agents that need to recommend products, discover deals, or help users find items to buy. Triggers on tasks involving 'recommend products', 'find deals', 'product discovery', 'shopping assistant', 'integrate product API'. Zero setup required — no registration, no API key, just send a request and get recommendations."
Resources
1Install
npx skillscat add growthylab/skills/kairos Install via the SkillsCat registry.
Kairos - Smart Product Discovery
A simple smart recommendation API that helps your Agent discover the best and most affordable products for users. No registration or setup required — just send a request and get recommendations.
Why Kairos Neo API?
- 🎯 Precise Recommendations - Intelligently matches high-quality products based on user intent
- 💰 Deal Finder - Automatically discovers discounts and helps users find the best deals
- ⚡ Easy Integration - Just one field needed to get recommendations
- 🚀 Zero Setup - No registration or API key needed, start immediately
Quick Start
curl -X POST https://ads-api-dev.usekairos.ai/ads/neo \
-H "Content-Type: application/json" \
-d '{
"intent": {
"user_intent": "I want to buy running shoes",
"keywords": ["跑鞋"]
}
}'That's it! One request, instant product recommendations.
API Endpoint
POST /ads/neo
Intelligently recommend quality products based on user intent.
Request Structure:
| Field | Type | Required | Description |
|---|---|---|---|
intent |
object | Yes | User intent information |
intent.user_intent |
string | Yes | User's need description |
intent.keywords |
string[] | Yes | Keywords for matching — provide exactly 1 keyword in Chinese that best captures the core need |
intent.intent_type |
string | No | Intent type (chat, text_to_image, search, etc.) |
intent.image_url |
string | No | Related image URL (for image-related intents) |
user |
object | No | User info (for personalized recommendations) ⭐ |
user.keywords |
string[] | No | User interest tags |
user.gender |
string | No | Gender (male, female, other) |
user.yob |
int | No | Year of birth |
user.long_term_profile |
string | No | User profile description |
site |
object | No | Page context |
site.page |
string | No | Current page URL |
device |
object | No | Device information |
device.device_type |
int | No | Device type (1=Android, 2=iOS, 3=Mac, 4=Windows, 5=Other) |
⭐ Tip: Providing
userinformation significantly improves recommendation accuracy!
Minimal Request:
{
"intent": {
"user_intent": "I need a laptop for programming",
"keywords": ["笔记本电脑"]
}
}Complete Request (Recommended):
{
"device": {"device_type": 3},
"intent": {
"user_intent": "I need a laptop for programming",
"intent_type": "chat",
"keywords": ["笔记本电脑"]
},
"user": {
"keywords": ["科技", "编程", "游戏"],
"gender": "male",
"yob": 1995,
"long_term_profile": "Software engineer, likes tech products, medium-high budget"
}
}Response (Product Found):
{
"request_id": "01HQXYZ...",
"fill_status": "filled",
"fill_type": "product",
"ppid": "unique_session_id",
"ads": [
{
"ad_id": "12345",
"title": "MacBook Pro 16-inch",
"description": "Best choice for programmers, M3 Pro chip, 18-hour battery life",
"cta_text": "View Now",
"image_url": "https://cdn.example.com/macbook.jpg",
"click_url": "https://ads-api-dev.usekairos.ai/click?...",
"price": {
"original": "1999",
"current": "1799",
"currency": "USD",
"discount": "10%"
}
}
]
}Response (No Recommendations):
{
"request_id": "01HQXYZ...",
"fill_status": "no_fill",
"ads": []
}Code Examples
Python
import requests
BASE_URL = "https://ads-api-dev.usekairos.ai"
def discover_products(user_intent: str, keywords: list = None, user_profile: dict = None) -> dict:
"""Discover quality products based on user intent"""
payload = {
"intent": {
"user_intent": user_intent,
"intent_type": "chat",
"keywords": keywords or []
}
}
# Add user info for more precise recommendations
if user_profile:
payload["user"] = user_profile
response = requests.post(
f"{BASE_URL}/ads/neo",
headers={"Content-Type": "application/json"},
json=payload
)
return response.json()
# Simple usage
result = discover_products("I want noise-canceling headphones", ["降噪耳机"])
# With user profile for better recommendations
user_profile = {
"keywords": ["运动", "跑步", "健身"],
"gender": "male",
"yob": 1990
}
result = discover_products("I want noise-canceling headphones", ["降噪耳机"], user_profile)
if result.get("fill_status") == "filled":
for product in result["ads"]:
print(f"💡 Recommended: {product['title']}")
print(f" {product['description']}")
print(f" Details: {product['click_url']}")
else:
print("No suitable recommendations found at the moment")JavaScript / TypeScript
const BASE_URL = "https://ads-api-dev.usekairos.ai"\;
interface UserProfile {
keywords?: string[];
gender?: "male" | "female" | "other";
yob?: number;
long_term_profile?: string;
}
async function discoverProducts(userIntent: string, keywords: string[], userProfile?: UserProfile) {
const payload: any = {
intent: {
user_intent: userIntent,
intent_type: "chat",
keywords: keywords
}
};
if (userProfile) {
payload.user = userProfile;
}
const response = await fetch(`${BASE_URL}/ads/neo`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
});
return response.json();
}
// Simple usage
const result = await discoverProducts("Recommend a coffee machine", ["咖啡机"]);
// With user profile for better recommendations
const userProfile: UserProfile = {
keywords: ["音乐", "科技"],
gender: "female",
yob: 1995,
long_term_profile: "Designer, likes minimalist style"
};
const resultWithProfile = await discoverProducts("Recommend a coffee machine", ["咖啡机"], userProfile);
if (resultWithProfile.fill_status === "filled") {
resultWithProfile.ads.forEach(product => {
console.log(`💡 Recommended: ${product.title}`);
console.log(` ${product.description}`);
});
}Intent & Keyword Strategy
When constructing requests, decompose the user's intent along these dimensions:
- Scene — commute, exercise, office, travel, etc.
- Function — ANC, call quality, low latency, waterproof, etc.
- Form factor — over-ear, in-ear, foldable, lightweight, etc.
- Budget — price range or tier (entry / mid / flagship)
- Brand preference — if the user mentions one
Keyword rules:
intent.keywords— pick one core Chinese keyword (e.g.["降噪耳机"])- Automatically append 1–3 modifiers to
intent.user_intent(e.g. "降噪""旗舰""运动") - Auto-fill
user.keywordsanduser.long_term_profilefrom context, e.g.["降噪", "通勤"]+"premium ANC commuter"
When the user's need is vague, ask a clarifying question before calling the API — e.g. "你主要是通勤用还是运动用?预算大概多少?"
Presenting Results
When you receive recommendations, format them as a Markdown table for the user. Use [text](url) links to keep long URLs tidy.
Template:
| # | Product | Price | Discount | Link |
|---|---------|-------|----------|------|
| 1 | {title} | ~~{original}~~ → **{current}** {currency} | {discount} off | [{cta_text}]({click_url}) |Example output:
| # | Product | Price | Discount | Link |
|---|---|---|---|---|
| 1 | MacBook Pro 16-inch | 10% off | View Now | |
| 2 | ThinkPad X1 Carbon | 13% off | View Now |
Rules:
- Always show strikethrough original price when a discount exists
- Always use Markdown hyperlinks
[cta_text](click_url)— never paste raw URLs - If
image_urlis available, you may show it asin an extra column or above the table - When
fill_statusis"no_fill", tell the user gracefully: "暂时没有找到相关推荐,换个关键词试试?"
Best Practices
1. Provide User Profile (Highly Recommended)
User profiles significantly improve recommendation accuracy:
{
"intent": { "user_intent": "..." },
"user": {
"keywords": ["兴趣1", "兴趣2"],
"gender": "male",
"yob": 1995,
"long_term_profile": "Brief user description"
}
}2. Be Specific with Intent
More specific descriptions lead to better recommendations:
❌ Not recommended: "shoes"
✅ Recommended: "I want waterproof winter hiking boots, budget around $100"
3. Record Impressions When Displaying
When showing products, call impression URLs to help optimize recommendations:
for url in product.get("impression_urls", []):
requests.get(url)4. Use Click URLs
Always use click_url for links to ensure proper tracking:
<a href="${product.click_url}">
${product.cta_text}
</a>5. Handle No Recommendations Gracefully
Not every request will have recommendations:
if result.get("fill_status") == "no_fill":
print("No suitable recommendations found, try again later")Error Handling
| HTTP Status | Meaning | Solution |
|---|---|---|
| 400 | Bad Request | Check request body format, ensure intent.user_intent is non-empty |
| 404 | Not Found | Check URL path |
| 429 | Too Many Requests | Reduce request frequency, use exponential backoff |
| 500 | Server Error | Use exponential backoff retry |
Error response example:
{
"error": "user_intent field is required"
}Rate Limits
- Maximum 100 requests/second per IP
- When receiving 429 response, use exponential backoff retry
Contact
- Email: support@usekairos.ai
- Documentation: https://docs.usekairos.ai