# Habr Tech Community API
> Articles, ratings and topic hubs from Habr (habr.com), the largest Russian-speaking technology community, read keyless from its public web API. Habr is where Russian-speaking engineers, scientists and companies publish deep technical articles, and where the community judges them with a signed rating (up-votes minus down-votes) — a score that can go negative, quite unlike a likes-only model. Alongside the rating, every article carries its read count, bookmarks (saves) and comments, and lives in one or more "hubs" (topic communities). The articles endpoint lists the top articles, ranked either by rating over a period (day/week/month/year/all-time) or by date, each with its signed score, vote count, reads, bookmarks, comments, author, hubs and reading time. The article endpoint returns one article in full by its numeric id. The hubs endpoint lists Habr's topic hubs with their subscriber counts and hub rating — the map of Russian tech's interests (AI, information security, programming and the rest). This is the Habr platform cut — a distinct social and developer platform, separate from the Western (dev.to) and Japanese (Qiita) developer communities in the catalogue, with its own signed-rating model and Russian-language community. Scores, reads and subscriber counts are the real, live numbers; a negative score is real, not an error. Titles and hubs are in Russian as Habr publishes them. A short cache fronts the upstream. Keyless.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/habr-api/..."
```

## Pricing
- **Free** (Free) — 750 calls/Mo, 2 req/s
- **Starter** ($26/Mo) — 66,000 calls/Mo, 6 req/s
- **Pro** ($72/Mo) — 460,000 calls/Mo, 16 req/s
- **Scale** ($194/Mo) — 2,700,000 calls/Mo, 40 req/s

## Endpoints

### Articles

#### `GET /v1/articles` — Top articles by rating or date

**Parameters:**
- `sort` (query, optional, string) — rating (default) or date Example: `rating`
- `period` (query, optional, string) — rating only: daily/weekly/monthly/yearly/alltime Example: `weekly`
- `limit` (query, optional, string) — Max results (1-50) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/habr-api/v1/articles?sort=rating&period=weekly&limit=20"
```

**Response:**
```json
{
    "data": {
        "note": "Habr's top articles, ranked by rating over the last week. Each carries its signed score (up-votes minus down-votes — can be negative), total votes, reads, bookmarks (saves), comments, author, hubs and reading time. sort: rating or date; period (rating only): daily/weekly/monthly/yearly/alltime; limit 1-50. Titles are Russian (decoded). Live, cached ~10m.",
        "sort": "rating",
        "count": 20,
        "period": "weekly",
        "source": "Habr public API (habr.com/kek/v2/articles), keyless",
        "articles": [
            {
                "id": 1044904,
                "url": "https://habr.com/ru/articles/1044904/",
                "hubs": [
                    "Математика"
                ],
                "reads": 94,
                "score": 0,
                "title": "Заметки на полях: алгебра матриц Паули",
                "votes": 0,
                "author": "BuddhaSugata",
                "comments": 0,
                "bookmarks": 0,
                "published": "2026-06-13T04:01:27+00:00",
                "reading_time_min": 7
            },
            {
                "id": 1046998,
                "url": "https://habr.com/ru/articles/1046998/",
                "hubs": [
                    "Сетевые технологии",
                    "Системное администрирование",
                    "Rust",
                    "Высоконаг
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/comments` — An article's comments, each with a signed score

