Organization
The Organization page is where you see your team: who is in it, what they can do, and how much they have used this month.
This page describes what is on the screen. For the workflows behind it (invitation rules, role changes, audit logs and the tenant-admin API), see Team Management.
Organization Overview
The header shows your organization's name, its creation date, your own role, and the current member count.
Identifiers
An Identifiers card (System IDs) holds your Organization ID and your User ID. Click either to copy it. You will need them for support requests, API debugging, and integration setup.
Billing Details
Owner and organization Admin only
Your organization records who the money is billed to — the buyer that appears on an invoice and that a payment provider is given when a card is charged. It is separate from the people in your team: changing a member's own profile never changes it.
| Field | Notes |
|---|---|
| Legal name | The registered name the invoice is made out to. Required |
| Country | Two-letter ISO country code. Required |
| Invoice email | Where invoice documents are sent. Required |
| Address | The first address line is required. A second line, the city and the postal code are optional |
| Tax ID | Optional. Individuals and customers outside jurisdictions that issue one may leave it blank |
Owners and organization admins can read and edit all of it. Members cannot see it.
The details are counted complete when the legal name, the country, the invoice email and the first address line are all filled in and none of them is blank. The tax ID is not part of that test.
Until they are complete, a card payment cannot be taken. If you start a payment with the details missing, you are asked to fill them in as part of that payment rather than being sent somewhere else and made to start over. See Billing for the payment flow itself.
API
# Read
curl https://api.bulutistan.ai/api/v1/tenant-admin/billing-profile \
-H "Authorization: Bearer <your-jwt-token>"
# Update
curl -X PATCH https://api.bulutistan.ai/api/v1/tenant-admin/billing-profile \
-H "Authorization: Bearer <your-jwt-token>" \
-H "Content-Type: application/json" \
-d '{
"billing_legal_name": "Example Industries Ltd.",
"billing_country": "TR",
"billing_email": "invoices@example.com",
"billing_address_line1": "123 Example Street"
}'
Both require a JWT session held by an owner or an organization admin. The read returns every field together with a complete flag, so a client can decide whether to prompt for the missing details before starting a payment. PATCH is a partial update: a field you omit is left alone, and a field sent as null or as an empty string is cleared.
Members
Member List
| Column | Description |
|---|---|
| Name | Member name |
| Email address | |
| Role | Owner, Admin, or Member |
| Status | Active, Pending, or Suspended |
| Joined | Join date |
| Usage | Requests and tokens for this member |
Per-Member Usage
Each member row carries a usage line covering this month to date, under the note "Usage shown per member for this month to date (UTC)."
- A member who has produced nothing reads "No usage this month", not "0 requests". The distinction matters: it tells you the member is idle, not that a number failed to load.
- When the lookup itself fails, the row reads "Usage figures unavailable". The member's usage is unknown, not zero.
Roles
| Role | Permissions |
|---|---|
| Owner | Full access, cannot be removed, can transfer ownership |
| Admin | Manage members, invites and settings |
| Member | API access, viewing their own usage |
| Capability | Owner | Admin | Member |
|---|---|---|---|
| Create API keys | ✅ | ✅ | ✅ |
| View own usage | ✅ | ✅ | ✅ |
| View billing | ✅ | ✅ | Limited |
| Manage members | ✅ | ✅ | ❌ |
| Change roles | ✅ | ❌ | ❌ |
| Transfer ownership | ✅ | ❌ | ❌ |
Team Management describes each role in full.
Inviting Members
Admin or Owner only
- Click Invite Member
- Enter the email address
- Select a role
- Click Send Invite
A person belongs to exactly one organization. Inviting someone who is already in your organization is refused and says so. Inviting an address that already has an account in another organization looks like it succeeded, but nothing is sent — the form deliberately gives nothing away about who is on the platform. See One email, one account.
Invites sent from this page use the User Invite template, and the subject reads "{inviter_name} invited you to join {organization_name} on {platform_name}". Invites initiated by a platform administrator use a separate Admin Invite template.
Invites are protected by layered email rate limits (per-recipient, per-actor, per-organization, and global). If a burst trips any cap, the page shows "Too many emails sent to this address recently. Please try again later." with a hint on when to retry. The invite row itself is still created, so you can resend it once the window clears.
Pending Invites
Pending invitations are listed with their expiry dates. Each row offers:
- Resend sends a fresh link to a pending, still-valid invite. This invalidates the previous link
- Cancel Invite withdraws the invitation
Clean up expired removes every expired invite in one step. It leaves pending, still-valid invites untouched.
Expired invitations cannot be resent; cancel them and send a new invitation instead. See Resending Invitations for the rules and cooldowns.
Did the invitation email actually go out?
Each pending invitation carries a second badge, next to its Pending or Expired state, saying what happened to the email:
| Badge | Meaning |
|---|---|
| Sending | The email is on its way out. |
| Sent | The email was handed to our mail provider. |
| Delayed | It has not gone out yet and we are still trying. |
| Not delivered | It will not be sent. |
| (no badge) | Nothing is known about this invitation's email — usually an older invitation. It is not a failure. |
Delayed and Not delivered are followed by a short sentence explaining what to do:
- "Delivery is delayed and we are still trying. The invitation link stays valid."
- "This invitation is no longer valid — it expired, was accepted, was cancelled, or a newer invitation replaced it. Create a new invitation if this person still needs access."
Hover a badge to see when the last attempt was made.
These badges describe our side of the send. They never tell you an address was wrong or that a mailbox rejected anything. If an invitation reads Sent and the person still has nothing, the next steps are their spam folder and One email, one account — not this badge.
Resend confirms with "Invitation queued — the invitation email has been queued for delivery. Delivery is not confirmed yet." The badge then updates itself a moment later, without a page reload, so you can see what became of it.
Managing Members
Admin or Owner only
Open a member's actions to reach:
| Action | Effect |
|---|---|
| Suspend User | Revokes access immediately. The account and its data are kept |
| Activate User | Restores access to a suspended member |
| Unlock User | Clears a lock caused by too many failed sign-in attempts, without waiting for it to expire |
Suspension is how a member is removed from active use: the account is suspended, not deleted. Their API keys are not deleted either, but keys belonging to a suspended member fail verification for as long as the suspension is in effect. Reactivating the member restores both.
Change Role
Owner only
- Find the member in the list
- Open the role control
- Select the new role
- Confirm the change
Admins cannot promote or demote anyone; only the owner can change roles.
Transferring Ownership
Ownership transfer is API-only; there is no transfer control in the portal UI. The current owner calls:
POST /api/v1/tenant-admin/transfer-ownership
Authorization: Bearer <token>
Content-Type: application/json
{
"new_owner_id": "user-uuid-here"
}
The new owner must already be a member of the organization. After the transfer, the previous owner becomes an admin.
This action is irreversible. The new owner will have full control.
Audit Logs
Admin or Owner only
Organization activity (invitations, removals, role changes, suspensions and ownership transfers) is recorded and viewable from this page. See Audit Logs for the fields and the API.