Skip to content

Subscriptions API

Manage subscriber subscriptions.

Endpoints

GET/api/v1/subscriptions
List all subscriptions

Query Parameters:

ParamTypeDescription
plan_idstringFilter by plan
statusstringFilter by status
subscriber_emailstringFilter by email

Response:

json
[
  {
    "id": "sub_abc123",
    "plan_id": "plan_xyz",
    "subscriber_id": "usr_456",
    "status": "active",
    "current_period_start": 1704067200,
    "current_period_end": 1706745600,
    "created_at": 1704067200
  }
]

GET/api/v1/subscriptions/{id}
Get subscription details

POST/api/v1/subscriptions/{id}/pause
Pause a subscription

Stops future billing. Access continues until current period ends.


POST/api/v1/subscriptions/{id}/resume
Resume a paused subscription

POST/api/v1/subscriptions/{id}/cancel
Cancel a subscription immediately
⚠️

Cancellation is immediate and notifies the subscriber. Use pause if you want them to keep access until period end.


POST/api/v1/subscriptions/{id}/extend
Add free days to a subscription

Query Parameters:

ParamTypeDescription
daysintegerNumber of days to add

GET/api/v1/subscriptions/{id}/manage-link
Get subscriber's self-service portal URL

Response:

json
{
  "url": "https://your-lnbits.com/subscriptions_manager/manage?token=abc123"
}

Subscription Statuses

StatusDescription
pendingWaiting for first payment
activePaid and current
pausedTemporarily suspended
past_duePayment failed, in grace period
payment_failedGrace period ended
cancelledManually cancelled
expiredPeriod ended

Example: Check if Active

python
import requests

def is_subscription_active(email):
    response = requests.get(
        "https://your-lnbits.com/subscriptions_manager/api/v1/subscriptions",
        headers={"X-Api-Key": "YOUR_INVOICE_KEY"},
        params={"subscriber_email": email}
    )

    subscriptions = response.json()
    return any(s["status"] == "active" for s in subscriptions)

# Usage
if is_subscription_active("user@example.com"):
    print("User has active subscription")