# Mbin API
> A live window into the Mbin / kbin threadiverse — a federated, Reddit-style link-aggregator and microblog on the Fediverse — as an API. Pull the hottest link and thread entries with their magazine, score and comment count; browse the microblog post feed; search or browse magazines (communities) with their subscriber counts; or fetch a single magazine. The federated link-aggregator front page delivered as clean JSON for social, news-aggregation and community-dashboard apps. Live data, no key. Distinct from Lemmy and Mastodon — Mbin is its own software and API.

## 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/mbin-api/..."
```

## Pricing
- **Free** (Free) — 500 calls/Mo, 5 req/s
- **Starter** ($7/Mo) — 14,000 calls/Mo, 15 req/s
- **Pro** ($18/Mo) — 65,000 calls/Mo, 30 req/s
- **Business** ($43/Mo) — 320,000 calls/Mo, 50 req/s

## Endpoints

### Feed

#### `GET /v1/entries` — Link/thread entries

**Parameters:**
- `sort` (query, optional, string) — hot (default), active, newest, top or commented Example: `hot`
- `page` (query, optional, string) — Page Example: `1`
- `limit` (query, optional, string) — Per page (1-50) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/mbin-api/v1/entries?sort=hot&page=1&limit=25"
```

**Response:**
```json
{
    "data": {
        "page": 1,
        "sort": "hot",
        "count": 25,
        "entries": [
            {
                "id": 2803297,
                "url": null,
                "lang": "en",
                "type": "article",
                "user": "@SubArcticTundra@lemmy.ml",
                "ap_id": "https://lemmy.ml/post/48489358",
                "is_oc": false,
                "score": 23,
                "title": "Companies should by law have to pay you for each interview round.",
                "domain": null,
                "comments": 8,
                "is_adult": false,
                "magazine": "showerthoughts@lemmy.world",
                "downvotes": 1,
                "is_pinned": false,
                "created_at": "2026-06-09T02:31:24+00:00"
            },
            {
                "id": 2803245,
                "url": "https://www.thedailybeast.com/donald-trump-79-storms-off-from-meet-the-press-interview/",
                "lang": "en",
                "type": "link",
                "user": "@sanitation@lemmy.today",
                "ap_id": "https://lemmy.today/post/54457605",
                "is_oc": false,
                "score": 39,
                "title": "Trump, 79, Storms Off From Sit-Down After Melting Down at Reporter",
                "domain": "thedailybeast.com",
                "comments": 12,
                "is_adult": false,
                "magazine": "politics@lemmy.world",
                "downvotes": 2,
         
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/posts` — Microblog posts

