Skip to main content
ArcenPay subscriptions are on-chain. When a subscriber activates a plan, the platform executes an EVM transaction that mints a subscription token to the payment account and begins the autopay cycle. Your backend interacts with this through a small set of endpoints and SDK methods that handle activation, entitlement checks, metered usage, plan changes, and cancellation.

Subscription object

Subscription state is tracked in the ledger and surfaced via the company detail response. Key fields:

Activate a subscription

POST /api/v1/subscriptions/activate executes the first on-chain subscription charge through the merchant signer configured on your dashboard backend.

Request body

string | number
required
The on-chain PlanFactory plan ID for the plan to activate.
string
required
The subscriber’s wallet address (EVM EOA/smart account, Stellar account, or Solana wallet). Autopay is set up per family: an ERC-7579 smart account with the autopay module (EVM), a shared SPL delegate PDA (Solana), or an autopay account (Stellar). The wallet needs sufficient token balance and allowance before calling this endpoint.
object
required
Identifies the company in your team. At least one of id, wallet, or email is required. If the company does not exist it is created automatically.
string
Optional. Email address to send billing confirmation to. Falls back to the company email if omitted.

Response

string
On-chain subscription NFT token ID minted to the payment account.
string
EVM transaction hash for the initial activation charge. You can look this up on any block explorer for the configured chain.
string
ArcenPay’s internal ID for the company record that was resolved or created.
string
Catalog plan ID the subscription was activated against.
string
The normalized payment account address.
boolean
true when the on-chain transaction succeeded but the billing ledger finalization was queued for recovery (HTTP 202). The subscription is active — check back or listen for subscription.minted via webhooks.

SDK equivalent

Check entitlements

Check whether a company is entitled to a feature by key:

Consume metered usage

For metered features, call POST /api/v1/usage/consume (or the SDK equivalent) after each unit of use. Supply an idempotencyKey to make the call safe to retry:

Plan changes and cancellation

After the initial activation, plan changes and cancellations go through POST /api/v1/companies/plan and POST /api/v1/companies/unsubscribe.
Plan changes, cancellation, and resume are self-serve customer flows — they authenticate with an embed access token (from identify()) and run inside ArcenEmbed. They are not provider API-key calls. If your backend must trigger a plan change programmatically, workflow through your customer’s normal checkout/portal flow or do it from the dashboard’s customer view.
Preview an upgrade (no charge):
Execute an immediate prorated upgrade:
Schedule a downgrade at next renewal:
Resume a scheduled cancellation:

Lifecycle response contract

Plan changes, cancellation, and resume now return the same core lifecycle fields:
Customer action accepted is not the same as financially final. For recurring paid subscriptions, ArcenPay only treats a change as fully applied after verified chain state plus backend ledger follow-up.

Subscription lifecycle events

ArcenPay emits webhook events as the subscription moves through its lifecycle. Listen for these on your webhook endpoint:

Auto-renewal

No action is required from your backend to handle renewals. The on-chain autopay module collects the renewal charge automatically at each billing interval. ArcenPay processes the resulting chain events and emits subscription.renewed (or subscription.renewal_failed on failure). You only need to listen for these events if you want to react to renewal outcomes — for example, sending a receipt email or updating your own billing records.
Last modified on October 4, 2026