ano API Reference
ano is a feed personalization engine. Send posts and a user ID — get back a ranked feed with full explainability. No ML setup, no training data.
Authentication
Every request to a tenant route needs two headers:
x-ano-api-key: ano_live_xxxxxxxxxxxxxxxx x-ano-user-id: <your platform's user ID>
POST /feed
The core endpoint. Call every time a user opens their feed. Returns your posts ranked by relevance to this specific user.
/feed
Request body
{
"posts": [
{
"id": "post_abc",
"title": "Army conducts anti-terror operation in border region",
"body": "Military forces launched a combat operation near the border...",
"timestamp": "2026-03-13T10:00:00Z",
"platform": "news"
}
]
}
Response
{
"tenantId": "acme-news",
"userId": "user_abc",
"count": 3,
"feed": [
{
"id": "post_abc",
"title": "Army conducts anti-terror operation...",
"_score": {
"final": 0.8583,
"raw": 0.9980,
"recencyBoost": 0.86,
"primaryTopic": "military",
"isBlocked": false,
"breakdown": [
{ "topic": "military", "postWeight": 1.0, "userScore": 1.0, "contribution": 1.0 }
]
}
}
]
}
Use _score.breakdown to build a "why am I seeing this?" transparency feature for your users.
POST /event
Record a user's engagement with a post. Call this from your frontend on every interaction. ano uses these signals to improve the user's feed over time.
/event
{
"eventType": "like",
"post": { "id": "post_abc", "title": "...", "body": "..." }
}
POST /profile/:userId/onboard
Solves cold-start. Call once when a user signs up. Show them 5–8 topics to pick from — the feed is useful immediately.
/profile/:userId/onboard
{
"like": ["aviation", "military", "technology"],
"dislike": ["food", "entertainment"]
}
GET /profile/:userId
Fetch an end user's profile. Use to build a "your interests" settings page.
/profile/:userId
POST /profile/:userId
Update explicit topic preferences. Use when a user changes their interests in your settings UI.
/profile/:userId
{
"explicitTopics": {
"sports": true,
"food": false,
"politics": null
}
}
DELETE /profile/:userId
Delete a user's profile entirely. Use for GDPR / right-to-erasure requests.
/profile/:userId
Built-in topics
ano recognises these 12 content domains out of the box: