# VNDB

> Search VNDB, the Visual Novel Database: visual novels, releases, producers, characters, staff, tags, traits and quotes. Read and update your own visual novel list too: votes, notes, start and finish dates, labels and the releases you own.

App · Film, TV & Fandom · 20 actions. Web page: https://docs.lodol.com/docs/integrations/vndb

## Actions

### Get connected account

Get the VNDB account this connection's token belongs to and what the token is allowed to do. Useful for checking a token has list write access before a workflow tries to use it.

**Inputs**: None.

**Outputs**

- `id` (text): VNDB user ID, e.g. 'u3'.
- `permissions` (list): What the token may do: 'listread' to see private list entries, 'listwrite' to change the list.
- `url` (text): The account's profile on vndb.org.
- `username` (text): Username.

**Example output**

```json
{
  "id": "u3",
  "permissions": [
    "listread",
    "listwrite"
  ],
  "url": "https://vndb.org/u3",
  "username": "ayo"
}
```

### Get database stats

Get how many visual novels, releases, producers, characters, staff, tags and traits VNDB currently holds.

**Inputs**: None.

**Outputs**

- `characters` (number): Character entries.
- `producers` (number): Producer entries.
- `releases` (number): Release entries.
- `staff` (number): Staff entries.
- `tags` (number): Tags defined.
- `traits` (number): Traits defined.
- `visual_novels` (number): Visual novel entries in the database.

**Example output**

```json
{
  "characters": 168621,
  "producers": 29712,
  "releases": 155019,
  "staff": 53587,
  "tags": 3014,
  "traits": 3327,
  "visual_novels": 65592
}
```

### Get random quote

Get one random visual novel quote, picked the same way the VNDB site footer picks one. Good for a daily message.

**Inputs**: None.

**Outputs**

- `quote` (object): The quote that was picked.

**Example output**

```json
{
  "quote": {
    "character": {
      "id": "c192",
      "name": "Naoe Riki",
      "url": "https://vndb.org/c192"
    },
    "id": "q1481",
    "quote": "Spoilers are a serious crime...",
    "score": 65,
    "visual_novel": {
      "id": "v5",
      "title": "Little Busters!",
      "url": "https://vndb.org/v5"
    }
  }
}
```

### Get users

Look up VNDB users by username or user ID and get their profile link and play-time voting totals. Names that match nobody come back separately, so a bad name doesn't fail the step.

**Inputs**

- Usernames or IDs (`users`, list, required): The usernames or user IDs to look up, e.g. 'Yorhel' or 'u2'. Matching is case-insensitive.

**Outputs**

- `count` (number): How many users were found.
- `not_found` (list): Terms that matched no VNDB user.
- `users` (list): The users that were found.

**Example output**

```json
{
  "count": 1,
  "not_found": [
    "nobody-by-this-name"
  ],
  "users": [
    {
      "id": "u2",
      "length_votes": 10,
      "length_votes_minutes": 10239,
      "searched_for": "yorhel",
      "url": "https://vndb.org/u2",
      "username": "Yorhel"
    }
  ]
}
```

### Get visual novel

Get one visual novel in full by its VNDB ID, including its description, tags, developers and related entries. Use this after a search when you need more than the summary.

**Inputs**

- Visual novel ID (`visual_novel_id`, text, required): The VNDB ID, e.g. 'v17', the last part of the entry's URL. The number on its own works too.

**Outputs**

- `visual_novel` (object): The visual novel that was asked for.

**Example output**