**Parameters:**
- `sort` (query, optional, string) — hot (default), active, newest, top Example: `hot`
- `page` (query, optional, string) — Page Example: `1`
- `limit` (query, optional, string) — Per page (1-50) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/mbin-api/v1/posts?sort=hot&page=1&limit=25"
```

**Response:**
```json
{
    "data": {
        "page": 1,
        "sort": "hot",
        "count": 25,
        "posts": [
            {
                "id": 1640254,
                "body": "Well, I have been sleeping on the floor with my dog because it keeps her calm at night and I like sleep and can’t sleep during bark storms. Apparently an adverse side effect of that is brown recluse bites. They are starting to look like gunshot wounds.",
                "lang": "en",
                "user": "@jerry@infosec.exchange",
                "ap_id": "https://infosec.exchange/users/jerry/statuses/116717220081078463",
                "score": 0,
                "comments": 38,
                "is_adult": false,
                "magazine": "random",
                "downvotes": 0,
                "created_at": "2026-06-09T00:04:01+00:00"
            },
            {
                "id": 1640291,
                "body": "Look at what just came out of the kiln!\n\nThis is a brand new design. also new; using porcelain instead of stoneware for the first time-because a tile like this should be fancy.\n\nmore coming soon--waiting for the kiln to cool off.\n\n#art #clay #ceramic #pottery #goat #corn #farm #handmade #craft #mastoArt #kentucky",
                "lang": "en",
                "user": "@kenSwinson@indieweb.social",
                "ap_id": "https://indieweb.social/users/kenSwinson/statuses/116717271446067892",
                "score": 0,
                "comments": 17,
                "is_adult": 
…(truncated, see openapi.json for full schema)
```

### Magazines

#### `GET /v1/magazine` — Single magazine by numeric id

**Parameters:**
- `id` (query, required, string) — Numeric magazine id Example: `500`

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

**Response:**
```json
{
    "data": {
        "magazine": {
            "id": 1,
            "name": "random",
            "ap_id": null,
            "posts": 1315776,
            "title": "random",
            "entries": 6315,
            "is_adult": false,
            "description": null,
            "subscribers": 0
        }
    },
    "meta": {
        "timestamp": "2026-06-09T03:03:39.966Z",
        "request_id": "e52b221d-93ad-4755-92ad-7f37090f6c23"
    },
    "status": "ok",
    "message": "Magazine retrieved successfully",
    "success": true
}
```

#### `GET /v1/magazine-entries` — The entries inside one magazine (community feed)

**Parameters:**
- `id` (query, required, string) — Numeric magazine id Example: `500`
- `sort` (query, optional, string) — hot (default), active, newest, top, commented Example: `hot`
- `page` (query, optional, string) — Page Example: `1`
- `limit` (query, optional, string) — Per page (1-50) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/mbin-api/v1/magazine-entries?id=500&sort=hot&page=1&limit=25"
```

**Response:**
```json
{
    "data": {
        "page": 1,
        "sort": "hot",
        "count": 25,
        "entries": [
            {
                "id": 2824000,
                "url": "https://www.windowslatest.com/2026/06/13/whatsapp-is-eating-1-2gb-ram-on-windows-11-even-as-microsoft-kills-web-app-slop/",
                "lang": "en",
                "type": "link",
                "user": "@sanitation@lemmy.today",
                "ap_id": "https://lemmy.today/post/54703948",
                "is_oc": false,
                "score": 98,
                "title": "WhatsApp is the worst app on your Windows 11 PC right now, eating 1.2GB of RAM doing nothing",
                "domain": "windowslatest.com",
                "comments": 9,
                "is_adult": false,
                "magazine": "pcmasterrace@lemmy.world",
                "downvotes": 2,
                "is_pinned": false,
                "created_at": "2026-06-13T07:26:47+00:00"
            },
            {
                "id": 2824920,
                "url": "https://www.tomshardware.com/tech-industry/artificial-intelligence/ai-costs-spike-as-subscriptions-hit-pricing-wall-firms-turn-towards-chinese-llms-open-source-models-to-extend-budget",
                "lang": "en",
                "type": "link",
                "user": "@sanitation@lemmy.today",
                "ap_id": "https://lemmy.today/post/54716692",
                "is_oc": false,
                "score": 11,
                "title": "AI costs spike as subsc
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/magazines` — Magazines: search or browse

**Parameters:**
- `query` (query, optional, string) — Search query (omit to browse) Example: `technology`
- `sort` (query, optional, string) — active (default), hot, newest Example: `active`
- `limit` (query, optional, string) — Per page (1-50) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/mbin-api/v1/magazines?query=technology&sort=active&limit=25"
```

**Response:**
```json
{
    "data": {
        "sort": "active",
        "count": 25,
        "query": null,
        "magazines": [
            {
                "id": 12633,
                "name": "announcements@ani.social",
                "ap_id": "announcements@ani.social",
                "posts": 0,
                "title": "Announcements",
                "entries": 0,
                "is_adult": false,
                "description": "[reserved]",
                "subscribers": 65
            },
            {
                "id": 14005,
                "name": "y2kpics@reddthat.com",
                "ap_id": "y2kpics@reddthat.com",
                "posts": 0,
                "title": "Year@2K Pics",
                "entries": 0,
                "is_adult": false,
                "description": null,
                "subscribers": 108
            },
            {
                "id": 14450,
                "name": "juno@sopuli.xyz",
                "ap_id": "juno@sopuli.xyz",
                "posts": 0,
                "title": "Juno: New Origins",
                "entries": 0,
                "is_adult": false,
                "description": "[On Steam](https://store.steampowered.com/app/870200/Juno_New_Origins/)",
                "subscribers": 55
            },
            {
                "id": 14676,
                "name": "iwanttolearn@lemm.ee",
                "ap_id": "iwanttolearn@lemm.ee",
                "posts": 0,
                "title": "iwanttolearn",
                "ent
…(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/mbin-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "source": "public Mbin instance (kbin.earth), live federated data",
        "service": "mbin-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/posts": "Microblog posts (sort, page, limit).",
            "GET /v1/entries": "Link/thread entries (sort=hot|active|newest|top|commented, page, limit).",
            "GET /v1/magazine": "Single magazine by numeric id (id=).",
            "GET /v1/magazines": "Magazines: search (query=) or browse (sort, page, limit)."
        },
        "description": "Live feed of the Mbin/kbin threadiverse (federated Reddit-style link-aggregator + microblog on the Fediverse) via a public instance: hottest link/thread entries with magazine, score and comments; the microblog post feed; magazine (community) search and browse with subscriber counts; single magazine lookup. Live, no key. Distinct from Lemmy and Mastodon.",
        "entry_sorts": [
            "active",
            "hot",
            "newest",
            "oldest",
            "top",
            "commented"
        ],
        "magazine_sorts": [
            "active",
            "hot",
            "newest"
        ],
        "upstream_status": "ok"
    },
    "meta": {
        "timestamp": "2026-06-09T03:03:40.817Z",
        "request_id": "645d212f-62c5-4dcd-8b3c-80323595faae"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```

### Threadiverse

#### `GET /v1/comments` — The comments on a link/thread entry

**Parameters:**
- `id` (query, required, string) — Numeric entry id (from /v1/entries) Example: `1142609`
- `limit` (query, optional, string) — Per page (1-50) Example: `25`

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

**Response:**
```json
{
    "data": {
        "count": 25,
        "comments": [
            {
                "id": 5986941,
                "body": "1080p on such a small screen is pointless, but if you're into that by the price of one Nintendo game you can upgrade your steam deck screen https://www.deckhd.com/\n\n120Hz is not that different from the decks 90Hz screen, although if you chose to do the upgrade above that downgrades you to 60.\n\nMouse mode, not sure what that is, but the deck has the best of it's kind mouse emulation so I think it will be hard for the switch to compete.\n\nPlus I get to keep my games, and whenever the SD2 comes out I'll get to keep my games and not have to buy them again.",
                "lang": "en",
                "user": "@Nibodhika@lemmy.world",
                "ap_id": "https://lemmy.world/comment/16250503",
                "score": 1,
                "is_adult": false,
                "downvotes": 0,
                "parent_id": null,
                "created_at": "2025-04-05T07:10:04+00:00"
            },
            {
                "id": 5986827,
                "body": "Plus, with the Steamdeck you have more games to play than just Nintendo games or old games you played years ago but have to pay more to play them again on worse hardware.",
                "lang": "en",
                "user": "@DeusUmbra@lemmy.world",
                "ap_id": "https://lemmy.world/comment/16250370",
                "score": 0,
                "is_adult": false,
      
…(truncated, see openapi.json for full schema)
```


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