Skip to content
cresvaDevelopers

A named quickstart guide

GET/api/storefront/{brandId}/quickstart/{guide}
No keyCallable anonymously. Rate limited by IP.10 requests a minute

Guides: shopify, chatgpt, custom, webhooks. An unknown name returns the available list rather than a bare 404.

Parameters

brandIdstring · pathrequiredThe storefront's brand id. There is no public endpoint that maps a domain to a brand id; ask the merchant for their storefront URL, the id is in it.
guidestring · pathrequiredOne of shopify, chatgpt, custom, webhooks.

Request

bash
BRAND_ID=cmqmr1f6j0003la04nu93f4k4
curl "https://cresva.ai/api/storefront/$BRAND_ID/quickstart/{guide}"

Response

Captured from production on 2026-09-16: 200 in 958ms. This is what the endpoint returned, not an example of what it might.

JSON
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Shopify Quickstart | Cresva</title>
<style>
  body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; background: #0f172a; color: #e2e8f0; max-width: 700px; margin: 0 auto; padding: 40px 24px; line-height: 1.7; }
  h1 { color: #f8fafc; margin-bottom: 4px; }
  .step { background: #1e293b; border-radius: 12px; padding: 20px; margin: 20px 0; border-left: 3px solid #3b82f6; }
  .step-num { color: #3b82f6; font-weight: 700; font-size: 0.875rem; }
  pre { background: #0f172a; padding: 12px; border-radius: 8px; overflow-x: auto; margin: 8px 0; }
  code { font-family: "SF Mono", Menlo, Consolas, monospace; color: #a5f3fc; font-size: 0.85rem; }
  .time { color: #94a3b8; font-size: 0.875rem; }
  a { color: #38bdf8; }
</style>
</head>
<body>
  <h1>Shopify Quickstart</h1>
  <p class="time">Estimated time: 5 minutes</p>

  <div class="step">
    <p class="step-num">STEP 1: Connect Shopify</p>
    <p>Go to <a href="/dashboard/cmqmr1f6j0003la04nu93f4k4/agent-commerce/connections">Connections</a> and click &ldquo;Connect Shopify&rdquo;. Authorize Cresva to read your product data.</p>
  </div>

  <div class="step">
    <p class="step-num">STEP 2: Build Knowledge Graph</p>
    <p>Go to <a href="/dashboard/cmqmr1f6j0003la04nu93f4k4/agent-commerce/knowledge-graph">Knowledge Graph</a> and click &ldquo;Build&rdquo;. This extracts entities from your products (2 to 5 minutes).</p>
  </div>

  <div class="step">
    <p class="step-num">STEP 3: Create API Key</p>
    <p>Go to <a href="/dashboard/cmqmr1f6j0003la04nu93f4k4/agent-commerce/storefront">Storefront</a> &rarr; API Keys &rarr; Create Key. Copy your key (shown once).</p>
  </div>

  <div class="step">
    <p class="step-num">STEP 4: Test Your First Query</p>
    <pre><code>curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://cresva.ai/api/storefront/cmqmr1f6j0003la04nu93f4k4/search?q=best+seller"</code></pre>
  </div>

  <div class="step">
    <p class="step-num">STEP 5: Share Your Storefront</p>
    <p>Your storefront URL: <code>https://cresva.ai/api/storefront/cmqmr1f6j0003la04nu93f4k4/</code></p>
    <p>AI agents can now discover and query your products.</p>
  </div>
</body>
</html>

The guide names are given in the parameter's own description: shopify, chatgpt, custom, webhooks. "shopify" was captured.

Response codes

200The guide.
object
401The key does not match any active key.
erroranyTwo shapes exist across this API and that is deliberate rather than untidy. Each route kept the error shape it already used, so an existing client's error handling keeps working. See x-cresva-error-shapes.
403The key is valid but belongs to a different brand than the one in the path. Keys are scoped to one brand and do not travel.
erroranyTwo shapes exist across this API and that is deliberate rather than untidy. Each route kept the error shape it already used, so an existing client's error handling keeps working. See x-cresva-error-shapes.
404No such brand.
erroranyTwo shapes exist across this API and that is deliberate rather than untidy. Each route kept the error shape it already used, so an existing client's error handling keeps working. See x-cresva-error-shapes.
429Over the rate limit.
erroranyTwo shapes exist across this API and that is deliberate rather than untidy. Each route kept the error shape it already used, so an existing client's error handling keeps working. See x-cresva-error-shapes.
503The rate limiter could not be reached, so the request was refused rather than served unmetered. Deliberately not a 429: the caller has done nothing wrong and the fault is ours.
erroranyTwo shapes exist across this API and that is deliberate rather than untidy. Each route kept the error shape it already used, so an existing client's error handling keeps working. See x-cresva-error-shapes.

Generated from the storefront OpenAPI document at growthagents 269d7898b, sha256 047fe4d301258100. Nothing on this page was typed by hand.