```json
{
  "visual_novel": {
    "aliases": [
      "Ever 17",
      "E17"
    ],
    "alt_title": null,
    "average": 8.45,
    "description": "Ever17 is the tale of seven individuals who become trapped 51 metres below the surface in the underwater theme park 'LeMU'.",
    "developers": [
      {
        "id": "p97",
        "name": "KID",
        "type": "company",
        "url": "https://vndb.org/p97"
      }
    ],
    "development_status": "finished",
    "external_links": [
      {
        "id": "580290",
        "label": "Steam",
        "site": "steam",
        "url": "https://store.steampowered.com/app/580290/"
      }
    ],
    "id": "v17",
    "image": {
      "height": 1529,
      "sexual": 0,
      "thumbnail_url": "https://t.vndb.org/cv.t/12/79412.jpg",
      "url": "https://t.vndb.org/cv/12/79412.jpg",
      "violence": 0,
      "width": 1080
    },
    "languages": [
      "en",
      "ja",
      "zh-Hans"
    ],
    "length": "long",
    "length_minutes": 1987,
    "length_votes": 193,
    "original_language": "ja",
    "platforms": [
      "win",
      "ps2",
      "psp"
    ],
    "rating": 8.45,
    "relations": [
      {
        "id": "v1123",
        "official": true,
        "relation": "shares characters",
        "title": "Never7 -the end of infinity-",
        "url": "https://vndb.org/v1123"
      }
    ],
    "released": "2002-08-29",
    "tags": [
      {
        "category": "content",
        "id": "g6",
        "name": "Science Fiction",
        "rating": 2.7,
        "spoiler_level": 0
      }
    ],
    "title": "Ever17 -the out of infinity-",
    "url": "https://vndb.org/v17",
    "vote_count": 8685
  }
}
```

### List list labels

List the labels a VNDB user organises their list with (Playing, Finished, Wishlist, and any custom ones), with how many visual novels carry each. Defaults to the connected account.

**Inputs**

- User (`user`, text): Whose labels to read, as a username or user ID. Leave blank for the connected account.

**Outputs**

- `count` (number): How many labels were returned.
- `labels` (list): The user's list labels.

**Example output**

```json
{
  "count": 1,
  "labels": [
    {
      "count": 112,
      "id": 2,
      "label": "Finished",
      "private": false
    }
  ]
}
```

### List quotes

List memorable lines from visual novels, best-liked first. Narrow to one visual novel or one character, or leave both blank for the highest-scoring quotes in the database.

**Inputs**

