ReelPlusReelPlus Help
API ReferenceStorefront API

Storefront API

App Proxy endpoints for widget rendering, data fetching, and analytics tracking on your live store.


For storefront use only. These endpoints are authenticated via Shopify's HMAC verification (no API key needed). They are called automatically by the ReelPlus widget loader. For programmatic data access, use the Analytics API.

GET
/apps/reelplus_sub/contextual-widgets

Query Parameters

location*string

Current page type on the storefront.

Value in"home" | "product" | "collection" | "page" | "other"
product_id?string

Shopify Product GID (for product pages).

product_handle?string

Product handle (alternative to product_id).

collection_id?string

Shopify Collection GID.

widget_id?string

Load a specific widget by ID (snippet mode).

widget_ids?string

Comma-separated widget IDs for batch loading.

v?string

Version string for cache validation.

Response Body

application/json

curl -X GET "https://production.reelplus.app/apps/reelplus_sub/contextual-widgets?location=home"
{
  "location": "string",
  "context": {
    "productId": "string",
    "collectionId": "string",
    "pageHandle": "string"
  },
  "version": "string",
  "timestamp": "2019-08-24T14:15:22Z",
  "removeBranding": true,
  "widgets": [
    {
      "id": "string",
      "type": "carousel",
      "title": "string",
      "status": "string",
      "priority": 0,
      "viewStyle": "string",
      "clickBehavior": "string",
      "modalLayout": "string",
      "videos": [
        {
          "id": "string",
          "title": "string",
          "thumbnail": "string",
          "videoUrl": "string",
          "miniVersionUrl": "string",
          "duration": 0,
          "order": 0,
          "viewCount": "string",
          "products": [
            {
              "id": "string",
              "title": "string",
              "handle": "string",
              "image": "string",
              "url": "string"
            }
          ],
          "hasProducts": true
        }
      ]
    }
  ]
}
GET
/apps/reelplus_sub/widget-by-id

Query Parameters

id*string

Widget ID.

location?string

Page type for display rule check.

Response Body

application/json

curl -X GET "https://production.reelplus.app/apps/reelplus_sub/widget-by-id?id=string"
{
  "success": true,
  "widget": {
    "id": "string",
    "type": "carousel",
    "title": "string",
    "status": "string",
    "priority": 0,
    "viewStyle": "string",
    "clickBehavior": "string",
    "modalLayout": "string",
    "videos": [
      {
        "id": "string",
        "title": "string",
        "thumbnail": "string",
        "videoUrl": "string",
        "miniVersionUrl": "string",
        "duration": 0,
        "order": 0,
        "viewCount": "string",
        "products": [
          {
            "id": "string",
            "title": "string",
            "handle": "string",
            "image": "string",
            "url": "string"
          }
        ],
        "hasProducts": true
      }
    ]
  }
}
Empty
Empty
Empty
GET
/apps/reelplus_sub/widgets-list

Query Parameters

type*string

Widget type to filter.

Value in"carousel" | "story" | "productpage"

Response Body

application/json

curl -X GET "https://production.reelplus.app/apps/reelplus_sub/widgets-list?type=carousel"
{
  "success": true,
  "widgets": [
    {
      "id": "string",
      "title": "string",
      "type": "string",
      "status": "string",
      "sourceType": "string",
      "videoCount": 0,
      "createdAt": "2019-08-24T14:15:22Z"
    }
  ],
  "count": 0
}
POST
/apps/reelplus_sub/analytics

Request Body

application/json

eventType*string
Value in"impression" | "view" | "click" | "add_to_cart" | "checkout_completed"
sessionId?string
customerId?string
videoId?string
widgetId?string
attributionType?string
Value in"direct" | "influenced"
timestamp?string
Formatdate-time

Response Body

application/json

curl -X POST "https://production.reelplus.app/apps/reelplus_sub/analytics" \  -H "Content-Type: application/json" \  -d '{    "eventType": "impression"  }'
{
  "success": true,
  "message": "string",
  "timestamp": "2019-08-24T14:15:22Z"
}