DSTORE PUBLISHER API ==================== Version 1. Documentation optimized for LLM agents and humans. Short discovery file: https://store.skynes.net/llms.txt This document: https://store.skynes.net/api.txt UI aliases: https://store.skynes.net/agent · https://store.skynes.net/agent.txt MENTAL MODEL ------------ dStore is a decentralised app catalog (PWA / websites / store links). Each catalog entry has a numeric sid (store id). Adding a URL creates or updates a card; the server audits metadata, icon, screenshots and AI fields asynchronously. Authors and agents can: 1. SEARCH the catalog (semantic + text, rate-limited). 2. READ similar apps when already computed (stored-only). 3. SUBMIT a URL into the catalog (public, rate-limited). 4. READ a card / collection as JSON. 5. Use the MCP server (stdio) with the same capabilities. Typical agent flow: search_catalog / GET /api/search → get_app or get_similar or GET ?add= → note sid → poll /{sid}.json BASE URLS --------- Storefront (this host): https://store.skynes.net API / add endpoint: https://db.dstore.one CDN icons/screens: https://cdn.dstore.one Discovery (llms.txt): https://store.skynes.net/llms.txt This guide (api.txt): https://store.skynes.net/api.txt UI aliases: https://store.skynes.net/agent , https://store.skynes.net/agent.txt No API token is required for public add/read/search (anon IP limits). Optional Bearer dst_… / X-DStore-Key raises limits (plans free|pro). All JSON responses use UTF-8. 0. MCP SERVER (recommended for Cursor / Claude) ---------------------------------------------- Package: dstore-mcp (repo folder mcp/). Tools: search_catalog, get_app, get_similar, add_url, get_list, quota_status. Cursor mcp.json (local): { "mcpServers": { "dstore": { "command": "node", "args": ["/mcp/index.js"], "env": { "DSTORE_API_BASE": "https://db.dstore.one", "DSTORE_API_KEY": "dst_..." } } } } Env: DSTORE_API_BASE (default https://db.dstore.one), DSTORE_API_KEY (optional). 1. SUBMIT A URL --------------- Preferred (explicit query): GET https://db.dstore.one/?add=https%3A%2F%2Fexample.com GET https://store.skynes.net/?add=https%3A%2F%2Fexample.com Also accepted: GET https://db.dstore.one/https://example.com GET https://store.skynes.net/https://example.com Encode the URL. Prefer https://. www. is normalized away. Play Store / App Store / Telegram / IMDb / Kinopoisk links are supported. curl example: curl -sS "https://db.dstore.one/?add=https%3A%2F%2Fexample.com" Success JSON (examples): {"status":"new","sid":12345,"id":"..."} — created, audit queued {"status":"exist","sid":12345,"id":"..."} — already in catalog {"status":"update","sid":12345,"id":"..."} — found, refresh scheduled Errors: {"status":0,"error":"invalid_url","reason":"..."} HTTP 429 {"status":0,"error":"rate_limit","retry_after":N,"limit":20, "plan":"anon","upgrade_hint":"https://store.skynes.net/agent#quota"} Anon default: ~20 adds per IP per hour. free/pro keys raise this. After status=new the card may be incomplete for 30–120+ seconds while audit / icon / AI enrichment finish. Poll JSON (below) instead of re-adding. 2. READ A CARD (HTML) --------------------- https://store.skynes.net/{sid} Example: https://store.skynes.net/12345 Human UI. Good for a final visual check. 3. READ A CARD (JSON) — preferred for agents --------------------------------------------- GET https://store.skynes.net/{sid}.json GET https://db.dstore.one/{sid}.json curl example: curl -sS "https://store.skynes.net/12345.json" Pretty-printed JSON. Useful fields typically include: id / sid, title, subtitle, description, url, icon, screenshots / screenCdn, tags, ranks, store links, similar apps. Not found: HTTP 404 {"error":"not_found","sid":...} Rate limited: HTTP 429 {"error":"rate_limit","retry_after":N,"upgrade_hint":"..."} Polling tip after add: every 5–10s for up to ~3 minutes until title and icon are non-empty. Do not call ?add= again for the same URL while waiting. 4. PUBLIC COLLECTIONS (LISTS) ----------------------------- HTML page: https://store.skynes.net/list/{listRef} JSON: https://store.skynes.net/list/{listRef}.json listRef is the public collection id/slug from a share URL. JSON includes collection meta and apps with direct site links. 5. SEARCH CATALOG (REST) ----------------------- GET https://db.dstore.one/api/search?q=crypto%20wallet GET https://db.dstore.one/search.json?q=crypto%20wallet GET https://store.skynes.net/api/search?q=uniswap&limit=10&type=app Query params: q (or query) — search text (min 2 chars), or omit if tld= is set limit — optional, 1–30 (default 20) type — optional app|link tg=1 — Telegram-only (same as q=tg:...) tld=app — domain TLD filter (same as q=*.app when alone) Prefixes / modes (same as UI Search): plain text — semantic search when embeddings available, else regex tg:name — Telegram-only *.app — domain TLD filter curl example: curl -sS "https://db.dstore.one/api/search?q=wallet&limit=10" Success JSON includes apps/links with page_url + json_url, plan, quota_remaining. 6. SIMILAR APPS (stored-only) ---------------------------- GET https://db.dstore.one/api/similar?sid=12345&limit=12 GET https://db.dstore.one/similar.json?sid=12345 Returns similar cards only if already computed in DB (no forced embedding). Empty similar[] means not ready yet — use card page / backfill, or read similar from GET /{sid}.json when present. 7. QUOTAS AND API KEYS ---------------------- Plans: anon (no key) — ~12 search/min, ~8 read/min, ~20 add/hour, ~12 similar/min free key — ~30 / 40 / 40 / 30 pro key — ~120 / 120 / 200 / 120 (manual issue; paid upgrade later) Auth header (optional): Authorization: Bearer dst_... or X-DStore-Key: dst_... Quota status: GET https://db.dstore.one/api/agent/quota On 429 responses include upgrade_hint: https://store.skynes.net/agent#quota Respect Retry-After. Do not tight-loop search. 8. QUICK LINKS -------------- GitHub: https://store.skynes.net/git Dev chat: https://store.skynes.net/chat llms.txt: https://store.skynes.net/llms.txt api.txt: https://store.skynes.net/api.txt Agent UI: https://store.skynes.net/agent Search: https://db.dstore.one/api/search?q= Similar: https://db.dstore.one/api/similar?sid= Quota: https://db.dstore.one/api/agent/quota RULES ----- - Submit only real product / app / useful web URLs you control or represent. - Do not scrape private data; catalog cards are public by design. - Prefer one canonical URL per product (https apex or official store URL). - If exist/update — reuse sid; do not create duplicates via URL variants. - Cap search traffic; prefer card JSON after you have a sid. Questions: use Dev Chat (https://store.skynes.net/chat) or GitHub issues via /git.