- Visual novel ID (`visual_novel_id`, text): Only include quotes from this visual novel, e.g. 'v5'.
- Character ID (`character_id`, text): Only include quotes from this character, e.g. 'c192'.
- Sort by (`sort_by`, text): How to order the results. One of: `score` (Highest score), `lowest_score` (Lowest score), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many quotes this page returned.
- `has_more` (true/false): Whether another page of results is available.
- `quotes` (list): The matching quotes.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "quotes": [
    {
      "character": {
        "id": "c192",
        "name": "Naoe Riki",
        "url": "https://vndb.org/c192"
      },
      "id": "q1481",
      "quote": "Spoilers are a serious crime...",
      "score": 65,
      "visual_novel": {
        "id": "v5",
        "title": "Little Busters!",
        "url": "https://vndb.org/v5"
      }
    }
  ]
}
```

### List reference data

List the codes VNDB uses for languages, platforms, media and staff roles, each with the name its own site shows. Use it to turn a code like 'win' from another step's output into 'Windows'.

**Inputs**: None.

**Outputs**

- `languages` (list): Every language code VNDB recognises.
- `media` (list): Every distribution medium VNDB recognises.
- `platforms` (list): Every platform code VNDB recognises.
- `staff_roles` (list): Every production role staff can be credited in.

**Example output**

```json
{
  "languages": [
    {
      "id": "ja",
      "label": "Japanese"
    }
  ],
  "media": [
    {
      "id": "cd",
      "label": "CD"
    }
  ],
  "platforms": [
    {
      "id": "win",
      "label": "Windows"
    }
  ],
  "staff_roles": [
    {
      "id": "scenario",
      "label": "Scenario"
    }
  ]
}
```

### List visual novel list

Read a VNDB user's visual novel list: their votes, notes, start and finish dates, labels and owned releases. Defaults to the connected account.

**Inputs**

- User (`user`, text): Whose list to read, as a username or user ID. Leave blank for the connected account.
- Label (`label_id`, text): Only include entries carrying this label. The choices are the connected account's own labels.
- Sort by (`sort_by`, text): How to order the results. One of: `vote` (Highest vote), `lowest_vote` (Lowest vote), `recently_changed` (Recently changed), `recently_added` (Recently added), `recently_finished` (Recently finished), `recently_started` (Recently started), `title` (Title (A–Z)), `newest` (Newest first), `rating` (Highest rated), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many list entries this page returned.
- `entries` (list): The matching list entries.
- `has_more` (true/false): Whether another page of results is available.

**Example output**

```json
{
  "count": 1,
  "entries": [
    {
      "added_at": "2007-09-22T12:18:22Z",
      "finished": "2026-02-11",
      "image_url": "https://t.vndb.org/cv/12/79412.jpg",
      "labels": [
        {
          "id": 2,
          "label": "Finished"
        },
        {
          "id": 7,
          "label": "Voted"
        }
      ],
      "notes": null,
      "released": "2002-08-29",
      "releases": [
        {
          "id": "r12",
          "status": "obtained",
          "title": "Ever 17 - Out of Infinity",
          "url": "https://vndb.org/r12"
        }
      ],
      "site_rating": 8.45,
      "started": "2026-01-04",
      "title": "Ever17 -the out of infinity-",
      "updated_at": "2008-08-06T09:27:25Z",
      "url": "https://vndb.org/v17",
      "visual_novel_id": "v17",
      "vote": 10.0,
      "voted_at": "2007-09-22T12:18:22Z"
    }
  ],
  "has_more": false
}
```

### Remove from release list

Remove a release from the connected account's list. The visual novel itself stays on the list. Needs a token with list write access.

**Inputs**

- Release ID (`release_id`, text, required): The VNDB release ID to remove, e.g. 'r12'.

**Outputs**: None.

**Example output**

```json
{}
```

### Remove from visual novel list

Remove a visual novel from the connected account's list, along with any of its releases on the list. Succeeds whether or not it was there. Needs a token with list write access.

**Inputs**

- Visual novel ID (`visual_novel_id`, text, required): The VNDB ID to remove, e.g. 'v17'.

**Outputs**: None.

**Example output**

```json
{}
```

### Save to release list

Mark a specific release as owned, pending, on loan or deleted on the connected account's list. Its visual novels are added to the list too if they aren't already. Needs a token with list write access.

**Inputs**

- Release ID (`release_id`, text, required): The VNDB release ID, e.g. 'r12'. Use the Search releases action to find it.
- Status (`status`, text): How you hold this release. Defaults to unknown. One of: `unknown`, `pending`, `obtained`, `on loan`, `deleted`.

**Outputs**

- `release_id` (text): The release that was saved, e.g. 'r12'.
- `status` (text): The status now stored: unknown, pending, obtained, on loan, or deleted.
- `url` (text): The release's page on vndb.org.

**Example output**

```json
{
  "release_id": "r12",
  "status": "obtained",
  "url": "https://vndb.org/r12"
}
```

### Save to visual novel list

Add a visual novel to the connected account's list, or update the one already there: its vote, notes, start and finish dates and labels. Only the fields you fill in change. Needs a token with list write access.

**Inputs**

- Visual novel ID (`visual_novel_id`, text, required): The VNDB ID to add or update, e.g. 'v17'. It is added to the list if it isn't on it yet.
- Vote (`vote`, number): Your vote on VNDB's 1–10 scale, e.g. 8.5. Voting also adds the 'Voted' label, which VNDB manages itself. From 1 to 10.
- Remove the vote (`remove_vote`, true/false): Clear an existing vote. The visual novel stays on the list. Use Remove from visual novel list to take it off. Default: `false`.
- Notes (`notes`, text): Your private notes on this visual novel.
- Started on (`started`, date): The date you started reading it.
- Finished on (`finished`, date): The date you finished it.
- Labels (replace) (`labels`, list): Set the entry's labels to exactly these, dropping any others. Leave blank to keep the labels it has.
- Labels to add (`add_labels`, list): Add these labels, keeping the ones already there.
- Labels to remove (`remove_labels`, list): Take these labels off, leaving the rest alone.

**Outputs**

- `entry` (object): The list entry as VNDB stored it.

**Example output**

```json
{
  "entry": {
    "added_at": "2007-09-22T12:18:22Z",
    "finished": "2026-02-11",
    "image_url": "https://t.vndb.org/cv/12/79412.jpg",
    "labels": [
      {
        "id": 2,
        "label": "Finished"
      },
      {
        "id": 7,
        "label": "Voted"
      }
    ],
    "notes": null,
    "released": "2002-08-29",
    "releases": [
      {
        "id": "r12",
        "status": "obtained",
        "title": "Ever 17 - Out of Infinity",
        "url": "https://vndb.org/r12"
      }
    ],
    "site_rating": 8.45,
    "started": "2026-01-04",
    "title": "Ever17 -the out of infinity-",
    "updated_at": "2008-08-06T09:27:25Z",
    "url": "https://vndb.org/v17",
    "visual_novel_id": "v17",
    "vote": 10.0,
    "voted_at": "2007-09-22T12:18:22Z"
  }
}
```

### Search characters

Search visual novel characters by name, by the visual novel they appear in, or by trait. Returns their description, portrait, traits and the roles they play.

**Inputs**

- Name (`query`, text): Text to search character names for.
- Character IDs (`ids`, list): Return only these characters, by VNDB ID (e.g. 'c30'). Use this to look up specific entries, including ones found by an earlier step. The number on its own works too.
- Visual novel ID (`visual_novel_id`, text): Only include characters appearing in this visual novel, e.g. 'v17'.
- Trait IDs (`trait_ids`, list): Only include characters with any of these traits, by VNDB trait ID (e.g. 'i220'). Use the Search traits action to find the IDs.
- Role (`role`, text): Only include characters in this kind of role. One of: `Protagonist`, `Main character`, `Side character`, `Makes an appearance`.
- Sex (`sex`, text): Only include characters recorded with this sex. One of: `male`, `female`, `both`, `sexless`.
- Blood type (`blood_type`, text): Only include characters with this blood type. One of: `a`, `b`, `ab`, `o`.
- Sort by (`sort_by`, text): How to order the results. One of: `best_match` (Best match), `name` (Name (A–Z)), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `characters` (list): The matching characters.
- `count` (number): How many characters this page returned.
- `has_more` (true/false): Whether another page of results is available.

**Example output**

```json
{
  "characters": [
    {
      "age": 23,
      "aliases": [
        "Tsugumin"
      ],
      "birthday": "07-05",
      "blood_type": "ab",
      "bust_cm": null,
      "cup_size": null,
      "description": "A girl of few words, shrouded in mystery.",
      "gender": {
        "apparent": "female",
        "real": "female"
      },
      "height_cm": null,
      "hips_cm": null,
      "id": "c30",
      "image": {
        "height": 300,
        "sexual": 0,
        "thumbnail_url": null,
        "url": "https://t.vndb.org/ch/89/119989.jpg",
        "violence": 0,
        "width": 255
      },
      "name": "Komachi Tsugumi",
      "original_name": "\u5c0f\u753a \u3064\u3050\u307f",
      "sex": {
        "apparent": "female",
        "real": "female"
      },
      "traits": [
        {
          "group": "Hair",
          "id": "i4",
          "lie": false,
          "name": "Black",
          "spoiler_level": 0
        }
      ],
      "url": "https://vndb.org/c30",
      "visual_novels": [
        {
          "id": "v17",
          "role": "Main character",
          "spoiler_level": 0,
          "title": "Ever17 -the out of infinity-",
          "url": "https://vndb.org/v17"
        }
      ],
      "waist_cm": null,
      "weight_kg": null
    }
  ],
  "count": 1,
  "has_more": false
}
```

### Search producers

Search the companies, doujin circles and individuals who make visual novels, with their aliases, description and official links.

**Inputs**

- Name (`query`, text): Text to search producer names for, e.g. 'Key'.
- Producer IDs (`ids`, list): Return only these producers, by VNDB ID (e.g. 'p30'). Use this to look up specific entries, including ones found by an earlier step. The number on its own works too.
- Language (`language`, text): Only include producers whose primary language is this.
- Type (`producer_type`, text): Only include producers of this kind. One of: `company`, `individual`, `amateur group`.
- Sort by (`sort_by`, text): How to order the results. One of: `best_match` (Best match), `name` (Name (A–Z)), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many producers this page returned.
- `has_more` (true/false): Whether another page of results is available.
- `producers` (list): The matching producers.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "producers": [
    {
      "aliases": [],
      "description": "A Japanese game studio behind Symphonic Rain and Gadget Trial.",
      "external_links": [
        {
          "id": "http://www.kogado.com/",
          "label": "Official website",
          "site": "website",
          "url": "http://www.kogado.com/"
        }
      ],
      "id": "p30",
      "language": "ja",
      "name": "Kogado Studio",
      "original_name": "\u5de5\u753b\u5802\u30b9\u30bf\u30b8\u30aa",
      "type": "company",
      "url": "https://vndb.org/p30"
    }
  ]
}
```

