AI で Zindies アプリを作る
Zindies の公開 API (OAuth / REST) を使って、クリエイターや店舗が自分用のアプリ (主に UI) を作るための AI 向けガイドです。
原則として依存の少ない単一 HTML + JavaScript で動き、ファイルを開けばすぐ試せる成果物を作ります。
主な読み手は AI コーディングエージェントです。クリエイターや店舗が「自分専用の小さなツール」を素早く作って使うことを想定しています。
AI / クローラ向けの Markdown 版はこちら → /build-with-ai.md
接続情報
まず OpenAPI 仕様を取得し、エンドポイント・パラメータ・レスポンスはそこを唯一の正としてください。フィールド名を推測で作らないこと。
- OpenAPI 仕様 (JSON・最優先): https://api.zindies.co/v1/openapi.json
- OpenAPI 仕様 (YAML): https://api.zindies.co/v1/openapi.yaml
- API ドキュメント (Swagger UI): https://api.zindies.co/docs
- 接続情報ディスカバリ (.well-known/mcp.json): https://api.zindies.co/.well-known/mcp.json
- サービス索引 (llms.txt): https://zindies.co/llms.txt
- API ベース URL: https://api.zindies.co/v1
- MCP サーバー: https://mcp.zindies.co/
認証
トークンは 2 種類あります。用途に合わせて選んでください。
- PAT — クリエイター/店舗が自分専用ツールを作るときに最も簡単。全スコープ相当・Anchor 制約なしで、画面から発行します。 (https://zindies.co/user/api)
-
OAuth 2.0 (Authorization Code + PKCE) — 複数ユーザーに配布するアプリ向け。スコープと Anchor (対象エンティティ) でアクセスを絞れます。
(https://developer.zindies.co/applications)
scopes:
profile:read profile:write creations:read creations:write announcements:read announcements:write events:read events:write analytics:read
トークンはソースに直書きせず、リポジトリにも含めないでください。配布アプリではスコープと Anchor を絞った OAuth を使い、個人ツールでも入力欄や安全なストレージから読み込みます。
CORS (ブラウザ完結アプリ)
api.zindies.co は CORS 設定済みで、ブラウザ完結アプリから直接呼び出せます。認証はいずれも Authorization ヘッダの Bearer トークンのみ (Cookie 不要) です。
| 範囲 | 許可メソッド | Path |
|---|---|---|
| 公開データの読み取り | GET |
/v1/* |
| 私領域 (お気に入り・イベント参加など) | GET / POST / DELETE |
/v1/me/* |
| Anchor 配下のコンテンツ書き込み (作品・お知らせ・イベント) | GET / POST / PATCH / DELETE |
/v1/creators/:token/*, /v1/places/:token/* |
データモデル
暖色系 = 「個」のエンティティ (creator / creation / place)、寒色系 = 「集まり・発信」(event / announcement) という意味づけです。詳細フィールドは OpenAPI 仕様を参照してください。
| エンティティ | 役割 | 主なフィールド |
|---|---|---|
クリエイター Creator |
クリエイター (作り手)。暖色系の識別色 | token name title bio photo_url url |
作品 Creation |
作品 (ZINE)。暖色系の識別色 | token title description released_year price photo_url creators url |
店舗 Place |
店舗 (取扱店)。暖色系の識別色 | token name address latitude longitude place_type url |
イベント Event |
イベント (day / period)。寒色系の識別色 | event_type title started_at start_date place creators booths url |
Announcement Announcement |
クリエイター/作品/店舗からのお知らせ (polymorphic) | title body audience announceable_type created_at |
エンドポイント
公開 read (認証不要)
GET /v1/creators— クリエイターGET /v1/creators/:token— クリエイターGET /v1/creations— 作品GET /v1/creations/:token— 作品GET /v1/places— 店舗GET /v1/places/:token— 店舗GET /v1/events— イベントGET /v1/events/:id— イベントGET /v1/announcements— AnnouncementGET /v1/announcements/:id— AnnouncementGET /v1/search
私領域 (Bearer 必須)
GET /v1/meGET /v1/me/entitiesGET / POST / DELETE /v1/me/favoritesGET /v1/me/collectionGET / POST / DELETE /v1/me/event_participationsGET /v1/me/reservations
Anchor 配下の書き込み (scope + Anchor バインディング必須)
GET / POST / PATCH / DELETE /v1/creators/:creator_token/creations(scope: creations:write)GET / POST / PATCH / DELETE /v1/creators/:creator_token/announcements(scope: announcements:write)GET / POST / PATCH / DELETE /v1/creators/:creator_token/events(scope: events:write)GET / POST / PATCH / DELETE /v1/places/:place_token/announcements(scope: announcements:write)GET / POST / PATCH / DELETE /v1/places/:place_token/events(scope: events:write)
コンテンツの書き込み (Anchor)
コンテンツの書き込みは creator / place のトークン配下にネストします。OAuth では使用するトークンが対象のクリエイター/店舗 (Anchor) にひも付いている必要があります。対象トークンは /v1/me/entities で取得できます。
POST /v1/creators/:creator_token/creations
PATCH /v1/creators/:creator_token/creations/:id
DELETE /v1/creators/:creator_token/creations/:id
共通規約
すべての GET 共通のクエリ規約です。一覧は ETag / Last-Modified を返すので条件付き GET でキャッシュできます。
- page (1 始まり・既定 1) と per (既定 12・最大 100) でページネーション
- per は 1 ページあたりの件数 (最大 100)
- random=N (1〜100 のランダム抽出。page / per とは併用不可)
- locale=ja|en|ko|zh-TW でサーバー側翻訳 (既定 ja)
- places の近接検索 — lat / lng / radius_km
- events のフィルタ — from / to (YYYY-MM-DD) / area / kind / event_type=day|period|all
- search は q (2 文字以上必須) / type=creator|creation|place|event|all
レスポンスはすべて JSON です。エラーは { "error": "...", "message": "..." } 形式で、401 = 認証エラー、404 = not_found、400 = パラメータ不正を返します。
アプリ作成のヒント
- 読み込み中・空・エラーの 3 状態を必ず用意する。
- ページネーションまたは random 表示を実装する。
- 画像は photo_url / photos_urls を使う。
- locale パラメータで多言語表示に対応するとよい。
やってはいけないこと
- OpenAPI 仕様に無いフィールドやエンドポイントを推測で使わない。
- トークンをソースに埋め込んだり Git にコミットしたりしない。
- 公開エンドポイントに Cookie / credentials を付けない (Bearer のみ)。
- private / 下書き状態のデータを表示しようとしない (API は公開データのみ返す)。