**Parameters:**
- `id` (query, required, string) — Numeric Habr article id Example: `1039066`
- `limit` (query, optional, string) — Max comments (1-100) Example: `30`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/habr-api/v1/comments?id=1039066&limit=30"
```

**Response:**
```json
{
    "data": {
        "note": "The comments on a Habr article, each with its own signed score (up-votes minus down-votes — can be negative, like the articles), votes, author, threading (level/parent_id) and timestamp. message is the comment text (HTML stripped, Russian as published). Pass id (the article) and limit (1-100). Live, cached ~10m.",
        "count": 30,
        "source": "Habr public API (habr.com/kek/v2/articles/{id}/comments), keyless",
        "comments": [
            {
                "id": 30081768,
                "level": 0,
                "score": 12,
                "votes": 12,
                "author": "stantum",
                "message": "Почему-то все больше публикаций напоминают школьные рефераты.",
                "parent_id": null,
                "published": "2026-06-08T09:25:19+00:00"
            },
            {
                "id": 30081830,
                "level": 0,
                "score": 2,
                "votes": 2,
                "author": "wango_pama",
                "message": "Забыты аккумуляторы на основе расплава солей. Они очень дешевы (когда-то были, по крайней мере) https://en.wikipedia.org/wiki/ZEBRA_battery",
                "parent_id": null,
                "published": "2026-06-08T09:40:30+00:00"
            },
            {
                "id": 30081866,
                "level": 0,

…(truncated, see openapi.json for full schema)
```

### Article

#### `GET /v1/article` — One article in full by id

**Parameters:**
- `id` (query, required, string) — Numeric Habr article id Example: `1039066`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/habr-api/v1/article?id=1039066"
```

**Response:**
```json
{
    "data": {
        "id": 1046918,
        "url": "https://habr.com/ru/articles/1046918/",
        "hubs": [
            "Машинное обучение"
        ],
        "note": "One Habr article in full: its signed score (up-votes minus down-votes, can be negative), total votes, reads, bookmarks, comments, author, hubs, reading time and publish date. Live, cached ~10m.",
        "reads": 1281,
        "score": 6,
        "title": "Почему тебе нужно стать нейро-панком прямо сейчас",
        "votes": 9,
        "author": "Imperius14",
        "source": "Habr public API (habr.com/kek/v2/articles), keyless",
        "comments": 6,
        "bookmarks": 7,
        "published": "2026-06-12T20:30:04+00:00",
        "reading_time_min": 5
    },
    "meta": {
        "timestamp": "2026-06-13T04:42:01.581Z",
        "request_id": "9fabce02-d129-4800-bffc-ef8c246a410f"
    },
    "status": "ok",
    "message": "Article retrieved successfully",
    "success": true
}
```

### Hubs

#### `GET /v1/hub` — Top articles in a hub (topic community)

**Parameters:**
- `hub` (query, required, string) — Habr hub alias (from /v1/hubs) Example: `infosecurity`
- `sort` (query, optional, string) — rating (default) or date Example: `rating`
- `period` (query, optional, string) — rating only: daily/weekly/monthly/yearly/alltime Example: `weekly`
- `limit` (query, optional, string) — Max results (1-50) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/habr-api/v1/hub?hub=infosecurity&sort=rating&period=weekly&limit=20"
```

**Response:**
```json
{
    "data": {
        "hub": "infosecurity",
        "note": "The top articles in a Habr hub (a topic community), ranked by rating over a period or by date. Each carries its signed score, votes, reads, bookmarks, comments, author, hubs and reading time. Pass hub (the alias, from /v1/hubs), sort (rating/date), period and limit (1-50). Live, cached ~10m.",
        "sort": "rating",
        "count": 20,
        "period": "weekly",
        "source": "Habr public API (habr.com/kek/v2/articles), keyless",
        "articles": [
            {
                "id": 1046710,
                "url": "https://habr.com/ru/articles/1046710/",
                "hubs": [
                    "Реверс-инжиниринг",
                    "Информационная безопасность",
                    "Android",
                    "Аналитика мобильных приложений",
                    "Законодательство в IT"
                ],
                "reads": 71139,
                "score": 472,
                "title": "RuStore качает MAX без спроса и мониторит GPS каждые 5 минут и ему даже не стыдно",
                "votes": 448,
                "author": "zarazaexe",
                "comments": 383,
                "bookmarks": 200,
                "published": "2026-06-11T23:29:53+00:00",
                "reading_time_min": 22
            },
            {
                "id": 1
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/hubs` — Topic hubs with subscribers and rating

**Parameters:**
- `limit` (query, optional, string) — Max results (1-100) Example: `30`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/habr-api/v1/hubs?limit=30"
```

**Response:**
```json
{
    "data": {
        "hubs": [
            {
                "alias": "artificial_intelligence",
                "title": "Искусственный интеллект",
                "rating": 2614.93,
                "subscribers": 123467
            },
            {
                "alias": "infosecurity",
                "title": "Информационная безопасность",
                "rating": 1515.7,
                "subscribers": 614219
            },
            {
                "alias": "programming",
                "title": "Программирование",
                "rating": 1359.27,
                "subscribers": 406807
            },
            {
                "alias": "popular_science",
                "title": "Научно-популярное",
                "rating": 1341.01,
                "subscribers": 208264
            },
            {
                "alias": "machine_learning",
                "title": "Машинное обучение",
                "rating": 1328.11,
                "subscribers": 113244
            },
            {
                "alias": "career",
                "title": "Карьера в IT-индустрии",
                "rating": 914.15,
                "subscribers": 105562
            },
            {
                "alias": "DIY",
                "title": "DIY или Сделай сам",
                "rating": 720.46,
                "subscribers": 428284
            }
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/habr-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "note": "articles takes sort (rating or date, default rating), period (rating only: daily/weekly/monthly/yearly/alltime, default daily) and limit (1-50). article takes id (a numeric Habr article id). hubs takes limit (1-100). meta takes no parameters. score is signed (up-votes minus down-votes) and can be negative — that is real, not an error; reads is the article's view count, bookmarks are saves. Russian text returned as published. A ~10-minute cache fronts the upstream.",
        "sample": {
            "reads": 94,
            "score": 0,
            "title": "Заметки на полях: алгебра матриц Паули"
        },
        "source": "Habr public API (habr.com/kek/v2), keyless, live",
        "service": "habr-api",
        "endpoints": {
            "GET /v1/hubs": "Topic hubs with subscribers and rating (limit=30).",
            "GET /v1/meta": "This document.",
            "GET /v1/article": "One article in full by id.",
            "GET /v1/articles": "Top articles by rating/date (sort=rating, period=weekly)."
        },
        "description": "Articles, ratings and topic hubs from Habr (habr.com), the largest Russian-speaking technology community, keyless. The articles endpoint lists top articles ranked by rating over a period or by date (signed score, votes, reads, bookmarks, comments, author, hubs, reading time); the article endpoint returns one by id; the hubs endpoint lists Habr's topic hubs with subscribers and 
…(truncated, see openapi.json for full schema)
```

### Users

#### `GET /v1/user` — A user profile: rating, karma, followers

**Parameters:**
- `alias` (query, required, string) — Habr username Example: `alizar`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/habr-api/v1/user?alias=alizar"
```

**Response:**
```json
{
    "data": {
        "url": "https://habr.com/ru/users/alizar/",
        "note": "A Habr user profile: rating (Habr's reputation metric) and rating_position, karma_score (signed — can be negative), votes, followers, registration date, speciality and last activity. Find aliases in any article's author field. Live, cached ~10m.",
        "alias": "alizar",
        "rating": 175.5,
        "source": "Habr public API (habr.com/kek/v2/users), keyless",
        "fullname": "Анатолий Ализар",
        "followers": 2583,
        "following": 118,
        "registered": "2006-06-11T16:02:32+00:00",
        "speciality": "автор, фрилансер",
        "karma_score": 1125,
        "karma_votes": 4441,
        "last_activity": "2026-06-12T12:06:44+00:00",
        "rating_position": 32
    },
    "meta": {
        "timestamp": "2026-06-13T13:47:27.023Z",
        "request_id": "7bc7b925-66aa-480e-930a-d6f70f2988bc"
    },
    "status": "ok",
    "message": "User retrieved successfully",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/habr-api
OpenAPI spec: https://www.oanor.com/api/habr-api/openapi.json