### Search releases

Search the editions a visual novel actually shipped in: each language, platform, medium and publisher, with its age rating, resolution, engine and voice acting. Narrow to one visual novel to list everything it was released as.

**Inputs**

- Title (`query`, text): Text to search release titles for.
- Release IDs (`ids`, list): Return only these releases, by VNDB ID (e.g. 'r12'). Use this to look up specific entries, including ones found by an earlier step. The number on its own works too.
- Visual novel ID (`visual_novel_id`, text): Only include releases of this visual novel, e.g. 'v17'.
- Languages (`languages`, list): Only include entries available in any of these languages.
- Platforms (`platforms`, list): Only include entries available on any of these platforms.
- Media (`media`, list): Only include releases distributed on any of these media.
- Minimum age rating (`min_age`, number): Only include releases rated for this age or older, in years. 0 means all ages. One of: `0` (All ages), `6` (6+), `12` (12+), `15` (15+), `16` (16+), `17` (17+), `18` (18+).
- Voice acting (`voice_acting`, text): Only include releases with this much voice acting. One of: `not voiced`, `ero scenes only`, `partially voiced`, `fully voiced`.
- Official releases only (`official_only`, true/false): Leave off to include fan translations and other unofficial releases. Default: `false`.
- Released on or after (`released_after`, date): Only include releases from this date onwards.
- Released on or before (`released_before`, date): Only include releases up to this date.
- Sort by (`sort_by`, text): How to order the results. One of: `best_match` (Best match), `newest` (Newest first), `oldest` (Oldest first), `title` (Title (A–Z)), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many releases this page returned.
- `has_more` (true/false): Whether another page of results is available.
- `releases` (list): The matching releases.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "releases": [
    {
      "alt_title": null,
      "catalog": "HI-APPC002",
      "engine": "MAGES. Engine",
      "external_links": [
        {
          "id": "http://www.hirameki-int.com/",
          "label": "Official website",
          "site": "website",
          "url": "http://www.hirameki-int.com/"
        }
      ],
      "freeware": false,
      "gtin": "820170101013",
      "has_adult_content": false,
      "id": "r12",
      "languages": [
        {
          "language": "en",
          "latin": null,
          "machine_translation": false,
          "main": true,
          "title": "Ever 17 - Out of Infinity"
        }
      ],
      "media": [
        {
          "medium": "cd",
          "quantity": 4
        }
      ],
      "min_age": 13,
      "notes": "Older batches contain a faulty CD4.",
      "official": true,
      "patch": false,
      "platforms": [
        "win"
      ],
      "producers": [
        {
          "developer": false,
          "id": "p9",
          "name": "Hirameki International",
          "publisher": true,
          "url": "https://vndb.org/p9"
        }
      ],
      "released": "2005-12-20",
      "resolution": "800x600",
      "title": "Ever 17 - Out of Infinity",
      "uncensored": null,
      "url": "https://vndb.org/r12",
      "visual_novels": [
        {
          "id": "v17",
          "release_type": "complete",
          "title": "Ever17 -the out of infinity-",
          "url": "https://vndb.org/v17"
        }
      ],
      "voice_acting": "fully voiced"
    }
  ]
}
```

### Search staff

Search the writers, artists, composers and voice actors credited on visual novels, with every name they work under.

**Inputs**

- Name (`query`, text): Text to search staff names for.
- Staff IDs (`ids`, list): Return only these people, by VNDB ID (e.g. 's81'). Use this to look up specific entries, including ones found by an earlier step. The number on its own works too.
- Language (`language`, text): Only include staff whose primary language is this.
- Role (`role`, text): Only include staff credited in this role on some visual novel.
- One row per person (`main_names_only`, true/false): VNDB indexes staff by name, so someone credited under five aliases matches five times. Leave this on unless you want a row per alias. Default: `true`.
- Sort by (`sort_by`, text): How to order the results. One of: `best_match` (Best match), `name` (Name (A–Z)), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many people this page returned.
- `has_more` (true/false): Whether another page of results is available.
- `staff` (list): The matching people.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "staff": [
    {
      "alias_id": 158,
      "aliases": [
        {
          "alias_id": 158,
          "is_main_name": true,
          "latin": "Asakawa Yuu",
          "name": "\u6d45\u5ddd \u60a0"
        }
      ],
      "description": "Japanese voice actress.",
      "external_links": [
        {
          "id": "Yuu Asakawa",
          "label": "Wikipedia (en)",
          "site": "enwiki",
          "url": "https://en.wikipedia.org/wiki/Yuu_Asakawa"
        }
      ],
      "gender": "female",
      "id": "s81",
      "is_main_name": true,
      "language": "ja",
      "name": "Asakawa Yuu",
      "original_name": "\u6d45\u5ddd \u60a0",
      "url": "https://vndb.org/s81"
    }
  ]
}
```

