Ada AI

Organizations

Organizations let a team share one pool of upstreams under a single account. Each proxy key is scoped to exactly one owner — you, or one organization.

Organizations let multiple people share a pool of upstreams under one account. Each proxy key belongs to exactly one owner — you, or one organization — chosen when the key is minted. /v1/* resolves against that owner's upstreams only; a key never spans personal and org pools, or more than one org.

Creating an organization

  1. In the dashboard, go to OrganizationsNew organization.
  2. Pick a name and a slug. The slug must be globally unique.
  3. You're the org's admin automatically.
curl -X POST https://api.ada.ai/me/organizations \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  -d '{"name": "Acme AI", "slug": "acme"}'

Roles

RoleCan do
adminEverything: invite and remove members, manage org upstreams, cancel invitations, list and revoke any member's org-scoped keys, delete the org — plus everything a member can do.
memberMint their own keys scoped to the org, use the org's upstreams through them, read the org's usage.

Roles gate management actions (who can invite, edit upstreams, revoke keys). They do not gate /v1/* traffic for a key already scoped to the org — any member's org key resolves against the org's upstreams.

Inviting members

  1. Open the org → MembersInvite member.
  2. Enter the invitee's email and pick a role (admin or member).
  3. Click Create invitation. You'll see a link of the form https://ada.ai/join?token=<random>.
  4. Share the link — Slack, email, whatever. It's the only thing the invitee needs.

Links are valid for 7 days. Anyone can hold the link, but only the user signed in with the matching email can accept. Admins can cancel a pending invitation from the Invitations tab.

curl -X POST https://api.ada.ai/me/organizations/$ORG_ID/invite \
  -H "Authorization: Bearer $JWT" \
  -H "Content-Type: application/json" \
  -d '{"email": "alice@example.com", "role": "member"}'
# → { "token": "<random>", ... }

The token is what goes after ?token= in the join link.

Accepting

The recipient clicks the link. If they're not signed in, the dashboard sends them through magic-link login first, then auto-resumes. If they're signed in with the matching email, the dashboard accepts and redirects to the org page in one step. If the email doesn't match, the dashboard surfaces an error — invitations are pinned to the address the inviter typed.

Shared upstreams

Being in an org does not add its upstreams to your existing key's routing pool — a key's scope is fixed when it's minted, and personal keys stay personal. To reach an org's upstreams, mint a key scoped to that org: KeysNew key, then pick the org from the Owner field instead of "Personal". That key resolves only against the org's upstreams, ordered by priority, with 5xx failover.

To add an upstream to the org: open the org → UpstreamsAdd upstream. Admins only. Org upstreams use the same fields as personal ones (name, base URL, API key, priority).

No moving upstreams between owners

There's no way to "move" an upstream between personal and org-owned today. Re-create it on the other side. Likewise, a key's scope can't be changed after minting — mint a new one with the owner you want.

Deleting an organization

Any admin can delete the org. Open the org, scroll to Danger zone, click Delete organization, and type the org's slug to confirm — the check is an exact match, not case-folded or trimmed.

Deleting removes the org's upstreams and immediately revokes every key scoped to it — for every member, not just the admin who deletes it. Usage already recorded for the org is kept: per-org usage history stays queryable after the org is gone.

The slug is reserved permanently afterwards, so nobody else can create a new organization at that URL. The one exception is the admin who performed the deletion — they can re-create an org with the same slug later.

curl -X DELETE https://api.ada.ai/me/organizations/$ORG_ID \
  -H "Authorization: Bearer $JWT"
# → { "status": "deleted", "revoked_keys": 4 }

There is no undo

Deletion is a hard delete with no ownership transfer. Removing a member from an org immediately revokes that member's keys for that org; personal keys, or keys scoped to a different org, are unaffected.

Limits (v1)

  • A key resolves against exactly one owner, fixed at mint time. There's no way to scope a key to more than one org, or to both a personal and an org pool at once — mint separate keys instead.
  • No SSO; sign-in is always magic-link (or password).
  • No nested organizations.
  • No billing surface yet. Per-org usage is available — see the org's Usage tab, or GET /me/organizations/{id}/usage.

On this page