Dangodeck API
A fast, professional REST API for anime TCG cards. JSON responses, fuzzy search,
pagination, filtering, and Redis-backed caching. Interactive Swagger is available at
/docs/api.
Base URL
All endpoints are served under the /api prefix.
Authentication
The public API requires no authentication. All read endpoints are open. Please be considerate and cache where possible.
Rate Limit
Requests are limited to 120 requests per minute per IP. Exceeding the
limit returns 429 Too Many Requests.
Response Shape
Every successful response is wrapped in a consistent envelope.
{
"success": true,
"data": { /* card or list */ }
}Random Card (rolled stats)
/api/cards/random
Returns a random card with a randomly rolled rarity, level (1-100), evo (1-3) and ascension (0-5). The "stats" field holds the calculated stats; "baseStats", "params" and "multipliers" show the breakdown. Great for game bots.
curl -s "https://dangodeck.nett.to/api/cards/random"
const res = await fetch("https://dangodeck.nett.to/api/cards/random");
const { data } = await res.json();
console.log(data);
const res = await fetch("https://dangodeck.nett.to/api/cards/random");
const { data } = (await res.json()) as { data: unknown };
console.log(data);
import requests
res = requests.get("https://dangodeck.nett.to/api/cards/random")
print(res.json()["data"])
<?php
$res = file_get_contents("https://dangodeck.nett.to/api/cards/random");
$json = json_decode($res, true);
print_r($json["data"]);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
res, _ := http.Get("https://dangodeck.nett.to/api/cards/random")
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
Random Card (base stats)
/api/cards/random/base
Returns a single randomly selected card with its base stats only.
curl -s "https://dangodeck.nett.to/api/cards/random/base"
const res = await fetch("https://dangodeck.nett.to/api/cards/random/base");
const { data } = await res.json();
console.log(data);
const res = await fetch("https://dangodeck.nett.to/api/cards/random/base");
const { data } = (await res.json()) as { data: unknown };
console.log(data);
import requests
res = requests.get("https://dangodeck.nett.to/api/cards/random/base")
print(res.json()["data"])
<?php
$res = file_get_contents("https://dangodeck.nett.to/api/cards/random/base");
$json = json_decode($res, true);
print_r($json["data"]);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
res, _ := http.Get("https://dangodeck.nett.to/api/cards/random/base")
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
Calculate Card Stats
/api/cards/1/stats
Deterministic stat calculation for a card at chosen tiers: final = round(base × rarity × level × evo × ascension).
| Parameter | Type | Description |
|---|---|---|
| id | number (path) | Numeric ID of the card. |
| rarity | string | base, common, uncommon, rare, super_rare, ultra_rare. Default base. |
| level | number (1-100) | Card level. Default 1. |
| evo | number (1-3) | Evolution stage. Default 1. |
| ascension | number (0-5) | Ascension rank. Default 0. |
curl -s "https://dangodeck.nett.to/api/cards/1/stats?rarity=ultra_rare&level=100&evo=3&ascension=5"
const res = await fetch("https://dangodeck.nett.to/api/cards/1/stats?rarity=ultra_rare&level=100&evo=3&ascension=5");
const { data } = await res.json();
console.log(data);
const res = await fetch("https://dangodeck.nett.to/api/cards/1/stats?rarity=ultra_rare&level=100&evo=3&ascension=5");
const { data } = (await res.json()) as { data: unknown };
console.log(data);
import requests
res = requests.get("https://dangodeck.nett.to/api/cards/1/stats?rarity=ultra_rare&level=100&evo=3&ascension=5")
print(res.json()["data"])
<?php
$res = file_get_contents("https://dangodeck.nett.to/api/cards/1/stats?rarity=ultra_rare&level=100&evo=3&ascension=5");
$json = json_decode($res, true);
print_r($json["data"]);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
res, _ := http.Get("https://dangodeck.nett.to/api/cards/1/stats?rarity=ultra_rare&level=100&evo=3&ascension=5")
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
Card by ID
/api/cards/1
Returns the card matching the given numeric ID. Returns 404 if not found.
| Parameter | Type | Description |
|---|---|---|
| id | number (path) | Numeric ID of the card. |
curl -s "https://dangodeck.nett.to/api/cards/1"
const res = await fetch("https://dangodeck.nett.to/api/cards/1");
const { data } = await res.json();
console.log(data);
const res = await fetch("https://dangodeck.nett.to/api/cards/1");
const { data } = (await res.json()) as { data: unknown };
console.log(data);
import requests
res = requests.get("https://dangodeck.nett.to/api/cards/1")
print(res.json()["data"])
<?php
$res = file_get_contents("https://dangodeck.nett.to/api/cards/1");
$json = json_decode($res, true);
print_r($json["data"]);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
res, _ := http.Get("https://dangodeck.nett.to/api/cards/1")
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
Search Cards
/api/cards/search
Case-insensitive, partial, and typo-tolerant fuzzy search (Fuse.js + Levenshtein). e.g. rem, reem, rme all match "Rem".
| Parameter | Type | Description |
|---|---|---|
| q | string (required) | Search query. |
| limit | number (1-50) | Max results. Default 20. |
curl -s "https://dangodeck.nett.to/api/cards/search?q=rem"
const res = await fetch("https://dangodeck.nett.to/api/cards/search?q=rem");
const { data } = await res.json();
console.log(data);
const res = await fetch("https://dangodeck.nett.to/api/cards/search?q=rem");
const { data } = (await res.json()) as { data: unknown };
console.log(data);
import requests
res = requests.get("https://dangodeck.nett.to/api/cards/search?q=rem")
print(res.json()["data"])
<?php
$res = file_get_contents("https://dangodeck.nett.to/api/cards/search?q=rem");
$json = json_decode($res, true);
print_r($json["data"]);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
res, _ := http.Get("https://dangodeck.nett.to/api/cards/search?q=rem")
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}
List Cards
/api/cards
Returns a paginated, filterable, sortable list of cards.
| Parameter | Type | Description |
|---|---|---|
| page | number | Page number. Default 1. |
| limit | number (1-100) | Items per page. Default 20. |
| sort | string | One of id, name, anime, element, hp, atk, def, spd. Prefix "-" for descending. |
| element | string | Filter by element (Fire, Water, Dark...). |
| anime | string | Filter by anime title (contains). |
| name | string | Filter by card name (contains). |
curl -s "https://dangodeck.nett.to/api/cards?page=1&limit=20"
const res = await fetch("https://dangodeck.nett.to/api/cards?page=1&limit=20");
const { data } = await res.json();
console.log(data);
const res = await fetch("https://dangodeck.nett.to/api/cards?page=1&limit=20");
const { data } = (await res.json()) as { data: unknown };
console.log(data);
import requests
res = requests.get("https://dangodeck.nett.to/api/cards?page=1&limit=20")
print(res.json()["data"])
<?php
$res = file_get_contents("https://dangodeck.nett.to/api/cards?page=1&limit=20");
$json = json_decode($res, true);
print_r($json["data"]);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
res, _ := http.Get("https://dangodeck.nett.to/api/cards?page=1&limit=20")
defer res.Body.Close()
var out map[string]any
json.NewDecoder(res.Body).Decode(&out)
fmt.Println(out["data"])
}