### Search tags

Search the tag vocabulary VNDB applies to visual novels. Use it to turn a theme like 'Time Loop' into the tag ID the Search visual novels action filters on.

**Inputs**

- Tag name (`query`, text): Text to search tag names and aliases for.
- Tag IDs (`ids`, list): Return only these tags, by VNDB ID (e.g. 'g505'). Use this to look up specific entries, including ones found by an earlier step. The number on its own works too.
- Category (`category`, text): Only include tags in this category. One of: `content`, `sexual content`, `technical`.
- Sort by (`sort_by`, text): How to order the results. One of: `best_match` (Best match), `popularity` (Most used), `name` (Name (A–Z)), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many tags this page returned.
- `has_more` (true/false): Whether another page of results is available.
- `tags` (list): The matching tags.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "tags": [
    {
      "aliases": [
        "Dense about Love Protagonist"
      ],
      "applicable": true,
      "category": "content",
      "description": "This protagonist is totally immune to romantic advances.",
      "id": "g505",
      "name": "Donkan Protagonist",
      "searchable": true,
      "url": "https://vndb.org/g505",
      "vn_count": 674
    }
  ]
}
```

### Search traits

Search the trait vocabulary VNDB applies to characters. Use it to turn a trait like 'Kuudere' into the trait ID the Search characters action filters on.

**Inputs**

- Trait name (`query`, text): Text to search trait names and aliases for.
- Trait IDs (`ids`, list): Return only these traits, by VNDB ID (e.g. 'i220'). Use this to look up specific entries, including ones found by an earlier step. The number on its own works too.
- Sort by (`sort_by`, text): How to order the results. One of: `best_match` (Best match), `popularity` (Most used), `name` (Name (A–Z)), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many traits this page returned.
- `has_more` (true/false): Whether another page of results is available.
- `traits` (list): The matching traits.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "traits": [
    {
      "aliases": [
        "Coodere"
      ],
      "applicable": true,
      "character_count": 781,
      "description": "Starts cold and uninterested, but turns lovestruck later.",
      "group": "Personality",
      "group_id": "i39",
      "id": "i220",
      "name": "Kuudere",
      "searchable": true,
      "sexual": false,
      "url": "https://vndb.org/i220"
    }
  ]
}
```

