reachid · internal

Checkout + analytics hub

One place to sell (Stripe) and to measure whether QR codes & links actually work — for every reachid client site. (Personal sites rivera / wolverine / christopher are excluded.)

1 · Track a site + its QR codes

Drop this once on any client site (before </body>). It records a site open and wires Buy buttons:

<script src="https://checkout.reachid.io/track.js" data-brand="your-slug"></script>

For postcards / yard signs / ads, point the QR or link at the tracked redirect so each scan is counted and attributed to a campaign:

https://checkout.reachid.io/r?s=your-slug&c=postcard&to=https%3A%2F%2Fyour-slug.reachid.io%2F

Different c= per channel (postcard, facebook, yard-sign) shows which one drives scans → buys.

2 · Add a "Buy" button

A. Register the product (once) via the admin API:

curl -X POST "https://checkout.reachid.io/api/admin/products?token=$ADMIN_TOKEN" \
  -H "content-type: application/json" \
  -d '{"brand":"your-slug","sku":"deposit","name":"Appointment deposit",
       "mode":"payment","amount_cents":1000,
       "success_url":"https://your-slug.reachid.io/thanks",
       "cancel_url":"https://your-slug.reachid.io/"}'

B. Put a button on the site (with track.js loaded):

<button data-buy="deposit">Reserve — $10</button>

…or a plain link, no JS needed:

<a href="https://checkout.reachid.io/buy?brand=your-slug&sku=deposit">Buy now</a>

Subscriptions: set "mode":"subscription","interval":"month". Use a pre-made Stripe Price with "stripe_price":"price_…" instead of amount_cents if you prefer.

3 · See what's working

Scans, opens, checkouts, revenue, and scan → buy conversion per site & campaign:

Open analytics dashboard →

Endpoints

GET /r?s=&c=&to=Tracked QR/link redirect (logs scan)
GET /px.gif?s=&c=Open pixel (logs open)
GET /buy?brand=&sku=Buy button → Stripe Checkout
POST /api/checkoutJSON: {brand,sku} → {url}
POST /api/webhookStripe → records purchase
GET /confirmSuccess landing (records if no webhook)
GET/POST /api/admin/productsProduct registry (token)
GET /api/admin/analyticsDashboard summary (token)

Status: checking…