Developer documentation

Outbound API

Push messages out from your plugin — emails, SMS, WhatsApp, in-dashboard banners, decision-feed cards.

Channels

The outbound API is one endpoint with a channel selector. Each channel uses the merchant's connected sender (their SMTP, Twilio, Gupshup, etc.) so messages are billed to them, not to you.

ChannelUsed for
emailTransactional and lifecycle email to merchant customers
smsShort message to a phone number
whatsappTemplate-driven messages on WhatsApp Business
pushWeb push and storefront app push
bannerBanner inside the merchant dashboard
feedCard on the merchant decision feed

Sending an email

curl -X POST https://api.aeonzap.com/v1/notifications \
  -H "Authorization: Bearer $AEONZAP_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "email",
    "to": "customer:cust_19f2",
    "template": "review-request",
    "data": { "order_id": "ord_8821", "rating_url": "https://acme.aeonzap.shop/r/8821" }
  }'

Dashboard banners

Banners appear at the top of the merchant dashboard. Use them sparingly — for things merchants need to act on, not for upsell. A banner has a tone (info | warn | success), a body, and up to two CTAs.

await ctx.notify.banner({
  tone: 'warn',
  title: 'Pending review responses',
  body: '12 reviews need a response from you to maintain your store rating.',
  ctas: [
    { label: 'Open reviews', href: '/plugins/com.acme.reviews/queue' },
    { label: 'Dismiss', dismiss: true },
  ],
  ttl_hours: 72,
});

Decision-feed cards

The decision feed is the merchant's home page — a chronological list of cards that suggest actions. Cards from your plugin are clearly attributed and rate-limited to one card per merchant per 24 hours by default.

await ctx.notify.feed({
  kind: 'suggestion',
  title: 'Bundle pricing could lift AOV',
  body: 'Customers who bought A also bought B 41% of the time. Try a bundle for ' + bundleName + '.',
  primary: { label: 'Create bundle', href: '/plugins/com.acme.bundles/new?seed=' + seedId },
});

Templates

Plugins ship templates inside the package under templates/. The CLI uploads them on publish. Each template has a key, a per-channel body, and a list of required data variables. Merchants can override the wording but not the variables.

Quotas

Default merchant quotas: 200 emails/day, 50 SMS/day, 20 WhatsApp/day, unlimited dashboard banners and feed cards. Exceeding the quota returns 429; messages are not queued.