Base URL
Production app host (override with RECENTLY_API_URL in brand deploys):
https://app.recently.cloud
All routes below are under /api/public. Responses are JSON. CORS is enabled for browser clients. These endpoints never expose unpublished or private merchant data.
GET /api/public/stores
Featured stores that opted into the public directory.
{
"stores": [
{
"handle": "acme",
"name": "Acme Goods",
"url": "https://acme.example",
"blurb": "Outdoor gear with live proof.",
"featured": true,
"sampleEventId": "evt_01H…"
}
]
}GET /api/public/stores/:handle
Public profile for one store, plus a page of recent public events. Optional query: ?cursor= for pagination.
{
"store": {
"handle": "acme",
"name": "Acme Goods",
"url": "https://acme.example",
"blurb": "Outdoor gear with live proof.",
"usesRecently": true
},
"events": [
{
"publicId": "evt_01H…",
"message": "Jamie in Austin bought Trail Pack",
"imageUrl": "https://…",
"productTitle": "Trail Pack",
"eventType": "order",
"occurredAt": "2026-08-31T14:22:00.000Z"
}
],
"pagination": {
"hasMore": false,
"nextCursor": null
}
}GET /api/public/events/:id
Single verified event — the payload behind a Verified badge link.
{
"publicId": "evt_01H…",
"replay": {
"message": "Jamie in Austin bought Trail Pack",
"imageUrl": "https://…",
"productTitle": "Trail Pack"
},
"meta": {
"eventType": "order",
"eventTypeLabel": "Order created",
"date": "31 Aug 2026",
"time": "14:22",
"timezone": "UTC",
"source": "Shopify",
"store": {
"handle": "acme",
"name": "Acme Goods",
"url": "https://acme.example"
}
},
"verifiedLabel": "Verified purchase"
}Errors
404— unknown handle or event id, or profile / proof not enabled204—OPTIONSpreflight succeeds with CORS headers
This API is intentionally narrow: public marketing and verification surfaces only. Admin GraphQL and merchant-private data stay inside the Shopify-authenticated app.