### Search visual novels

Search VNDB's visual novel database by title and narrow it down by language, platform, tag, rating, length or release date. Returns each entry's rating, play time, cover image and vndb.org link.

**Inputs**

- Title (`query`, text): Text to search for. Matches titles, aliases and release titles, e.g. 'Ever17'.
- Visual novel IDs (`ids`, list): Return only these visual novels, by VNDB ID (e.g. 'v17'). Use this to look up specific entries, including ones found by an earlier step. The number on its own works too.
- Languages (`languages`, list): Only include entries available in any of these languages.
- Originally written in (`original_language`, text): Only include visual novels first written in this language.
- Platforms (`platforms`, list): Only include entries available on any of these platforms.
- Tag IDs (`tag_ids`, list): Only include visual novels carrying any of these tags, by VNDB tag ID (e.g. 'g505'). Use the Search tags action to find the IDs.
- Development status (`development_status`, text): Only include visual novels at this stage. One of: `finished`, `in development`, `cancelled`.
- Play time (`length`, text): Only include visual novels in this play-time bracket. One of: `very short`, `short`, `medium`, `long`, `very long`.
- Minimum rating (`min_rating`, number): Only include visual novels rated at least this highly, on VNDB's own 1–10 scale. From 1 to 10.
- Released on or after (`released_after`, date): Only include visual novels released on or after this date.
- Released on or before (`released_before`, date): Only include visual novels released on or before this date.
- Sort by (`sort_by`, text): How to order the results. One of: `best_match` (Best match), `rating` (Highest rated), `votes` (Most votes), `newest` (Newest first), `oldest` (Oldest first), `title` (Title (A–Z)), `id` (VNDB ID).
- How many (`results`, number): How many results to return (1–100). From 1 to 100. Default: `10`.
- Page (`page`, number): Which page of results to return. Page 1 is the first page. At least 1. Default: `1`.

**Outputs**

- `count` (number): How many visual novels this page returned.
- `has_more` (true/false): Whether another page of results is available.
- `visual_novels` (list): The matching visual novels.

**Example output**

```json
{
  "count": 1,
  "has_more": false,
  "visual_novels": [
    {
      "aliases": [
        "Ever 17",
        "E17"
      ],
      "alt_title": null,
      "average": 8.45,
      "development_status": "finished",
      "id": "v17",
      "image": {
        "height": 1529,
        "sexual": 0,
        "thumbnail_url": "https://t.vndb.org/cv.t/12/79412.jpg",
        "url": "https://t.vndb.org/cv/12/79412.jpg",
        "violence": 0,
        "width": 1080
      },
      "languages": [
        "en",
        "ja",
        "zh-Hans"
      ],
      "length": "long",
      "length_minutes": 1987,
      "length_votes": 193,
      "original_language": "ja",
      "platforms": [
        "win",
        "ps2",
        "psp"
      ],
      "rating": 8.45,
      "released": "2002-08-29",
      "title": "Ever17 -the out of infinity-",
      "url": "https://vndb.org/v17",
      "vote_count": 8685
    }
  ]
}
```
