Get effective plan and feature map
/organization/{id}/entitlements
Returns 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 while on hold), which folds in the trial and the Stripe subscription status. Any member may read it.
Path Parameters
Organization id (org_…).
Response Body
Whether the CALLER may use the workspace. single_user_locked: the organization is on Personal, which admits only its primary owner (its creator, else its earliest active Org Owner), and the caller is not them; every other org route answers 403 plan_single_user until it upgrades. This route, the organization read and billing stay open.
fullsingle_user_locked
The plan_single_user refusal's sentence, naming the owner, when access is single_user_locked; else null.
Elaichi suspended this organization. plan reads null too, and subscribing does not lift it.
Why it was suspended, when blocked; else null.
Feature key → the lowest plan that includes it. The same on every response: use it to name the plan that unlocks a feature features marks false.
Feature key → allowed. A key that is absent is not offered to this organization — not an error. The response can carry further informational fields beyond those listed here.
Elaichi granted this organization features beyond its plan, with no change to billing. features already includes them.
The plan's limits, counted on the server; null on a plan without limits (only Personal has them), and null on Personal when the usage could not be counted. reached is the same comparison the refusing write makes: disable the add control on it. used can exceed max after a move to Personal; nothing is removed.
3 properties
used >= max: the write that would add one more is refused.
Exact, counted at read time.
3 properties
used >= max: the write that would add one more is refused.
Exact, counted at read time.
3 properties
used >= max: the write that would add one more is refused.
Exact, counted at read time.
3 properties
used >= max: the write that would add one more is refused.
Exact, counted at read time.
4 properties
used >= max: the write that would add one more is refused.
Next 1st of the month, 00:00 UTC.
Exact, counted at read time.
Effective plan. null means on hold — gated routes answer 403 subscription_required.
personalgoldblacknull
What each plan allows, from the catalog (identical on every response, like feature_plans): { members, connections, connectors, synthetic_tools, tool_calls } per plan, or null for a plan with no limits.
The local trial (Black for new organizations) before a subscription starts.
Elaichi-granted indefinite trial: unlocked with no end date. trial_active stays false because 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())