# 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` — Hottest link/thread entries

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

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

**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 | active | newest | top Example: `hot`
- `limit` (query, optional, string) — Max 1-50 Example: `25`
- `page` (query, optional, string) — Page Example: `1`

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

**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 id

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

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

**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/magazines` — Search or browse magazines

**Parameters:**
- `query` (query, optional, string) — Search term, e.g. technology
- `sort` (query, optional, string) — active | hot | newest Example: `active`
- `limit` (query, optional, string) — Max 1-50 Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/mbin-api/v1/magazines?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
}
```


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