Skip to main content
GET
https://searchcompany-main.up.railway.app
/
api
/
subscription-status
curl -X GET https://searchcompany-main.up.railway.app/api/subscription-status \
  -H "Authorization: Bearer YOUR_CLERK_JWT_TOKEN"
{
  "status": "trialing",
  "trial_end": 1736899200,
  "days_remaining": 7
}
Retrieves the current subscription status directly from Stripe, including trial information if the subscription is in a trial period.
Authentication Required: This endpoint requires a Clerk JWT token with organization context. The organization is determined from the org_id claim in the token.

Request Headers

Authorization
string
required
Bearer token with organization context: Bearer {clerk_jwt_token}

Response

status
string
Subscription status from Stripe: trialing, active, canceled, past_due, unpaid, incomplete, incomplete_expired, or none if no subscription exists.
trial_end
integer | null
Unix timestamp (seconds) when the trial ends. Only present if status is trialing.
days_remaining
integer | null
Number of days remaining in the trial period. Only present if status is trialing.
curl -X GET https://searchcompany-main.up.railway.app/api/subscription-status \
  -H "Authorization: Bearer YOUR_CLERK_JWT_TOKEN"
{
  "status": "trialing",
  "trial_end": 1736899200,
  "days_remaining": 7
}

Errors

StatusDescription
401Missing or invalid authentication token
401No organization context in token
404Organization not found
500Database not configured

Usage

// Get token with organization context
const token = await getToken({ organizationId: organization.id });

const response = await fetch("/api/subscription-status", {
  headers: {
    Authorization: `Bearer ${token}`,
  },
});

const { status, days_remaining } = await response.json();

if (status === "trialing" && days_remaining !== null) {
  console.log(`Trial ends in ${days_remaining} days`);
}