Marketing

The Marketing section covers three related surfaces: pixels (so ad platforms and analytics know your storefront exists), abandoned-cart recovery (so a missed checkout gets a follow-up), and marketing campaigns (so you can fan out a one-shot send to a contact list).
This page is a kickoff — each of the three sub-surfaces has its own dashboard page; we cover the highlights here and link out to source-of-truth API references.
Pixels
Merchant pixels are the tracking IDs your storefront fires into ad platforms and analytics. Ripllo holds one row per workspace covering the common ones:
| Pixel | Where it lives | Required? |
|---|---|---|
| Meta (Facebook) pixel ID | metaPixelId |
Only if you run Meta ads |
| Meta CAPI access token | metaCapiAccessToken |
Only if you want server-side conversion API |
| GA4 measurement ID | ga4MeasurementId |
Recommended for everyone |
| Google Ads conversion ID | googleAdsConversionId |
Only if you run Google Ads |
| TikTok pixel ID | tiktokPixelId |
Only if you run TikTok ads |
Configuring pixels
Navigate to Dashboard → Pixels. The form takes each ID as a plain string. Save calls PATCH /api/v1/pixels.
The CAPI access token is the only secret in the bunch — Ripllo encrypts it at rest and never returns it through the public storefront read endpoint (only through the merchant-authenticated read).
Storefront access
Your storefront fetches the public pixel set via:
GET /api/v1/pixels/public/:accountId
This returns only public IDs (no CAPI token), is unauthenticated, and is the endpoint your Storlaunch (or other) storefront calls to inject pixel tags into the page.
Abandoned-cart recovery
When a customer adds something to their cart but doesn't check out, Ripllo can send them a reminder email (with an optional discount code attached) and recover some of those sales.
Configuring the recovery flow
Navigate to Dashboard → Abandoned cart. The settings page takes:
enabled— master switch.delayMinutes— how long the cart has to be idle before the first reminder fires.discountCodeId— optional. Pick an existing code from the dropdown; it's attached to every reminder.- Sender — the from-name/from-email the email uses.
- Subject + body templates — markdown with
{{customer.name}},{{cart.value}},{{cart.items}}interpolations.
Save calls PATCH /api/v1/abandoned-cart/config.
Recording reminders
When your storefront detects an abandoned cart and decides to send (typically after the delayMinutes window), it calls:
POST /api/v1/abandoned-cart/reminders
{
"accountId": "...",
"customerId": "cust_...",
"cartId": "cart_...", // becomes externalRef
"email": "alice@example.com",
"cartSnapshot": [...],
"valueAtSend": 250000,
"currencyAtSend": "IDR",
"discountCodeId": "disc_..."
}
Ripllo first checks the customer's BuyerEmailPreference opt-out list — suppressed addresses are silently skipped (you get created: false, reason: 'opted_out' back). Otherwise it stamps a acr_* reminder row.
Marking recovered
When the same customer completes checkout shortly after a reminder, your payment-success handler calls:
POST /api/v1/abandoned-cart/recover
{
"accountId": "...",
"customerId": "cust_...",
"checkoutSessionId": "...",
"completedAt": "..."
}
Ripllo finds the most recent unrecovered reminder for that customer and stamps recovered: true on it. This drives your recovery-rate stat on the dashboard.
Opt-out
The unsubscribe link in every reminder email points at GET /api/v1/abandoned-cart/unsubscribe?token=.... Hitting it adds the email to BuyerEmailPreference for the workspace; subsequent reminder attempts to the same address skip silently.
Marketing campaigns
A marketing campaign is a one-shot email (or SMS, or push) send to a contact list. Use it for: newsletter blasts, product launches, seasonal promotions.
Creating a campaign
Navigate to Dashboard → Compose (the working name for the campaign composer). The form covers:
- Audience — pick a contact list or audience segment.
- Channel — pick a connected email/SMS integration.
- Template — either reuse a saved template or compose inline. Templates use Mustache-style
{{contact.firstName}}interpolation. - Schedule — send now or pick a future timestamp.
Save calls POST /api/v1/marketing-campaigns — the campaign sits in draft state until you trigger send.
Sending
Click Send test first — this triggers POST /api/v1/marketing-campaigns/:id/send-test which delivers a single email to the address you specify, with the compiled template. Verify it looks right.
Click Send to fire POST /api/v1/marketing-campaigns/:id/send. The campaign flips through scheduled → sending → sent (or failed). The send is enqueued; the response returns immediately.
Templates
Reusable templates live under /marketing-campaigns/templates. Each template has a name, channel-specific subject/body, and Mustache variables. The compile endpoint (POST /marketing-campaigns/templates/compile) renders a template against sample data — useful for previewing.
Next
- Discount codes — attach a code to abandoned-cart reminders.
- Referrals — another distribution lever.
- API reference — full endpoint set including campaigns, pixels, abandoned-cart.