Skip to content

Subscriptions API

Manage subscriber subscriptions.

Endpoints

GET/api/v1/subscriptions
List all subscriptions (paginated)

Query Parameters:

ParamTypeDefaultDescription
limitinteger50Items per page (1–200)
offsetinteger0Items to skip
statusstringFilter by status (active, paused, cancelled, etc.)

Response:

json
{
  "items": [
    {
      "id": "sub_abc123",
      "plan_id": "plan_xyz",
      "subscriber_id": "usr_456",
      "status": "active",
      "current_period_start": 1704067200,
      "current_period_end": 1706745600,
      "created_at": 1704067200
    }
  ],
  "total": 42,
  "limit": 50,
  "offset": 0
}

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
{
  "subscription_id": "sub_abc123",
  "subscriber_email": "user@example.com",
  "manage_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(sub_id):
    response = requests.get(
        f"https://your-lnbits.com/subscriptions_manager/api/v1/subscriptions/{sub_id}",
        headers={"X-Api-Key": "YOUR_INVOICE_KEY"}
    )

    subscription = response.json()
    return subscription["status"] == "active"

def list_active_subscriptions():
    response = requests.get(
        "https://your-lnbits.com/subscriptions_manager/api/v1/subscriptions",
        headers={"X-Api-Key": "YOUR_INVOICE_KEY"},
        params={"status": "active", "limit": 100}
    )

    data = response.json()
    return data["items"]  # PaginatedResponse — items is the list

# Usage
if is_subscription_active("sub_abc123"):
    print("Subscription is active")