How producer pricing works
Producer pricing has four parts. This page describes their structure only. It doesn't state any figure, because every figure is configuration that can change: read the live values from the quote endpoints listed below.
The four parts
| Part | What it is | Who sets it |
|---|---|---|
| Claim fee | A small one-time payment when you claim a producer account. It covers your first period. | Lightning Enable |
| Renewal | A payment per period, priced in dollars and converted to sats when you ask for it. The base price includes one active proxy. | Lightning Enable |
| Per-proxy increment | An amount added to the renewal for each active proxy beyond the ones the base price includes. | Lightning Enable |
| Buyer price per call | What a buyer pays for each call to your proxy. If you don't set one when you claim, a default applies. | You |
The claim fee is there to keep out spam signups, not to earn revenue. The renewal and the per-proxy increment pay for the hosted service. The buyer price per call is your revenue: buyers pay it to your wallet. Lightning Enable does not hold funds; your wallet provider facilitates custody and settlement.
Where each figure is read
Read every figure from a quote at the moment you need it. A quote has no side effects and creates no invoice.
| Figure | Where to read it |
|---|---|
| Claim fee | GET /api/producer/claim, in the price block (sats and usdCents). The covers block says how many days the claim covers. |
| Renewal, as published with the claim | GET /api/producer/claim, in the renewal block: baseUsdCents and baseSats, its conversion at the live rate kept between the configured minimum and maximum, includedProxies, periodDays, and the renewal endpoint. |
| Renewal, as you'd pay it now | GET /api/merchant/subscription/renew, in priceSats and periodDays, with the full calculation in breakdown. This is the amount a renewal challenge charges. If it differs from the claim quote's renewal block, this one is what you pay. |
| Per-proxy increment | GET /api/producer/claim, in renewal.perProxyUsdCents and renewal.perProxySats, its conversion at the live rate. When no rate is available, the minimum applies and perProxySats is zero. |
| Your current renewal and proxy count | GET /api/producer/claim/status, in renew.quoteSats, renew.usdCents, and renew.activeProxies. |
| Buyer price per call | The price you set on the proxy. The claim quote's limits block gives the lowest and highest price a claimed proxy accepts (minProxyPriceSats, maxProxyPriceSats). |
Prices that are pegged to dollars are converted to sats when the quote or the challenge is issued, so the sats figure moves with the exchange rate. If the exchange rate is unavailable, the renewal is priced at its configured sats minimum rather than refused, and the sats figure is always kept between a configured minimum and maximum.
A renewal challenge you already hold is honored at the sats amount it was issued for, even if the price changes before you pay. The challenge still expires, and the usual eligibility rules still apply.
The claim endpoint answers only where the claim flow is turned on. The renewal quote is described in the Merchant Settings API, and paying it is walked through in Renew in sats.
How the renewal is calculated
The renewal is priced per endpoint, and an endpoint here means an active proxy on your account. Inactive proxies and proxies on other accounts don't count. The calculation is:
- The base price, which includes the number of proxies in
includedProxies. - Plus the per-proxy increment for each active proxy beyond those.
- Converted to sats at the current exchange rate, then kept within the configured minimum and maximum.
The renewal quote's breakdown block shows each step for your account: baseUsdCents, perProxyUsdCents, includedProxies, activeProxies, billableExtraProxies, usdCentsTotal, the btcUsd rate used, the resulting sats, and pricedAt. To lower the renewal, deactivate the proxies you no longer need before you renew.
Each payment adds one period (periodDays) to your paid-through date. You can prepay ahead, up to a limit; past it, the quote answers eligible: false with reason: "PrepaidCapReached" until the paid-through date comes closer.
Signals before a period ends
A producer account might have no email address, so Lightning Enable signals an upcoming lapse to your agent and to your buyers' agents in two ways:
- The
l402.subscription.expiringwebhook. If your account has a callback URL, Lightning Enable sends this event about seven days and about one day before your paid-through date. It carries the paid-through date, the days left, the renew endpoint, and the current renewal quote in sats. Set the callback URL withPUT /api/merchant/webhook-url. The payload is described in the Producer API Reference. - The proxy manifest. The JSON manifest of each proxy you own carries
paid_throughandrenewal { endpoint, period_days }in itsserviceblock, so a buyer's agent can see a lapse coming. The manifest carries no price; the live figure is always the quote.
You can also read paidThrough from GET /api/producer/claim/status at any time.
Figures are configuration
Every figure on this page is configuration and can change without a docs update. Don't copy a figure from a quote into your code or your own docs. Read the quote each time, and set any spending limit in your agent from the quoted amount.
What happens when a period lapses
Nothing charges you automatically. When your paid-through date passes:
- Authenticated calls answer
403withaction_required: "renew_subscription"and the renew endpoint. - A daily job moves the account to the Free Producer Sandbox, and the sandbox limits apply to new proxies and to challenge volume. Your existing proxies stay in place and keep serving buyers.
- Nothing is deleted. Your account, API key, proxies, prices, and payment history stay in place, and the account stays active so it can reach the renew endpoint.
- Paying the renewal restores the plan. For a lapsed account, the new period starts from your payment; a renewal paid before the period ends adds its period to your current paid-through date instead.
Sats that buyers already paid went to your wallet when they paid, so a lapse never holds back money you earned.