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.
| Channel | Used for |
|---|---|
email | Transactional and lifecycle email to merchant customers |
sms | Short message to a phone number |
whatsapp | Template-driven messages on WhatsApp Business |
push | Web push and storefront app push |
banner | Banner inside the merchant dashboard |
feed | Card 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.