Marketing

Plugipay family portal: 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 scheduledsendingsent (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.