API Reference · Endpoints
Plans & features map
Read which plan unlocks which feature, and how API key permissions and plans combine on every request.
Two checks run on every /api/v1 request: the workspace's plan must include the feature, and the API key must have the permission the endpoint needs. This page documents both, plus the public endpoint that returns the plan map so your own UI never drifts from the server.
Get the features map
/api/subscriptions/features-mapTier → features mappingPublic: no authentication needed. Safe to call from a browser.
curl "https://inboxi.app/api/subscriptions/features-map"{
"success": true,
"data": {
"tierFeatures": {
"starter": ["unified_inbox", "saved_replies", "tags", "widget"],
"growth": ["unified_inbox", "saved_replies", "tags", "widget",
"sla_management", "lifecycle_stages", "priority_system", "automation", "full_analytics",
"api_access", "sdk_access", "webhooks", "push_notifications", "external_data"],
"pro": [ "…same as growth…" ],
"enterprise": [ "…same as pro…", "white_label" ]
},
"trialFeatures": ["unified_inbox", "saved_replies", "tags", "widget"],
"featureRequiredTier": {
"sla_management": { "tier": "growth", "label": "Growth" },
"api_access": { "tier": "growth", "label": "Growth" },
"webhooks": { "tier": "growth", "label": "Growth" },
"external_data": { "tier": "growth", "label": "Growth" },
"white_label": { "tier": "enterprise", "label": "Enterprise" },
...
}
}
}| Field | Type | Required | Description |
|---|---|---|---|
tierFeatures | object | optional | For each plan tier, the feature keys it includes. |
trialFeatures | string[] | optional | Features available during the free trial (the Starter set). |
featureRequiredTier | object | optional | For each gated feature, the lowest tier that includes it, with a display label. |
Features by plan
| Feature key | Starter & trial | Growth | Pro | Enterprise |
|---|---|---|---|---|
| unified_inbox, saved_replies, tags, widget | ✓ | ✓ | ✓ | ✓ |
| sla_management, lifecycle_stages, priority_system | - | ✓ | ✓ | ✓ |
| automation, full_analytics | - | ✓ | ✓ | ✓ |
| api_access, sdk_access | - | ✓ | ✓ | ✓ |
| webhooks, push_notifications, external_data | - | ✓ | ✓ | ✓ |
| white_label | - | - | - | ✓ |
Growth and Pro unlock the same features; Pro differs in scale (seats, channels, credits). See Plans, credits & billing for limits and prices.
Which plan feature an API request needs
The plan check on /api/v1 depends on the key's permissions:
| API key permissions | Plan feature checked | Lowest plan |
|---|---|---|
Include widget or * | widget | Starter (and trial) |
Anything else (for example only read + write) | api_access | Growth |
When the check fails, the request is rejected with 403 and "code": "FEATURE_LOCKED" before the endpoint runs; see Errors.
Permission → endpoint table
The key must hold the listed permission (or *); otherwise the API answers 403 "Missing permission: …".
| Permission | Grants |
|---|---|
read | GET conversations (and /chats), messages, contacts, external-data query / contact / schemas, actions list, messaging events and event status |
write | Send message, trigger event, register / update / delete actions, delete external-data records and sources |
external_data | Push external data (single and bulk) |
webhooks | Create, list, update, delete and test webhooks; read delivery logs |
widget | Marks the key as a widget key, which moves its plan check to the widget feature (Starter+). It grants no endpoint on its own. |
* | Every permission above. |
GET /api/v1/events (the webhook event list) needs only a valid key. A new key gets read, write, webhooks, widget and external_data; narrow it in Settings › Developer Hub › API Keys when an integration needs less.
Gating your own UI
- 1Fetch the map onceCall
GET /api/subscriptions/features-mapat start-up and cache it. - 2Know the workspace tierKeep the tier of the workspace you integrate with in your own settings.
- 3Check before showing a featureShow a feature if
tierFeatures[tier]contains its key; otherwise show an upgrade hint withfeatureRequiredTier[key].label. - 4Still handle FEATURE_LOCKEDPlans can change at any time, so treat a 403 FEATURE_LOCKED as the final word and refresh your cache.