# Yuyu-tei Scraper - Japan TCG Card Prices & Buylist (遊々亭) (`jpopendata/japan-tcg-yuyutei`) Actor

Yuyu-tei scraper for Japanese trading card prices: sell price, stock and buy (kaitori) price of each single card on yuyu-tei.jp in one row, with spread and buy rate. Pokemon, Yu-Gi-Oh!, One Piece, Duel Masters and 20 more games. Card name, series or URL. Unofficial; not affiliated with Yuyu-tei.

- **URL**: https://apify.com/jpopendata/japan-tcg-yuyutei.md
- **Developed by:** [JP Open Data](https://apify.com/jpopendata) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Yuyu-tei Scraper - Japan TCG Card Prices & Buylist (遊々亭)

**What Yuyu-tei (遊々亭, yuyu-tei.jp) sells each single card for, how many it has in stock, and what it pays to buy the same card back — joined into one row per card with the sell-buy spread and buy rate. Pokemon, Yu-Gi-Oh!, One Piece, Duel Masters, Weiss Schwarz, Union Arena and 18 more card games.**

Search by Japanese card name, by series (収録弾), or paste yuyu-tei.jp URLs — including single card pages to track a watchlist. For every search the Actor reads the shop's sell list and its buy list (and optionally its damaged-copy list) and joins them on the shop's own card key, so every row answers "sell price, stock, buy price, gap" for one card.

> **Unofficial tool. Not affiliated with or endorsed by Yuyu-tei or 株式会社スカラプレイス.** It reads publicly available pages only (no login), politely (strictly serial requests at least 2 s apart, a hard per-run request budget, no block evasion), requests **only URLs the site's robots.txt allows**, and stores **product facts only — no images, no image URLs, no card text, no personal data**. You are responsible for making sure your use of the data complies with the site's terms and applicable law.

Related Actors from the same publisher:

- **Magic: The Gathering singles (晴れる屋):** [jpopendata/japan-tcg-hareruya](https://apify.com/jpopendata/japan-tcg-hareruya) — Yuyu-tei does not sell MTG.
- **Price comps across marketplaces:** [jpopendata/japan-resale-price-comps](https://apify.com/jpopendata/japan-resale-price-comps) — sold prices on Yahoo Auctions plus flea-market and shop listings per keyword.

***

### Quick start — verified input

Copy this into the input (JSON tab) or send it via the API. It was run successfully on 2026-10-13 (30 cards, all with sell and buy price; 2 requests; about 20 seconds; default residential proxy). Running with an empty input `{}` uses exactly these values.

```json
{
  "game": "poc",
  "keywords": ["リザードンex"],
  "mode": "both",
  "maxItems": 100
}
```

#### Common input mistakes

| Wrong | Right | Why |
|---|---|---|
| `"keywords": ["Charizard"]` | `"keywords": ["リザードン"]` | The shop lists Japanese card names. English names usually find nothing; card numbers and cards with English names still work. |
| `"game": "Magic"` | — | Yuyu-tei does not sell MTG. Use [jpopendata/japan-tcg-hareruya](https://apify.com/jpopendata/japan-tcg-hareruya). |
| `"series": ["Terastal Festival ex"]` | `"series": ["sv08a"]` or `["SV8a"]` or `["テラスタルフェス"]` | The shop's code from the series page URL, the expansion code printed in its label, or a part of the Japanese series name. |
| `"startUrls": ["https://yuyu-tei.jp/buy/poc/s/ultra"]` | a search, series or card URL | Special lists (new, sale, ultra) mix layouts and are not read; sealed products (`/m/`) neither. |
| `"mode": "buylist only"` | `"mode": "buy"` | `both`, `sell` or `buy` (`買取`, `buylist`, `sell+buy` are understood too). |
| `"maxItems": 10` with a broad name | `"maxItems": 500` | A bare name matches every printing: `ピカチュウ` alone is about 350 cards. |

An invalid value stops the run immediately, before any request to the site, with a message that names the field and lists the valid values. A series value is checked against the shop's own series list (one request) before anything is searched, and an unknown one stops the run with suggestions.

#### Empty results?

A search with no matching card finishes with 0 records and `complete: true` — that is not an error (the site itself answers 「検索条件に該当する商品は見つかりませんでした」). Typical causes: an English or misspelled card name (use the Japanese name as printed, e.g. `リザードンex`), the wrong `game` for that card, or `rarities` / `inStockOnly` filters that remove everything. Nothing is charged for an empty search. The `RUN_SUMMARY` record in the key-value store shows, per search, how many cards the sell, buy and damaged pages held and how many rows were filtered out.

***

### Who is this for?

- **Resellers and arbitrage:** the buy rate (買取率) and the sell-buy spread of every card in one row; raised buy prices (買取価格アップ) are flagged with the previous price.
- **Price tracking:** paste the card pages you watch and schedule a daily run — cards of one series share the same two requests.
- **Market research:** list a whole series with prices, stock and rarity, or compare Yuyu-tei with other shops by card number and set code.

### Input

| Field | Default | Notes |
|---|---|---|
| `game` | `poc` | Section code: `poc` Pokemon, `ygo` Yu-Gi-Oh! OCG, `opc` One Piece, `dm` Duel Masters, `ws` Weiss Schwarz, `ua` Union Arena, `vg` Vanguard, `digi` Digimon, `yrd` Yu-Gi-Oh! Rush Duel, `bs` Battle Spirits, `wx` WIXOSS, `hocg` hololive, `gcg` Gundam Card Game, `sev` Shadowverse: Evolve, `wsr` Weiss Schwarz Rose, `fe` Fire Emblem Cipher, `zx` Z/X, `lo` Lycee Overture, `chaos` ChaosTCG, `pm` Precious Memories, `re` Rebirth for you, `xs` Xross Stars, `gab` Gundam Arsenal Base, `ei` Eiketsu Taisen. English or Japanese names work too. Used for `keywords` and `series`. |
| `keywords` | `["リザードンex"]` | Japanese card names, one per line. Each returns every matching card of the game (all printings and rarities). |
| `series` | empty | Series (expansions) to list completely: `sv08a`, `SV8a`, `テラスタルフェス` or the series URL. |
| `startUrls` | empty | yuyu-tei.jp search, series or card URLs (see below). |
| `mode` | `both` | `both` = sell + buy in one row (2 requests per search); `sell` = sell prices and stock; `buy` = buy prices only. |
| `includeDamaged` | `false` | Also read the damaged-copy list (傷有り) and store those copies as extra rows (`condition: "damaged"`), one more request per search. |
| `rarities` | empty | Keep only these rarities as the shop labels its sections (`SAR`, `SR`, `UR`, `QCSE`...). Applied after fetching. |
| `inStockOnly` | `false` | Keep only cards the shop can sell now. Applied after fetching. |
| `maxItems` | `100` | Records stored for the whole run, 1 to 100,000. |
| `maxApiRequests` | `0` | Request budget for the whole run; `0` = automatic (what the searches need plus a little headroom for retries). |
| `proxyConfiguration` | Apify RESIDENTIAL, country JP | yuyu-tei.jp refuses Apify datacenter IPs (HTTP 403), so the default uses Apify's residential proxy in Japan. One sticky session (one IP) is kept for the whole run; only if the very first request is refused is it retried once on a fresh session. Never rotation. |

Each search is one request per side — the site shows every match on a single page, there is no paging. Up to 200 keywords, series and URLs per run.

#### Search by series

```json
{
  "game": "poc",
  "series": ["SV8a", "m06a"],
  "maxItems": 1000
}
```

The values are resolved against the shop's own series list for the game, read once per run from `https://yuyu-tei.jp/top/<game>`; the log shows what each value resolved to (`SV8a -> sv08a ([SV8a] ハイクラスパック テラスタルフェスex)`).

#### Paste URLs and track single cards

```json
{
  "startUrls": [
    "https://yuyu-tei.jp/sell/poc/s/search?search_word=%E3%83%AA%E3%82%B6%E3%83%BC%E3%83%89%E3%83%B3",
    "https://yuyu-tei.jp/buy/ygo/s/qccu",
    "https://yuyu-tei.jp/sell/poc/card/m06a/10136",
    "https://yuyu-tei.jp/sell/poc/card/m06a/10137"
  ]
}
```

- **Search URLs** (`/sell/<game>/s/search?...`, also the mobile form and the damaged-copy search): the keyword (`search_word`) and series (`vers[]`) are kept; other filters in the URL (`rare`, `type`, `sell_ok_only`, sort) are not used and are listed in the log — use `rarities` and `inStockOnly` instead. `kizu=1` or a damaged-copy search URL turns on the damaged list for that search.
- **Series pages** (`/sell/<game>/s/<code>`) list the whole series.
- **Card pages** (`/sell/<game>/card/<series>/<id>`) return just that card. Card URLs of the same series are answered from one sell and one buy request; each row's `query` is the URL you pasted. A `/damage` card URL adds the damaged-copy row.
- Whether a URL says `/sell/` or `/buy/` does not matter: `mode` decides which prices are read. The game comes from the URL, so one run can mix games.

#### Damaged copies (傷有り)

With `"includeDamaged": true`, the shop's damaged-copy list for each search is read too. Those copies become separate rows with `condition: "damaged"`, their own sell price and stock, and empty buy fields (the shop's buy price is not a price for damaged copies). The regular rows are `condition: "undamaged"`.

### Sample output (one dataset item)

```json
{
  "game": "poc",
  "gameName": "ポケモンカードゲーム",
  "gameNameEn": "Pokemon Card Game",
  "cardId": "poc/sv08a/10481",
  "seriesCode": "sv08a",
  "setCode": "SV8a",
  "seriesName": "ハイクラスパック テラスタルフェスex",
  "cardNumber": "236/187",
  "cardName": "ピカチュウex",
  "rarity": "UR",
  "condition": "undamaged",
  "recordType": "sell+buy",
  "sellPriceJpy": 9980,
  "sellRegularPriceJpy": null,
  "onSale": false,
  "stock": 3,
  "stockText": "3 点",
  "inStock": true,
  "buyPriceJpy": 6000,
  "buyPreviousPriceJpy": 3000,
  "buyPriceUp": true,
  "spreadJpy": 3980,
  "spreadPct": 39.9,
  "buyRatePct": 60.1,
  "sellUrl": "https://yuyu-tei.jp/sell/poc/card/sv08a/10481",
  "buyUrl": "https://yuyu-tei.jp/buy/poc/card/sv08a/10481",
  "query": "ピカチュウ",
  "queryType": "keyword",
  "source": "遊々亭 Yuyu-tei (yuyu-tei.jp) single-card sell and buy lists",
  "sourceUrl": "https://yuyu-tei.jp/",
  "license": "Publicly available data — unofficial tool; users are responsible for compliance with the source site's terms",
  "retrievedAt": "2026-10-13T04:43:33.000Z"
}
```

| Field | Meaning |
|---|---|
| `cardId` | The shop's unique card key `<game>/<series code>/<card id>` — identical on the sell, buy and damaged lists. |
| `seriesCode` / `setCode` / `seriesName` | The shop's series code (as in its URLs), the expansion code printed in the series label (`null` when the label has none) and the series name. |
| `cardNumber` | The card number as printed (`236/187`, `QCCU-JP001`); `null` when the shop shows none. Together with `setCode` it lets you match the card at other shops. |
| `rarity` | The rarity section the shop lists the card under (`null` when it shows "-"). |
| `condition` | `undamaged` (傷無し) or `damaged` (傷有り) sell listing; `null` on buy-only rows. |
| `recordType` | `sell+buy` (both prices), `sell` (the shop is not buying it, or `mode: "sell"`), `buy` (buy price only). |
| `sellPriceJpy` / `sellRegularPriceJpy` / `onSale` | The current sell price; while the card is on sale (特価) also the struck-through regular price. |
| `stock` / `stockText` / `inStock` | `stockText` exactly as shown: `3 点` (a count), `◯` (in stock, no count shown) or `×` (sold out). `stock` is the count, `0` for sold out, `null` for `◯`. Sold-out cards keep their listed price. |
| `buyPriceJpy` / `buyPreviousPriceJpy` / `buyPriceUp` | The buy (kaitori) price; when the shop has raised it, the previous price and `buyPriceUp: true`. |
| `spreadJpy` / `spreadPct` / `buyRatePct` | Undamaged sell price minus buy price, the same as a % of the sell price, and the buy price as a % of the sell price (買取率). Filled on `sell+buy` rows. |
| `sellUrl` / `buyUrl` | The public card pages (only written to the output, never fetched). |
| `query` / `queryType` | The keyword, series value or pasted URL that produced the row. |

Rows come in the shop's own order (rarity sections), then buy-only cards, then damaged copies. A card found by two searches of the same run is stored once.

### Honest limits

- **Japanese names.** The shop's search matches Japanese card names; English names mostly return nothing.
- **List-page facts only.** The Actor reads the search result lists and never opens card pages. There are no card images, image URLs or card texts by design.
- **Buy prices as listed.** `buyPriceJpy` is the shop's listed buy price; what it actually pays can depend on the condition of the copy under the shop's buy rules, which this Actor does not read.
- **Stock counts.** When the shop shows `◯` instead of a number, the count is unknown (`stock: null`, `inStock: true`).
- **Not read:** special lists (new arrivals, sale, raised-buy-price lists), sealed products, accessories (サプライ).
- **Prices change.** Every row is a snapshot at `retrievedAt`.
- **Residential proxy.** The site refuses Apify datacenter IPs, so runs go through Apify's residential proxy in Japan by default. A residential IP can occasionally be refused too; the first request is then retried once on a fresh session, and if that is refused as well the run fails without storing (or charging) anything — run it again a little later.
- **The site can change or refuse requests.** If it refuses a request after some records were stored, the run keeps them and ends successfully with `complete: false` and a `stopReason` in `RUN_SUMMARY`. A search is stored only when all of its pages were read, so a row never lacks a buy price because the buy page failed. If the very first request is refused, the run fails visibly instead of retrying aggressively.

### robots.txt and terms

- yuyu-tei.jp/robots.txt (checked 2026-10-13) contains only crawl-delay lines for four named crawlers and no rule for other agents, so every page this Actor requests is allowed. The Actor still checks each URL against a copy of that file before requesting it, and keeps at least 2 s between requests.
- The site's terms (利用規約, /info/rule) do not prohibit automated access by name. Their copyright clause reserves the site's images, texts and content, so this Actor stores only factual data points (names, numbers, prices, stock) and links, never images or texts.
- Only public pages are read; nothing behind a login, no cart or member pages. The Actor never places orders.

### Data protection (GDPR)

The output contains product facts only. The pages read carry no personal data and none is collected or stored, so GDPR obligations concerning personal data do not arise from this data. If you combine it with personal data elsewhere, that processing is your responsibility.

### Pricing

Pay per result: you are charged for each record stored in the dataset. Empty searches cost nothing. A run stops by itself when it reaches the maximum charge you set for the run.

# Actor input Schema

## `game` (type: `string`):

Card game section of the shop, used for keywords and series (pasted URLs carry their own). Codes: poc (Pokemon), ygo (Yu-Gi-Oh! OCG), opc (One Piece), dm (Duel Masters), ws (Weiss Schwarz), ua (Union Arena), vg (Vanguard), digi (Digimon), yrd (Yu-Gi-Oh! Rush Duel), bs (Battle Spirits), wx (WIXOSS), hocg (hololive), gcg (Gundam Card Game), sev (Shadowverse: Evolve), wsr (Weiss Schwarz Rose), fe (Fire Emblem Cipher), zx (Z/X), lo (Lycee Overture), chaos (ChaosTCG), pm (Precious Memories), re (Rebirth for you), xs (Xross Stars), gab (Gundam Arsenal Base), ei (Eiketsu Taisen). English or Japanese names work too ("pokemon", "遊戯王", "one piece"). Magic: The Gathering is not sold by Yuyu-tei.

## `keywords` (type: `array`):

Card names to search, one per line, in JAPANESE as the shop lists them, e.g. "リザードンex", "ピカチュウ", "青眼の白龍", "ルフィ". English names usually find nothing ("Charizard" 0 hits, "リザードン" many). Each keyword returns every matching card of the game (all printings and rarities) in one request per side. If keywords, series and startUrls are all empty, the Quick start keyword is used.

## `series` (type: `array`):

Optional. List every card of a series (expansion), one per line: the shop's series code from the series page URL ("sv08a" in https://yuyu-tei.jp/sell/poc/s/sv08a), the expansion code printed in its label ("SV8a"), a part of the series name ("テラスタルフェス") or the series URL. Resolved against the shop's own series list for the chosen game (one extra request); an unknown value stops the run with suggestions.

## `startUrls` (type: `array`):

Optional. Paste yuyu-tei.jp URLs, one per line: a search result (https://yuyu-tei.jp/sell/poc/s/search?search_word=...), a series page (https://yuyu-tei.jp/buy/ygo/s/qccu) or a card page (https://yuyu-tei.jp/sell/poc/card/sv08a/10481 — tracks just that card; cards of one series share requests). /sell/ or /buy/ in the URL does not matter: "mode" decides which prices are read. Special lists (new, sale, ultra) and sealed products are not supported.

## `mode` (type: `string`):

both (default) = sell price + buy price joined in one row per card, with spread and buy rate (2 requests per search); sell = sell prices and stock only; buy = buy (kaitori) prices only (1 request per search each).

## `includeDamaged` (type: `boolean`):

Also read the shop's damaged-copy listing (傷有り / ダメージ品) for each search and store those copies as extra rows with condition = damaged (one more request per search). Sell side only.

## `rarities` (type: `array`):

Optional. Keep only these rarities, as the shop labels its sections, e.g. "SAR", "SR", "UR", "AR" (Pokemon) or "QCSE", "UR" (Yu-Gi-Oh!). Case-insensitive. Applied after fetching. Empty = all rarities.

## `inStockOnly` (type: `boolean`):

Keep only cards the shop can sell now (stock shown as a number above 0 or ◯). Applied after fetching; buy-only rows are dropped. Ignored with mode = buy.

## `maxItems` (type: `integer`):

Maximum records stored for the whole run (1..100000; values outside are clamped). A broad card name such as "ピカチュウ" matches about 350 cards. Each stored record is charged.

## `maxApiRequests` (type: `integer`):

Hard budget of requests to yuyu-tei.jp for the whole run (0..2000). 0 (default) = automatic: exactly what the searches need (1 per side per search, plus 1 for a series list) plus a little headroom for retries. Requests are strictly serial, at least 2 s apart.

## `proxyConfiguration` (type: `object`):

Apify proxy settings. Default: Apify RESIDENTIAL proxies, country JP — yuyu-tei.jp refuses Apify datacenter IPs (HTTP 403, verified 2026-10-13; the same requests from a home connection are answered). One sticky session (one IP) is kept for the whole run, never rotation; only if the very first request is refused is it retried once on a fresh session.

## Actor input object example

```json
{
  "game": "poc",
  "keywords": [
    "リザードンex"
  ],
  "series": [],
  "startUrls": [],
  "mode": "both",
  "includeDamaged": false,
  "rarities": [],
  "inStockOnly": false,
  "maxItems": 100,
  "maxApiRequests": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}
```

# Actor output Schema

## `records` (type: `string`):

One record per card and condition: Yuyu-tei sell price, stock, buy price, spread and buy rate, with source attribution (source, sourceUrl, license, retrievedAt) on every item.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "game": "poc",
    "keywords": [
        "リザードンex"
    ],
    "series": [],
    "startUrls": [],
    "mode": "both",
    "includeDamaged": false,
    "rarities": [],
    "inStockOnly": false,
    "maxItems": 100,
    "maxApiRequests": 0,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "JP"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpopendata/japan-tcg-yuyutei").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "game": "poc",
    "keywords": ["リザードンex"],
    "series": [],
    "startUrls": [],
    "mode": "both",
    "includeDamaged": False,
    "rarities": [],
    "inStockOnly": False,
    "maxItems": 100,
    "maxApiRequests": 0,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "JP",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("jpopendata/japan-tcg-yuyutei").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "game": "poc",
  "keywords": [
    "リザードンex"
  ],
  "series": [],
  "startUrls": [],
  "mode": "both",
  "includeDamaged": false,
  "rarities": [],
  "inStockOnly": false,
  "maxItems": 100,
  "maxApiRequests": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "JP"
  }
}' |
apify call jpopendata/japan-tcg-yuyutei --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpopendata/japan-tcg-yuyutei"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gx2OZSDSJIYN2FkDz/builds/UnFg9aWuoLfStl9Zq/openapi.json
