Skip to content

API

Workflow data is served as static JSON. No authentication, and directly fetchable cross-origin (access-control-allow-origin: *).

Endpoints

PurposeURL
Endpoint indexhttps://showcase.bridgic.ai/api/index.json
Workflows (Chinese)https://showcase.bridgic.ai/api/workflows.zh.json
Workflows (English)https://showcase.bridgic.ai/api/workflows.en.json

Clients hardcode only index.json and discover the rest from its response:

json
{
  "endpoints": {
    "workflows": {
      "zh": "api/workflows.zh.json",
      "en": "api/workflows.en.json"
    }
  }
}

Fields

Fields map one-to-one onto the desktop app's MarketCard, so no transformation is needed.

FieldTypeDescription
idstringStable identifier, identical across languages
namestringCard title
descstringCard description
domainstringCategory tag
status'verified' | 'new'verified shows the verified badge
pathstringRepo-relative path to this site's detail page
goalstringWhat this workflow is for
requirementstringWhat has to be in place before running it
outputstringWhat you get when it finishes

The last three are rendered directly by the desktop app's preview dialog, so a missing one leaves a blank row there. check:api in the repo catches that.

Full response

json
{
  "lang": "en",
  "workflows": [
    {
      "id": "xiaohongshu",
      "name": "Xiaohongshu content scraper",
      "desc": "Automatically collect posts and engagement data for selected Xiaohongshu topics",
      "domain": "Browser automation",
      "status": "verified",
      "path": "en/workflows/xiaohongshu",
      "goal": "Collect posts and engagement data for chosen topics, for research and attribution",
      "requirement": "A saved Xiaohongshu session; one or more topic keywords",
      "output": "A structured table with body text, image count and like/save/comment counts"
    }
  ]
}

Contract

  • path is repo-relative, not an absolute URL. Clients join base + path, so switching domain or CDN means changing one client constant
  • Array order is meaningful. It drives card order and matches the desktop app — do not re-sort alphabetically
  • Both languages must share the same id set in the same order; only the copy differs. A check script in the repo enforces this
  • Adding a field is safe — clients should ignore unknown fields. Renaming or removing one is breaking

Caching

LayerBehaviour
ClientUse cache: 'no-cache' — revalidate every read, 304 when unchanged
Primary CDNmax-age=600, not configurable. Edits take up to 10 minutes to appear
MirrorPurged automatically after every publish

Query-string busting such as ?v=2 does not work — the query is stripped from the cache key.

Fetching

ts
const index = await fetch('https://showcase.bridgic.ai/api/index.json', {
  cache: 'no-cache',
}).then((r) => {
  // A missing path returns an HTML 404, so check res.ok before parsing
  if (!r.ok) throw new Error(`HTTP ${r.status}`)
  return r.json()
})

const lang = navigator.language.startsWith('zh') ? 'zh' : 'en'
const data = await fetch(`https://showcase.bridgic.ai/${index.endpoints.workflows[lang]}`, {
  cache: 'no-cache',
}).then((r) => r.json())

console.log(data.workflows)

Last updated: