Skip to main content

List Subscriptions

Returns a paginated list of subscriptions for the brand. Supports filters for status, date ranges, search, merchant, and product.
brand
string
required
The brand/project ID
page
number
Page number for pagination
per_page
number
Results per page
status
string
Filter by subscription status: active, trial, paused, past_due, canceled (use all or omit for no status filter)
q
string
Search by customer name, email, public order ID, or transaction ID
start
string
Start of date range (ISO 8601 or date string accepted by the API)
end
string
End of date range (ISO 8601 or date string accepted by the API)
filter.merchant_id
number
Filter by merchant ID
filter.product_code
string
Filter by product code
filter.email
string
Filter by customer email
Request
GET /api/brands/{brand}/subscriptions
cURL
curl "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions?status=active&page=1" \
  -H "EF-Access-Key: your_api_key_here"

Show Subscription

Returns full details of a single subscription (identified by transaction ID), including enriched subscription flags from the conversion record.
brand
string
required
The brand/project ID
id
string
required
Subscription transaction ID (not the public order code)
Request
GET /api/brands/{brand}/subscriptions/{id}
cURL
curl "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/{transaction_id}" \
  -H "EF-Access-Key: your_api_key_here"

Update Subscription Flag

Updates a keyed flag on the subscription conversion (for example subscription_status, subscription_next_charge_at). In practice, prefer the dedicated POST endpoints below for lifecycle actions; they perform validation and side effects. Use a generic flag update only when you need to align data with an external system and your deployment exposes this route.
brand
string
required
The brand/project ID
id
string
required
Subscription transaction ID
key
string
required
Flag key (e.g. subscription_status, subscription_next_charge_at)
value
string
required
New value for the flag
Request
PATCH /api/brands/{brand}/subscriptions/{id}/flag
cURL
curl -X PATCH "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/{transaction_id}/flag" \
  -H "EF-Access-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"key":"subscription_status","value":"paused"}'
If this path returns 404, use Pause, Resume, Reactivate, Change Next Bill Date, and related POST routes in this reference instead.

Skip Next Charge

Advances the subscription by one billing cycle without taking payment now (skips the next scheduled charge).
brand
string
required
The brand/project ID
id
string
required
Subscription transaction ID
Request
POST /api/brands/{brand}/subscriptions/{id}/skip
cURL
curl -X POST "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/{transaction_id}/skip" \
  -H "EF-Access-Key: your_api_key_here"

Force Bill

Triggers an immediate billing attempt for the subscription.
brand
string
required
The brand/project ID
id
string
required
Subscription transaction ID
Request
POST /api/brands/{brand}/subscriptions/{id}/force-bill
cURL
curl -X POST "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/{transaction_id}/force-bill" \
  -H "EF-Access-Key: your_api_key_here"

Change Next Charge Date

Updates the next billing date for the subscription.
brand
string
required
The brand/project ID
id
string
required
Subscription transaction ID
next_charge_at
string
required
New charge date/time (must be after now; ISO 8601 recommended)
Request
POST /api/brands/{brand}/subscriptions/{id}/change-next-bill-date
cURL
curl -X POST "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/{transaction_id}/change-next-bill-date" \
  -H "EF-Access-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"next_charge_at":"2026-04-15T12:00:00Z"}'

Reactivate Subscription

Reactivates a canceled (or otherwise eligible) subscription.
brand
string
required
The brand/project ID
id
string
required
Subscription transaction ID
Request
POST /api/brands/{brand}/subscriptions/{id}/reactivate
cURL
curl -X POST "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/{transaction_id}/reactivate" \
  -H "EF-Access-Key: your_api_key_here"

Subscription Emails

Returns the email log for a subscription (from brand email logs when available).
brand
string
required
The brand/project ID
id
string
required
Subscription transaction ID
Request
GET /api/brands/{brand}/subscriptions/{id}/emails
cURL
curl "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/{transaction_id}/emails" \
  -H "EF-Access-Key: your_api_key_here"

Analytics Endpoints

Summary

Returns key metrics such as active count, MRR, churn, and average LTV (exact fields depend on implementation).
Request
GET /api/brands/{brand}/subscriptions/analytics/summary
cURL
curl "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/analytics/summary" \
  -H "EF-Access-Key: your_api_key_here"

MRR Trend

Returns monthly MRR values over time.
Request
GET /api/brands/{brand}/subscriptions/analytics/mrr-trend

Churn Trend

Returns monthly churn rate values over time.
Request
GET /api/brands/{brand}/subscriptions/analytics/churn-trend

Cohort LTV

Returns lifetime value analysis grouped by subscription start month.
Request
GET /api/brands/{brand}/subscriptions/analytics/cohort-ltv

Dunning Stats

Returns dunning recovery metrics: totals in dunning, recovered, lost, and recovery rate.
Request
GET /api/brands/{brand}/subscriptions/analytics/dunning-stats
cURL
curl "https://app.elasticfunnels.io/api/brands/{brand_id}/subscriptions/analytics/dunning-stats" \
  -H "EF-Access-Key: your_api_key_here"

Retention Offers

Retention configuration is stored per merchant. Replace {merchant} with the merchant record ID.

Get Retention Offers

Returns the merchant’s configured retention offers and exit survey reasons.
brand
string
required
The brand/project ID
merchant
string
required
Merchant ID
Request
GET /api/brands/{brand}/merchants/{merchant}/retention-offers

Save Retention Offers

Updates the merchant’s retention offer configuration.
brand
string
required
The brand/project ID
merchant
string
required
Merchant ID
retention_offers
object
required
Configuration object: enabled, offers (array with offer_type, optional cancel_reason, offer_value, offer_label, offer_duration_cycles, offer_product_code), and optional exit_survey_reasons
Request
PUT /api/brands/{brand}/merchants/{merchant}/retention-offers
cURL
curl -X PUT "https://app.elasticfunnels.io/api/brands/{brand_id}/merchants/{merchant_id}/retention-offers" \
  -H "EF-Access-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"retention_offers":{"enabled":true,"offers":[],"exit_survey_reasons":[]}}'

Apply Retention Offer

Applies a retention offer to a specific subscription transaction.
brand
string
required
The brand/project ID
transaction_id
string
required
The subscription transaction ID
merchant_id
integer
required
Merchant ID that owns the transaction
offer_type
string
required
discount, pause, or downgrade
offer_value
number
For discount, percent off; for pause, pause length in days (minimum 1)
offer_duration_cycles
integer
For discount, number of billing cycles the discount applies
offer_product_code
string
For downgrade, target product code when applicable
cancel_reason
string
Customer’s selected cancellation reason
Request
POST /api/brands/{brand}/retention-offers/apply
cURL
curl -X POST "https://app.elasticfunnels.io/api/brands/{brand_id}/retention-offers/apply" \
  -H "EF-Access-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{"transaction_id":"...","merchant_id":1,"offer_type":"discount","offer_value":15,"offer_duration_cycles":3,"cancel_reason":"Too expensive"}'