Release 3.6 (Tech Release 1.30)

🟒 Platform: Automated Bills for Carriers & Vendors

Carrier and vendor payouts can now be calculated automatically from actual delivery data, replacing manual off-platform calculation.

βœ… What's New:

  • Select a billing cycle and generate one bill per participating carrier in a single run
  • Net payable calculated as (Delivered Quantity Γ— Delivery Rate) βˆ’ (Missed Issues Γ— Missed Issue Rate)
  • Rates defined as plain-language pricing rules β€” no new configuration screens
  • Each bill shows cycle window, carrier, rates applied, delivered/missed quantities, deductions, and net payable
  • Included fulfillments are recorded and retrievable for audit
  • Duplicate bills prevented on reruns; fulfillments attributed to the carrier assigned at the time of delivery

🎯 Impact:

Operations teams get accurate, repeatable, auditable carrier payouts tied directly to delivery performance.


🟒 Platform: Native Support Ticketing

Core support workflows are moving into Pelcro, reducing reliance on external ticketing tools.

βœ… What's New:

  • Inbound emails to the support inbox auto-create a ticket, assigned to a configurable default agent
  • Internal notes visible to agents only, never to the client
  • Per-ticket Priority (Low / Medium / High / Urgent) for queue triage
  • Open / Pending / On-hold / Solved statuses, with auto-reopen when a client replies to a solved ticket

🎯 Impact:

Support teams can triage, collaborate, and report on SLAs directly in Pelcro.


🟒 Platform: Modernized Taxes & Analytics Reports Pages

The Taxes and Reports β†’ Customer/Subscription analytics pages have been upgraded to the current dashboard design, completing the Analytics section refresh.

βœ… What's Improved:

  • Both pages now render on the modern dashboard layout, consistent with the rest of Analytics
  • Existing functionality preserved across all report metrics

🎯 Impact:

A consistent, modern admin experience with no change to how reports or taxes work.


🟒 Open API: Structured Coupon Validation Errors

Coupon validation failures now return a stable, enumerated error code at a fixed location, replacing generic, inconsistently-placed error text.

βœ… What's New:

  • On POST /api/v1/sdk/order, POST /api/v1/sdk/subscription, and POST /api/v1/sdk/subscription/change, the error object now includes:
    • error.failure_reason_code β€” stable enum, never renamed
    • error.failure_reason_detail β€” object; always carries description, plus code-specific keys (expiry date, allowed plan IDs, redemption counts, segment names)
    • error.param β€” always coupon_code, identifying the failing input
    • error.coupon_code β€” echoes the submitted code
  • error.message text is unchanged for every case
  • GET /api/v1/sdk/campaign: coupon.valid is now computed against the campaign plan (not the stored flag); when false it returns coupon.failure_reason_code and a failure_reason_detail.description. As a public endpoint, it deliberately returns no coupon configuration.

πŸ“‹ Reason codes (precedence order β€” first failing rule wins):

#CodeHTTP
1coupon_not_found404
2coupon_type_mismatch β€” code belongs to an e-commerce coupon404
3coupon_inactive404
4coupon_expired404
5coupon_max_redemptions_reached404
6coupon_currency_mismatch404
7coupon_plan_not_eligible404
8coupon_customer_not_eligible β€” segment restriction400
9coupon_customer_redemption_limit_reached404
10coupon_incompatible_with_subscription β€” plan change blocked by a once coupon on an existing invoice404

🎯 Impact:

Integrators can map coupon errors directly to subscriber-facing messaging and support tooling, without parsing free-text.

🟒 Platform: Per-Product Active-Subscription Merge Tags for Mailchimp

Campaigns can now segment by whether a customer currently holds an active subscription to a given product, via a boolean flag synced to Mailchimp β€” powered by a new Product code field on the product form.

βœ… What's New:

  • New Product code field on the product create/edit form β€” a short code (up to 6 characters) that identifies the product in merge tags. The form suggests a code automatically (derived from the product's internal name); the code is editable and must be unique per account.
  • Mailchimp sync can now send a per-product active flag (for example ACT_DEB), valued 1 when the customer has at least one currently active subscription to that product and 0 otherwise.
  • The flag reflects the customer's aggregated status across all their subscriptions for that product β€” not a single subscription β€” and recalculates on every relevant lifecycle event (create, renew, reactivate, cancel, expire).
    • A renewal, or a cancellation scheduled for end of term, keeps the flag at 1 while any subscription stays active; it drops to 0 only once the customer has no remaining active subscription to that product.
  • "Active" counts active, trialing, and extended subscriptions.

🎯 Impact:

Marketers can build product-level segments and campaigns from a single, always-current boolean per product.



🟒 Platform: Additional Fields in Webhook Payloads

Webhook payloads are being extended with payment and membership fields that previously required a supplementary API call.

βœ… What's New:

  • Payment method status (chargeable / pending / failed) now included on subscription webhook payloads
  • Institutional member and seat status fields being surfaced for membership/seat holders
  • Additive only β€” no existing field renamed, removed, or retyped

🎯 Impact:

Downstream ESP and CRM integrations can map payment health and seat state directly, cutting extra API calls, latency, and rate-limit pressure.


🟒 Platform: Higher Limit for Paywall Exclude URL Patterns

The paywall's Exclude URL Pattern field now holds significantly more entries.

βœ… What's Improved:

  • Capacity increased to roughly 25 entries (~300 characters)

🎯 Impact:

Publishers can target paywall exclusions more precisely without hitting the previous ceiling.