Organizations & roles
On the Syntic platform, the organization is the unit that owns things. API keys, plan allowance, usage-credit wallet, spend limits, agents and the audit log all belong to one organization, and every API request is billed to the organization that issued its key.
People join an organization as members, and each member holds a role that decides what they may change. This page covers how that works and how membership changes reach your API traffic.
Organizations
- A person can belong to several organizations and switches between them in the Console. Whatever page you are on acts on the organization currently selected.
- A key always bills its home organization, whichever organization its creator has selected at the time a request is made.
- Usage, credits and limits are never pooled across paid organizations. Each one has its own plan allowance and wallet.
Want separate budgets for, say, production and experiments? Use separate organizations, or set spend limits per member or group inside one organization.
Roles
| Role | Typical holder | Can do, as far as the API is concerned |
|---|---|---|
| Primary owner | The person who holds the organization | Everything an owner can, and is the one ownership is transferred from |
| Owner | Founders, account holders | Everything, including cancelling the subscription and ownership changes |
| Administrator | Engineering leads, finance admins | Invite, suspend and remove members; change most roles; see and revoke every API key; change billing, spend limits and auto-reload; buy credits; read the audit log |
| Developer | Engineers building on the API | Create keys and see or revoke only their own; build agents and content; see their own usage if member analytics is on |
| Custom | Anyone needing a tailored set | Whatever the organization’s permission grid grants. See Custom roles. |
What each role can do in the Console
| Action | Owner / Primary owner | Administrator | Developer |
|---|---|---|---|
| Create a private API key | Yes | Yes | Yes |
| See every key in the organization | Yes | Yes | Own keys only |
| Revoke any key | Yes | Yes | Own keys only |
| Turn usage credits on or off, change the spend limit or auto-reload | Yes | Yes | No |
| Buy usage credits | Yes | Yes | No |
| Set per-member and per-group spend limits | Yes | Yes | No |
| View the Usage page | Yes | Yes | Yes |
| Invite members | Yes | Yes | No |
| Change a developer’s role | Yes | Yes | No |
| Change another administrator’s or an owner’s role | Yes | No | No |
| Suspend, restore or remove members | Yes | Yes | No |
| Read and export audit logs | Yes | Yes | No |
| Cancel the subscription, transfer ownership | Yes | No | No |
Custom roles
A member with the custom role gets permissions from the groups they belong to. Each group can carry a grid of administrative areas, each set to none, view or manage. The areas that matter for API work are:
| Area | Level | Grants |
|---|---|---|
| Analytics | View or manage | Read the audit log |
| User management | Manage | Invite and remove members, change roles |
| Identity & access | Manage | Organization settings |
| Privacy | Manage | Compliance settings |
Billing changes and organization-wide key management are reserved for owners and administrators. A custom-role member creates and revokes keys like a developer: only their own.
Members
Invite someone
Open Members
As an owner or administrator, go to Settings → Members.
Enter an email and a role
Invitations can be sent as Administrator or Developer. Owners are never created by invitation; ownership is set when the organization is created or moved by an explicit transfer.
The invitee accepts
The person receives an email link. Until they accept, they are not an active member and cannot create keys.
Change a role
Administrators can move a member between administrator and developer. Changing the role of another administrator or of an owner requires an owner. The owner role itself cannot be granted through a role change.
Role changes are recorded in the audit log as member.change_role.
Suspend, restore or remove
| Action | Effect on the member | Effect on their API keys |
|---|---|---|
| Suspend | Loses access to the organization until restored | Stop working at once |
| Restore (from suspended or removed) | Regains access with their previous role | Work again, with no further action |
| Remove | Loses access to the organization | Stop working at once |
“Stop working” means requests with those keys fail with 403 org_membership_required. The keys are not revoked, so restoring the member brings them back. Owners cannot be suspended or removed this way.
Every key depends on its creator staying an active member. Before someone leaves, find the keys they made, create replacements under an account that will remain, deploy them, and only then remove the person. Otherwise production traffic using their keys starts failing the moment they are removed.
Handle membership errors in code
When a membership or organization problem blocks a key, the API answers with a 403 and a code your code can branch on. None of these will succeed on retry until someone changes the organization in the Console.
import os
import requests
ORG_PROBLEMS = {"org_membership_required", "account_disabled", "org_unavailable"}
resp = requests.post(
"https://app.syntic.ai/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['SYNTIC_API_KEY']}"},
json={
"model": "Amara Quick",
"stream": False,
"messages": [{"role": "user", "content": "Summarise yesterday's deploy log."}],
},
timeout=60,
)
if resp.status_code == 403 and resp.json()["error"]["code"] in ORG_PROBLEMS:
# Not transient: page a human instead of retrying.
raise RuntimeError(f"Syntic key blocked: {resp.json()}")
resp.raise_for_status()
print(resp.json()["choices"][0]["message"]["content"])error | Cause | Fix |
|---|---|---|
org_membership_required | The key’s creator was suspended, removed or never accepted the invitation | Restore the member, or switch to a key from a current member |
account_disabled | The account that owns the key is disabled | Restore the account, or use another member’s key |
org_unavailable | The organization is archived or being deleted | Restore the organization |
A related 503 authorization_unavailable means the API could not check the credential at that moment. That one is transient; retry after a short wait.