ListenHubOpenAPI
API Reference

Subscription

Query account subscription status, credit balances, and expiration details.

Query Subscription and Credit Balance

GET /v1/user/subscription

Query account credits, subscription status, and related metadata.

Request example:

curl -X GET "https://api.marswave.ai/openapi/v1/user/subscription" \
  -H "Authorization: Bearer $LISTENHUB_API_KEY"
const response = await fetch(
  'https://api.marswave.ai/openapi/v1/user/subscription',
  {
    headers: {
      Authorization: `Bearer ${process.env.LISTENHUB_API_KEY}`,
    },
  },
)
const data = await response.json()
console.log(data)
import os
import requests

response = requests.get(
    'https://api.marswave.ai/openapi/v1/user/subscription',
    headers={'Authorization': f'Bearer {os.environ["LISTENHUB_API_KEY"]}'}
)
data = response.json()
print(data)

Response example:

{
  "code": 0,
  "message": "",
  "data": {
    "subscriptionStartedAt": 1735660800000,
    "subscriptionExpiresAt": 1767196800000,
    "usageAvailableMonthlyCredits": 500,
    "usageTotalMonthlyCredits": 1000,
    "usageAvailablePermanentCredits": 300,
    "usageTotalPermanentCredits": 500,
    "usageAvailableLimitedTimeCredits": 200,
    "totalAvailableCredits": 1000,
    "resetAt": 1735660800000,
    "platform": "web",
    "renewStatus": false,
    "paidStatus": true,
    "subscriptionPlan": {
      "name": "pro",
      "duration": "monthly",
      "platform": "web"
    },
    "freeUsages": {
      "gemini-3-pro-image-relax-1k-2k": {
        "remaining": 2,
        "resourceType": "image",
        "resourceKey": "gemini-3-pro-image-relax-1k-2k",
        "unit": "generation"
      },
      "wan2.7-image": {
        "remaining": 1,
        "resourceType": "image",
        "resourceKey": "wan2.7-image",
        "unit": "generation"
      },
      "gpt-image-2": {
        "remaining": 1,
        "resourceType": "image",
        "resourceKey": "gpt-image-2",
        "unit": "generation"
      }
    }
  }
}

Response fields:

All timestamps are 13-digit epoch-millisecond numbers. Fields tied to a plan (subscriptionStartedAt, subscriptionExpiresAt, subscriptionPlan.*) are only populated while a subscription is active; on a free account subscriptionPlan is {}.

FieldTypeDescription
totalAvailableCreditsintegerTotal credits you can spend right now: monthly + permanent + time-limited
usageAvailableMonthlyCreditsintegerMonthly credits remaining this cycle
usageTotalMonthlyCreditsintegerMonthly credit allotment for the cycle
usageAvailablePermanentCreditsintegerPermanent credits remaining (do not reset)
usageTotalPermanentCreditsintegerTotal permanent credits granted
usageAvailableLimitedTimeCreditsintegerTime-limited credits remaining
resetAtintegerWhen monthly credits reset (epoch ms)
subscriptionStartedAtintegerSubscription start time (epoch ms)
subscriptionExpiresAtintegerSubscription expiration time (epoch ms)
platformstringBilling platform, e.g. web, ios, android. Defaults to web
renewStatusbooleanWhether auto-renew is on
paidStatusbooleanWhether the subscription is a paid (non-trial) active plan
subscriptionPlanobjectActive plan details, or {} when no plan is active
subscriptionPlan.namestringPlan name, e.g. pro, max
subscriptionPlan.durationstringBilling cycle, e.g. monthly, yearly
subscriptionPlan.platformstringPlatform the plan was purchased on
freeUsagesobjectFree-quota balances keyed by resource key (see below)

Each freeUsages entry has the following shape:

FieldTypeDescription
remainingintegerFree generations left for this resource
resourceTypestringResource category, e.g. image
resourceKeystringThe model/resource identifier (matches the map key)
unitstringUnit of the quota, e.g. generation

API key calls draw down freeUsages before any credits are spent.

Free Quota (freeUsages)

API key calls consume the same account-level free-quota balance shown here as the web and Labnana apps. Your account can earn free quota through sign-up, invites, and check-ins; calling the API does not grant a separate allowance.

Resource keyModelSizesNotes
gemini-3-pro-image-relax-1k-2kNanoBanana Pro (relax)1K / 2K onlyThe headline free benefit. 4K never draws from this balance.
wan2.7-imageWan 2.71K / 2K onlyBonus free quota.
gpt-image-2GPT-Image-21K / 2K onlyBonus free quota.

When freeUsages[<key>].remaining > 0, a matching 1K/2K generation through your API key spends the free quota instead of credits. Once it reaches 0, the same request falls back to ordinary credit billing. 4K always uses credits.

NanoBanana Pro free quota can keep refilling through sign-up, invites, and check-ins — it does not mean unlimited API calls. The balance is finite at any moment, and how a Pro relax call runs depends on your account type (see Image Generation → NanoBanana Pro Free Quota).

618 Campaign (Pro / Max monthly credits)

From 2026-06-18 through 2026-06-24 (Asia/Shanghai), active Pro and Max subscribers receive +50% monthly credits for their eligible membership cycle. Both monthly and annual billing participate; a Max subscriber's bonus is based on Max's own monthly credit amount.

The 618 bonus is a one-week boost to your monthly credits (usageTotalMonthlyCredits / usageAvailableMonthlyCredits). It is not a permanent plan upgrade, not a NanoBanana Pro free-quota (freeUsages) allowance, and not an upfront annual lump sum. The bonus resets with your current membership month, the same as ordinary monthly credits.

On this page