Skip to content
GET /organization/{id}/entitlements

What this organization may use right now. Call this before offering a gated feature rather than reading `plan` off the organization: `plan` here is the EFFECTIVE plan (null when locked), which folds in the trial and the Stripe subscription status. Membership required; any member may read it.

Path Parameters

idstring
required·

Organization id (org_…).

Response Body

featuresRecord<string, any>

Feature key → allowed. Every known feature key is present, so a missing key means unknown, not denied.

planstring,null

Effective plan. null means locked — gated routes answer 403 subscription_required.

Possible values:
goldblacknull
trial_activeboolean

Local pre-Checkout Gold trial only.

trial_ends_atstring,null · date-time
trial_indefiniteboolean

Staff-granted indefinite trial: unlocked with no end date. trial_active stays false — there is no clock to count down.

curl -X GET 'https://api.elaichi.ai/organization/<id>/entitlements' \
  -H 'Authorization: Bearer $ELAICHI_API_TOKEN' \
  -H 'Content-Type: application/json'
const response = await fetch('https://api.elaichi.ai/organization/<id>/entitlements', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + process.env.ELAICHI_API_TOKEN,
    'Content-Type': 'application/json',
  },
});

const data = await response.json();
console.log(data);
import os
import requests

url = "https://api.elaichi.ai/organization/<id>/entitlements"
headers = {
    "Authorization": f"Bearer {os.environ['ELAICHI_API_TOKEN']}",
    "Content-Type": "application/json",
}

response = requests.get(url, headers=headers)
print(response.json())