zuplo 7.9.5 → 7.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/ai-gateway/apps.mdx +28 -16
- package/docs/ai-gateway/custom-policies.mdx +7 -7
- package/docs/ai-gateway/custom-providers.mdx +1 -1
- package/docs/ai-gateway/fallback.mdx +5 -5
- package/docs/ai-gateway/integrations/ai-sdk.mdx +2 -2
- package/docs/ai-gateway/integrations/claude-code.mdx +41 -33
- package/docs/ai-gateway/integrations/claude-desktop.mdx +37 -34
- package/docs/ai-gateway/integrations/codex.mdx +42 -31
- package/docs/ai-gateway/integrations/github-copilot.mdx +39 -37
- package/docs/ai-gateway/integrations/goose.mdx +27 -30
- package/docs/ai-gateway/integrations/langchain.mdx +2 -2
- package/docs/ai-gateway/integrations/openai.mdx +2 -2
- package/docs/ai-gateway/jev.mdx +344 -0
- package/docs/ai-gateway/managing-apps.mdx +22 -22
- package/docs/ai-gateway/managing-pools.mdx +87 -0
- package/docs/ai-gateway/managing-providers.mdx +4 -4
- package/docs/ai-gateway/overview.mdx +38 -26
- package/docs/ai-gateway/policy-chains.mdx +7 -7
- package/docs/ai-gateway/policy-templates.mdx +22 -22
- package/docs/ai-gateway/pools.mdx +53 -0
- package/docs/ai-gateway/providers.mdx +32 -2
- package/docs/ai-gateway/source-control.mdx +2 -2
- package/docs/ai-gateway/universal-api.mdx +4 -0
- package/docs/ai-gateway/usage-limits.mdx +49 -47
- package/docs/ai-gateway/user-apps.mdx +166 -0
- package/docs/articles/accounts/roles-and-permissions.mdx +92 -63
- package/docs/concepts/ai-gateway.mdx +24 -20
- package/docs/policies/ai-gateway-akamai-firewall-inbound/doc.md +1 -1
- package/docs/policies/ai-gateway-metering-inbound/schema.json +16 -2
- package/docs/policies/ai-gateway-smart-router-inbound/doc.md +172 -29
- package/docs/policies/ai-gateway-smart-router-inbound/intro.md +4 -3
- package/docs/policies/ai-gateway-smart-router-inbound/schema.json +177 -30
- package/package.json +5 -5
- package/docs/ai-gateway/managing-teams.mdx +0 -87
- package/docs/ai-gateway/teams.mdx +0 -49
|
@@ -2,40 +2,43 @@
|
|
|
2
2
|
title: "Usage Limits & Budget Rules"
|
|
3
3
|
sidebar_label: "Usage Limits"
|
|
4
4
|
description:
|
|
5
|
-
Set spending, token, and request budgets at the gateway,
|
|
5
|
+
Set spending, token, and request budgets at the gateway, pool, and app levels,
|
|
6
6
|
and give every metadata value its own separate budget using expression rules.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Set spending, token, and request budgets for your apps,
|
|
9
|
+
Set spending, token, and request budgets for your apps, pools, and gateway to
|
|
10
10
|
control how much they can use.
|
|
11
11
|
|
|
12
12
|
## Budget Hierarchy
|
|
13
13
|
|
|
14
14
|
Limits at every level apply together. The gateway checks its own limits, parent
|
|
15
|
-
|
|
15
|
+
pool limits, and app limits. An exhausted **Block** limit rejects the request
|
|
16
16
|
unless the normal provider path uses a configured
|
|
17
17
|
[quota fallback](#when-a-limit-is-exceeded). **Warn** limits allow the request
|
|
18
18
|
and report the warning. Budgets cover these levels:
|
|
19
19
|
|
|
20
20
|
- **Gateway** - Limits across the Zuplo project (for example, $1,000/day),
|
|
21
|
-
covering all
|
|
22
|
-
- **
|
|
23
|
-
and app (for example, $500/day for the Engineering
|
|
21
|
+
covering all pools, sub-pools, and apps combined
|
|
22
|
+
- **Pools** - Limits covering the pool's own usage and every descendant sub-pool
|
|
23
|
+
and app (for example, $500/day for the Engineering pool)
|
|
24
24
|
- **Apps** - Per-app limits for granular control (for example, $10/day for a
|
|
25
25
|
hackathon app)
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
The [User App](./user-apps.mdx) isn't part of a pool. It has a per-person
|
|
28
|
+
budget, set on the **Users** tab, and gateway limits apply to it as well.
|
|
29
|
+
|
|
30
|
+
For example, a pool has a $50 monthly shared **Block** budget. App A spends $40
|
|
28
31
|
and App B spends $10. Once that usage is reflected in the budget check, both
|
|
29
|
-
apps have reached the
|
|
30
|
-
both apps receive `429 Too Many Requests`. An app outside this
|
|
31
|
-
share its $50 budget, but still has its own app,
|
|
32
|
+
apps have reached the pool's budget. Without a quota fallback, requests through
|
|
33
|
+
both apps receive `429 Too Many Requests`. An app outside this pool doesn't
|
|
34
|
+
share its $50 budget, but still has its own app, pool, and gateway limits.
|
|
32
35
|
|
|
33
36
|
<Diagram direction="vertical" height="h-80">
|
|
34
37
|
<DiagramNode id="gateway" variant="green">
|
|
35
38
|
Gateway · shared budget available
|
|
36
39
|
</DiagramNode>
|
|
37
|
-
<DiagramNode id="
|
|
38
|
-
|
|
40
|
+
<DiagramNode id="pool" variant="red">
|
|
41
|
+
Pool · spent $50 of $50 this month
|
|
39
42
|
</DiagramNode>
|
|
40
43
|
<DiagramNode id="appa" variant="red">
|
|
41
44
|
App A · spent $40
|
|
@@ -44,28 +47,28 @@ share its $50 budget, but still has its own app, team, and gateway limits.
|
|
|
44
47
|
App B · spent $10
|
|
45
48
|
</DiagramNode>
|
|
46
49
|
<DiagramNode id="other" variant="green">
|
|
47
|
-
App outside the
|
|
50
|
+
App outside the pool
|
|
48
51
|
</DiagramNode>
|
|
49
|
-
<DiagramEdge from="gateway" to="
|
|
52
|
+
<DiagramEdge from="gateway" to="pool" label="pool budget exhausted" />
|
|
50
53
|
<DiagramEdge
|
|
51
54
|
from="gateway"
|
|
52
55
|
to="other"
|
|
53
|
-
label="unaffected by this
|
|
56
|
+
label="unaffected by this pool budget"
|
|
54
57
|
/>
|
|
55
|
-
<DiagramEdge from="
|
|
56
|
-
<DiagramEdge from="
|
|
58
|
+
<DiagramEdge from="pool" to="appa" label="429 without quota fallback" />
|
|
59
|
+
<DiagramEdge from="pool" to="appb" label="429 without quota fallback" />
|
|
57
60
|
</Diagram>
|
|
58
61
|
|
|
59
|
-
App budgets can add up to more than their
|
|
60
|
-
the combined usage; increasing an app's budget doesn't increase its
|
|
61
|
-
The same rule applies to nested
|
|
62
|
+
App budgets can add up to more than their pool's budget. The pool's budget caps
|
|
63
|
+
the combined usage; increasing an app's budget doesn't increase its pool's cap.
|
|
64
|
+
The same rule applies to nested pools and the gateway root.
|
|
62
65
|
|
|
63
66
|
## Where limits are configured
|
|
64
67
|
|
|
65
68
|
| Level | Budgets | Where to configure |
|
|
66
69
|
| ------- | ----------------------- | ---------------------------------------------------------------------- |
|
|
67
70
|
| Gateway | Shared | **Settings → Usage Limits** |
|
|
68
|
-
|
|
|
71
|
+
| Pool | Shared | The pool's **Usage & Limits** tab |
|
|
69
72
|
| App | Shared and per-metadata | **Budgets and Costs** in the app's [policy chain](./policy-chains.mdx) |
|
|
70
73
|
|
|
71
74
|
Use **Budgets and Costs** to set an app's own budget.
|
|
@@ -73,7 +76,7 @@ Use **Budgets and Costs** to set an app's own budget.
|
|
|
73
76
|
:::note
|
|
74
77
|
|
|
75
78
|
New apps inherit their initial budget settings from their
|
|
76
|
-
[
|
|
79
|
+
[pool policy template](./policy-templates.mdx). To limit the pool's combined
|
|
77
80
|
usage, set a budget on **Usage & Limits**.
|
|
78
81
|
|
|
79
82
|
:::
|
|
@@ -86,7 +89,7 @@ Each budget rule defines who shares the budget and how much they can use.
|
|
|
86
89
|
|
|
87
90
|
| Scope | What it budgets |
|
|
88
91
|
| --------------- | ----------------------------------------------------------- |
|
|
89
|
-
| **Shared** | One budget for the app,
|
|
92
|
+
| **Shared** | One budget for the app, pool, or gateway |
|
|
90
93
|
| **By metadata** | A separate budget for every distinct value of an expression |
|
|
91
94
|
|
|
92
95
|
A **By metadata** rule gives each distinct expression value its own allowance.
|
|
@@ -133,11 +136,11 @@ again, doesn't reset the period's usage.
|
|
|
133
136
|
|
|
134
137
|
<Stepper>
|
|
135
138
|
|
|
136
|
-
1. Open the [Apps
|
|
137
|
-
|
|
139
|
+
1. Open the [Apps](https://portal.zuplo.com/+/account/project/ai/apps) tab and
|
|
140
|
+
select the app.
|
|
138
141
|
|
|
139
142
|
1. On the **Policies** tab, configure the **Budgets and Costs** policy (add it
|
|
140
|
-
from **Add
|
|
143
|
+
from **Add policy** if the chain doesn't have it).
|
|
141
144
|
|
|
142
145
|
1. Select **Add rule**, choose the scope, and use **Add limit** to add rows for
|
|
143
146
|
the meters and periods you want to cap. For a **By metadata** rule, enter the
|
|
@@ -149,8 +152,8 @@ again, doesn't reset the period's usage.
|
|
|
149
152
|
|
|
150
153
|
</Stepper>
|
|
151
154
|
|
|
152
|
-
The app editor shows
|
|
153
|
-
one, open the
|
|
155
|
+
The app editor shows pool and gateway budgets under **Inherited**. To change
|
|
156
|
+
one, open the pool or gateway where you set it.
|
|
154
157
|
|
|
155
158
|
### Budget expressions
|
|
156
159
|
|
|
@@ -271,19 +274,18 @@ Verdicts name their rule too. A block or warning from a **By metadata** rule
|
|
|
271
274
|
carries the expression and its `ruleId`; one from an app-wide budget carries
|
|
272
275
|
neither. That's how you tell which rule refused a request.
|
|
273
276
|
|
|
274
|
-
## Setting
|
|
277
|
+
## Setting pool and gateway limits
|
|
275
278
|
|
|
276
|
-
A
|
|
279
|
+
A pool budget covers the combined usage of its apps and sub-pools. A gateway
|
|
277
280
|
budget covers all apps in the project.
|
|
278
281
|
|
|
279
|
-
To add a shared
|
|
280
|
-
[Apps
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
the app editor.
|
|
282
|
+
To add a shared pool rule, select the pool or sub-pool in
|
|
283
|
+
[Apps](https://portal.zuplo.com/+/account/project/ai/pools), then open **Usage &
|
|
284
|
+
Limits**. To add a shared gateway rule, open **Settings → Usage Limits**. Both
|
|
285
|
+
editors use the same meter, period, amount, and action rows as the app editor.
|
|
284
286
|
|
|
285
|
-
The editor shows budgets from parent
|
|
286
|
-
To change an inherited budget, edit it on the
|
|
287
|
+
The editor shows budgets from parent pools and the gateway under **Inherited**.
|
|
288
|
+
To change an inherited budget, edit it on the pool or gateway where you created
|
|
287
289
|
it.
|
|
288
290
|
|
|
289
291
|
## When a limit is exceeded
|
|
@@ -291,7 +293,7 @@ it.
|
|
|
291
293
|
For a request continuing to a provider, an exhausted **Block** limit uses the
|
|
292
294
|
app's configured **quota fallback** model instead of blocking. See
|
|
293
295
|
[Fallback Models](./fallback.mdx), where the fallback model is selected. This
|
|
294
|
-
applies to gateway and
|
|
296
|
+
applies to gateway and pool limits as well as the app's own. The fallback's
|
|
295
297
|
usage still counts toward the limits.
|
|
296
298
|
|
|
297
299
|
Without a quota fallback on that path, the request is rejected with
|
|
@@ -314,7 +316,7 @@ Without a quota fallback on that path, the request is rejected with
|
|
|
314
316
|
```
|
|
315
317
|
|
|
316
318
|
The `scope` tells the caller which budget they hit. It is `application` when the
|
|
317
|
-
gateway, a
|
|
319
|
+
gateway, a pool, or the app exhausts a shared budget. It is `dimension` when a
|
|
318
320
|
value exhausts an expression budget. Quote the `ruleId` when raising a support
|
|
319
321
|
request.
|
|
320
322
|
|
|
@@ -330,14 +332,14 @@ the budget check doesn't replace an authentication error with a budget error.
|
|
|
330
332
|
|
|
331
333
|
:::caution{title="Budgets fail open by default"}
|
|
332
334
|
|
|
333
|
-
If a
|
|
335
|
+
If a pool or gateway budget check fails, the request can continue. However, a
|
|
334
336
|
failed check doesn't override a budget violation already detected: a cache hit
|
|
335
337
|
still returns `429` if the app's budget check has found an exhausted **Block**
|
|
336
338
|
limit.
|
|
337
339
|
|
|
338
340
|
To reject requests when **Budgets and Costs** can't complete its own checks,
|
|
339
341
|
enable **Fail closed when metering is unavailable** (`throwOnFailure`). This
|
|
340
|
-
option is off by default and doesn't change how
|
|
342
|
+
option is off by default and doesn't change how pool or gateway check failures
|
|
341
343
|
are handled.
|
|
342
344
|
|
|
343
345
|
:::
|
|
@@ -345,7 +347,7 @@ are handled.
|
|
|
345
347
|
## Propagation and accounting delays
|
|
346
348
|
|
|
347
349
|
Budget changes don't take effect immediately. After editing a budget or moving
|
|
348
|
-
an app to another
|
|
350
|
+
an app to another pool, allow time for the saved settings and usage totals to
|
|
349
351
|
update. The delay depends on your gateway's
|
|
350
352
|
[cache settings](./policy-chains.mdx#configuration-executor).
|
|
351
353
|
|
|
@@ -354,21 +356,21 @@ spending past a budget before further requests are blocked.
|
|
|
354
356
|
|
|
355
357
|
## Monitoring Usage
|
|
356
358
|
|
|
357
|
-
Each app,
|
|
359
|
+
Each app, pool, and the gateway show current usage against their limits:
|
|
358
360
|
|
|
359
|
-
1. Open the [Apps
|
|
360
|
-
|
|
361
|
+
1. Open the [Apps](https://portal.zuplo.com/+/account/project/ai/apps) tab and
|
|
362
|
+
select an app or pool
|
|
361
363
|
2. The **Overview** tab shows daily and monthly usage—spend, tokens, and
|
|
362
364
|
requests—with progress against any configured limits
|
|
363
365
|
3. The same tab's **Metrics** frame charts request count, token usage, and cost
|
|
364
366
|
over time; **View in Analytics** opens the full request-level breakdown
|
|
365
|
-
scoped to that app or
|
|
367
|
+
scoped to that app or pool
|
|
366
368
|
|
|
367
369
|
## Related Resources
|
|
368
370
|
|
|
369
371
|
- [Getting Started](../getting-started/ai-gateway/portal.mdx) - Set up your
|
|
370
372
|
first AI Gateway project with budget controls
|
|
371
|
-
- [Managing
|
|
373
|
+
- [Managing Pools](./managing-pools.mdx) - Configure pool-level budgets
|
|
372
374
|
- [Managing Apps](./managing-apps.mdx) - Configure app-level limits
|
|
373
375
|
- [Fallback Models](./fallback.mdx) - Serve a cheaper model instead of blocking
|
|
374
376
|
when a limit is exceeded
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: AI Gateway User Apps
|
|
3
|
+
sidebar_label: User Apps
|
|
4
|
+
description:
|
|
5
|
+
User Apps let people call your AI Gateway with their own personal API key,
|
|
6
|
+
each drawing from a personal budget, without creating an app for every user.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
A User App lets people call the AI Gateway with their own API key. Instead of
|
|
10
|
+
creating an [app](./apps.mdx) for every person who wants to use AI in their
|
|
11
|
+
everyday tools, everyone with access to the project calls one shared URL with a
|
|
12
|
+
personal key. The gateway knows who made each request, applies that person's
|
|
13
|
+
budget, and reports their usage.
|
|
14
|
+
|
|
15
|
+
Use an app for software and the User App for people. A support chatbot or a
|
|
16
|
+
nightly batch job is an app, with its own API key, in a [pool](./pools.mdx). An
|
|
17
|
+
engineer using Claude Code or Codex is a person, and calls the User App with a
|
|
18
|
+
personal key.
|
|
19
|
+
|
|
20
|
+
Each AI Gateway project has one User App, created for you. A new project gets it
|
|
21
|
+
right away; an existing project gets it on its next production deployment. It
|
|
22
|
+
has:
|
|
23
|
+
|
|
24
|
+
- **A URL** under `/u/`, such as
|
|
25
|
+
`https://my-gateway-main-2e18f50.zuplo.app/u/741d375d631b429293481d6d0458bb64`.
|
|
26
|
+
Everyone calls the same URL.
|
|
27
|
+
- **Personal API keys**—each person creates their own. A personal key works only
|
|
28
|
+
on the User App URL, and an app's API key doesn't work there.
|
|
29
|
+
- **A per-person budget**—an optional spending allowance, such as $50 per day,
|
|
30
|
+
that applies to each person separately.
|
|
31
|
+
- **A [policy chain](./policy-chains.mdx)**—the policies that run on every
|
|
32
|
+
request made with a personal key.
|
|
33
|
+
|
|
34
|
+
The User App isn't part of a pool. Pool budgets and policy templates apply to
|
|
35
|
+
apps; [gateway-wide usage limits](./usage-limits.mdx) apply to both.
|
|
36
|
+
|
|
37
|
+
## Setting up the User App
|
|
38
|
+
|
|
39
|
+
Only Admins set up the User App: they choose who can use it, set its budget, and
|
|
40
|
+
edit its policies. With the role-based access control (RBAC) add-on, that means
|
|
41
|
+
project or account **Admins**; Developers, Members, and AI Users can use the
|
|
42
|
+
User App but can't change its budget or policies. Without RBAC, every account
|
|
43
|
+
member is an Admin.
|
|
44
|
+
|
|
45
|
+
Admins manage the User App on the AI Gateway project's
|
|
46
|
+
[**Users**](https://portal.zuplo.com/+/account/project/ai/users) tab.
|
|
47
|
+
|
|
48
|
+
<Stepper>
|
|
49
|
+
|
|
50
|
+
1. **Give people access.** Everyone with a role on the AI Gateway project—Admin,
|
|
51
|
+
Developer, Member, or AI User—can use the User App.
|
|
52
|
+
|
|
53
|
+
With RBAC, to give someone access to the User App and nothing else, open
|
|
54
|
+
[**Settings** > **Members & Access**](https://portal.zuplo.com/+/account/project/ai/settings/members)
|
|
55
|
+
on the AI Gateway project, click **Add to project**, enter their email, and
|
|
56
|
+
choose the **AI User** role. Someone who isn't in your Zuplo account yet is
|
|
57
|
+
added to it as a **Member**. An AI User can call the User App and see their
|
|
58
|
+
own keys and usage, but not the rest of the project's configuration or anyone
|
|
59
|
+
else's usage. See
|
|
60
|
+
[Managing Project Members](../articles/accounts/managing-project-members.mdx)
|
|
61
|
+
and [Role Permissions](../articles/accounts/roles-and-permissions.mdx).
|
|
62
|
+
|
|
63
|
+
1. **Set a per-person budget.** The User App starts with no budget. Open
|
|
64
|
+
**Budgets** and set how much each person can spend **Per person per day** and
|
|
65
|
+
**Per person per month**, such as $50 and $100. Each person gets the full
|
|
66
|
+
amount, counted separately.
|
|
67
|
+
|
|
68
|
+
:::caution{title="Set a budget to limit spend"}
|
|
69
|
+
|
|
70
|
+
Until you set a budget, the gateway tracks what each person spends through
|
|
71
|
+
the User App, and **People** shows it, but nothing limits it. A budget you
|
|
72
|
+
add partway through a day or month counts what each person already spent in
|
|
73
|
+
that period.
|
|
74
|
+
|
|
75
|
+
:::
|
|
76
|
+
|
|
77
|
+
1. **Review the policies.** **Policies** edits the User App's policy chain, such
|
|
78
|
+
as which models people can use. The same policies as an app's
|
|
79
|
+
[policy chain](./policy-chains.mdx) are available.
|
|
80
|
+
|
|
81
|
+
</Stepper>
|
|
82
|
+
|
|
83
|
+
**People** lists everyone on the project, how many personal keys each person
|
|
84
|
+
has, and what each person spent today and this month. **Gateway** shows the User
|
|
85
|
+
App's name, which you can change, its configuration ID, and its URL.
|
|
86
|
+
|
|
87
|
+
### Personal budgets
|
|
88
|
+
|
|
89
|
+
To give one person a different amount from everyone else, an Admin clicks the
|
|
90
|
+
**Budget** button on the person's row in **People**. **Per day** and **Per
|
|
91
|
+
month** always appear; **Per hour** and **Per week** appear only when the User
|
|
92
|
+
App's budget limits them. For each period, choose:
|
|
93
|
+
|
|
94
|
+
- **Default**, shown with the User App's amount, such as **Default · $50**. The
|
|
95
|
+
person's limit follows the User App's amount, including when you change it
|
|
96
|
+
later.
|
|
97
|
+
- **Custom** to set an amount for this person only, such as $200 per day for a
|
|
98
|
+
heavy user. Everyone else keeps the User App's amount.
|
|
99
|
+
|
|
100
|
+
A period that has no User App amount shows **No limit**, and you can't set a
|
|
101
|
+
custom amount for it until you set one on **Budgets**. While anyone has a custom
|
|
102
|
+
amount for a period, you can't remove that period's amount from **Budgets**;
|
|
103
|
+
switch those people back to the default first.
|
|
104
|
+
|
|
105
|
+
Click **Save** to apply the change. To remove all of a person's custom amounts,
|
|
106
|
+
click **Use all defaults** and confirm. Changing a budget never resets what the
|
|
107
|
+
person has already spent in the current period.
|
|
108
|
+
|
|
109
|
+
## Using the User App
|
|
110
|
+
|
|
111
|
+
<Stepper>
|
|
112
|
+
|
|
113
|
+
1. **Create a personal API key.** Open the AI Gateway project in the Zuplo
|
|
114
|
+
Portal and go to the
|
|
115
|
+
[**Home**](https://portal.zuplo.com/+/account/project/ai/home) tab. Under
|
|
116
|
+
**My API keys**, click **New key**, give it a name such as `Laptop CLI`, and
|
|
117
|
+
copy the key.
|
|
118
|
+
|
|
119
|
+
1. **Call the gateway.** Copy the **Gateway URL** shown at the top of the
|
|
120
|
+
**Home** tab once the gateway has a production deployment—the User App's
|
|
121
|
+
`/u/` URL—and use it with your personal key in place of the provider's base
|
|
122
|
+
URL and API key. The **Home** tab also shows setup steps for common tools
|
|
123
|
+
such as Claude Code and Codex.
|
|
124
|
+
|
|
125
|
+
</Stepper>
|
|
126
|
+
|
|
127
|
+
For example, to call the Chat Completions endpoint with `curl`:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
curl https://my-gateway-main-2e18f50.zuplo.app/u/741d375d631b429293481d6d0458bb64/v1/chat/completions \
|
|
131
|
+
-H "Authorization: Bearer $ZUPLO_PERSONAL_KEY" \
|
|
132
|
+
-H "Content-Type: application/json" \
|
|
133
|
+
-d '{
|
|
134
|
+
"model": "anthropic/claude-sonnet-5",
|
|
135
|
+
"messages": [{ "role": "user", "content": "Hello" }]
|
|
136
|
+
}'
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
The User App serves the same [endpoints](./universal-api.mdx) as an app—**Chat
|
|
140
|
+
Completions**, **Responses**, and **Messages**. The integration guides for
|
|
141
|
+
[Claude Code](./integrations/claude-code.mdx),
|
|
142
|
+
[Codex](./integrations/codex.mdx),
|
|
143
|
+
[Claude Desktop](./integrations/claude-desktop.mdx),
|
|
144
|
+
[GitHub Copilot](./integrations/github-copilot.mdx), and
|
|
145
|
+
[goose](./integrations/goose.mdx) start from your Gateway URL and personal key.
|
|
146
|
+
|
|
147
|
+
The **Home** tab also shows your allowance and what you've spent against it. If
|
|
148
|
+
no budget is set, it says your requests have no personal spending limit. Once
|
|
149
|
+
you reach your allowance, the gateway refuses requests with
|
|
150
|
+
`429 Too Many Requests` until the period resets or an Admin raises your budget.
|
|
151
|
+
|
|
152
|
+
## Removing access
|
|
153
|
+
|
|
154
|
+
A personal key works only while its owner has access to the AI Gateway project.
|
|
155
|
+
When someone loses access to the project, or is removed from the Zuplo account,
|
|
156
|
+
their personal keys for that project are deleted and stop working within
|
|
157
|
+
seconds. You don't need to rotate any keys.
|
|
158
|
+
|
|
159
|
+
**Additional Resources**
|
|
160
|
+
|
|
161
|
+
- [Apps](./apps.mdx) - Apps for services and integrations, each with its own API
|
|
162
|
+
key.
|
|
163
|
+
- [Role Permissions](../articles/accounts/roles-and-permissions.mdx) - Details
|
|
164
|
+
on the AI User role and other Zuplo account and project roles.
|
|
165
|
+
- [Usage Limits](./usage-limits.mdx) - Gateway-wide limits that apply to every
|
|
166
|
+
request.
|
|
@@ -3,7 +3,7 @@ title: Role Permissions
|
|
|
3
3
|
sidebar_label: Role Permissions
|
|
4
4
|
description:
|
|
5
5
|
Compare account, project, and AI Gateway permissions for Admin, Developer,
|
|
6
|
-
Member, and
|
|
6
|
+
Member, AI User, and pool roles.
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
<EnterpriseFeature name="Role Based Access Control" />
|
|
@@ -11,8 +11,8 @@ description:
|
|
|
11
11
|
:::note
|
|
12
12
|
|
|
13
13
|
Without the role-based access control (RBAC) enterprise add-on, every user
|
|
14
|
-
invited to an account is an **Admin**. The **Developer** and **
|
|
15
|
-
distinctions below apply only when RBAC is enabled.
|
|
14
|
+
invited to an account is an **Admin**. The **Developer**, **Member**, and **AI
|
|
15
|
+
User** distinctions below apply only when RBAC is enabled.
|
|
16
16
|
|
|
17
17
|
:::
|
|
18
18
|
|
|
@@ -46,6 +46,16 @@ The following roles are available at the project level:
|
|
|
46
46
|
in a project. They can't modify production resources.
|
|
47
47
|
- **Member**: Members of a project can view resources in the project but can't
|
|
48
48
|
modify them.
|
|
49
|
+
- **AI User**: Available only on AI Gateway projects. AI Users can call the
|
|
50
|
+
project's [User App](../../ai-gateway/user-apps.mdx) with their own personal
|
|
51
|
+
API keys and see their own usage. They can't view the rest of the project's
|
|
52
|
+
configuration, other people's keys or usage, or project analytics. There is no
|
|
53
|
+
AI User role at the account level. To give someone only this access, add them
|
|
54
|
+
to the AI Gateway project with the **AI User** role from **Members & Access**.
|
|
55
|
+
Someone who isn't in the account yet joins it as a **Member**.
|
|
56
|
+
|
|
57
|
+
Every project role, and the account Admin and Developer roles, can also use the
|
|
58
|
+
User App with their own personal API keys.
|
|
49
59
|
|
|
50
60
|
## Account Role Permissions
|
|
51
61
|
|
|
@@ -60,10 +70,14 @@ account role.
|
|
|
60
70
|
| | View | ✅ | ✅ | ❌ |
|
|
61
71
|
| AI Providers | Edit | ✅ | ❌ | ❌ |
|
|
62
72
|
| | View | ✅ | ✅ | ❌ |
|
|
63
|
-
| AI
|
|
73
|
+
| AI Pools | Manage | ✅ | ❌ | ❌ |
|
|
64
74
|
| | View | ✅ | ❌ | ❌ |
|
|
65
75
|
| AI Apps | Manage | ✅ | ❌ | ❌ |
|
|
66
76
|
| | View | ✅ | ❌ | ❌ |
|
|
77
|
+
| AI User App | Edit | ✅ | ❌ | ❌ |
|
|
78
|
+
| | View | ✅ | ✅ | ❌ |
|
|
79
|
+
| Personal Keys | Edit (Own Keys) | ✅ | ✅ | ❌ |
|
|
80
|
+
| | View (Own Keys) | ✅ | ✅ | ❌ |
|
|
67
81
|
| Custom Domains | Edit | ✅ | ❌ | ❌ |
|
|
68
82
|
| | View | ✅ | ✅ | ❌ |
|
|
69
83
|
| Tunnels | Edit | ✅ | ❌ | ❌ |
|
|
@@ -82,63 +96,78 @@ account role.
|
|
|
82
96
|
The following table outlines the permissions granted directly by each Zuplo
|
|
83
97
|
project role.
|
|
84
98
|
|
|
85
|
-
| Resource | Environment | Action
|
|
86
|
-
| --------------------- | ----------- |
|
|
87
|
-
| Project | | Edit
|
|
88
|
-
| | | View
|
|
89
|
-
| AI Providers | | Edit
|
|
90
|
-
| | | View
|
|
91
|
-
| AI
|
|
92
|
-
| | | View
|
|
93
|
-
| AI Apps | | Manage
|
|
94
|
-
| | | View
|
|
95
|
-
|
|
|
96
|
-
| | | View
|
|
97
|
-
|
|
|
98
|
-
| |
|
|
99
|
-
|
|
|
100
|
-
| | |
|
|
101
|
-
| |
|
|
102
|
-
| |
|
|
103
|
-
| | |
|
|
104
|
-
|
|
|
105
|
-
| |
|
|
106
|
-
| |
|
|
107
|
-
| | |
|
|
108
|
-
|
|
|
109
|
-
| | | View
|
|
110
|
-
|
|
|
111
|
-
| | | View
|
|
112
|
-
|
|
|
113
|
-
| | | View
|
|
114
|
-
|
|
|
115
|
-
| | | View
|
|
116
|
-
|
|
|
117
|
-
| |
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
121
|
-
| |
|
|
122
|
-
|
|
|
123
|
-
|
|
|
124
|
-
| |
|
|
125
|
-
|
|
|
126
|
-
|
|
|
127
|
-
| | Preview |
|
|
128
|
-
| |
|
|
129
|
-
|
|
|
130
|
-
| | | View
|
|
131
|
-
|
|
|
132
|
-
| | | View
|
|
133
|
-
| |
|
|
134
|
-
| | | View
|
|
135
|
-
|
|
|
136
|
-
| | | View
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
99
|
+
| Resource | Environment | Action | Admin | Developer | Member | AI User |
|
|
100
|
+
| --------------------- | ----------- | --------------- | ----- | --------- | ------ | ------- |
|
|
101
|
+
| Project | | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
102
|
+
| | | View | ✅ | ✅ | ✅ | ✅ |
|
|
103
|
+
| AI Providers | | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
104
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
105
|
+
| AI Pools | | Manage | ✅ | ❌ | ❌ | ❌ |
|
|
106
|
+
| | | View | ✅ | ❌ | ❌ | ❌ |
|
|
107
|
+
| AI Apps | | Manage | ✅ | ❌ | ❌ | ❌ |
|
|
108
|
+
| | | View | ✅ | ❌ | ❌ | ❌ |
|
|
109
|
+
| AI User App | | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
110
|
+
| | | View | ✅ | ✅ | ✅ | ✅ |
|
|
111
|
+
| Personal Keys | | Edit (Own Keys) | ✅ | ✅ | ✅ | ✅ |
|
|
112
|
+
| | | View (Own Keys) | ✅ | ✅ | ✅ | ✅ |
|
|
113
|
+
| Environment | Production | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
114
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
115
|
+
| | | Deploy | ✅ | ❌ | ❌ | ❌ |
|
|
116
|
+
| | Preview | Edit | ✅ | ✅ | ❌ | ❌ |
|
|
117
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
118
|
+
| | | Deploy | ✅ | ✅ | ❌ | ❌ |
|
|
119
|
+
| | Development | Edit | ✅ | ✅ | ❌ | ❌ |
|
|
120
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
121
|
+
| | | Deploy | ✅ | ✅ | ❌ | ❌ |
|
|
122
|
+
| Environment Variables | Production | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
123
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
124
|
+
| | Preview | Edit | ✅ | ✅ | ❌ | ❌ |
|
|
125
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
126
|
+
| | Development | Edit | ✅ | ✅ | ❌ | ❌ |
|
|
127
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
128
|
+
| Source Control | N/A | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
129
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
130
|
+
| Members | N/A | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
131
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
132
|
+
| Custom Domains | N/A | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
133
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
134
|
+
| Logs | Production | View | ✅ | ✅ | ❌ | ❌ |
|
|
135
|
+
| | Preview | View | ✅ | ✅ | ✅ | ❌ |
|
|
136
|
+
| | Development | View | ✅ | ✅ | ✅ | ❌ |
|
|
137
|
+
| Builds | Production | View | ✅ | ✅ | ✅ | ❌ |
|
|
138
|
+
| | Preview | View | ✅ | ✅ | ✅ | ❌ |
|
|
139
|
+
| | Development | View | ✅ | ✅ | ✅ | ❌ |
|
|
140
|
+
| Analytics | Production | View | ✅ | ✅ | ✅ | ❌ |
|
|
141
|
+
| | Preview | View | ✅ | ✅ | ✅ | ❌ |
|
|
142
|
+
| | Development | View | ✅ | ✅ | ✅ | ❌ |
|
|
143
|
+
| API Key Buckets | Production | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
144
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
145
|
+
| | Preview | Edit | ✅ | ✅ | ❌ | ❌ |
|
|
146
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
147
|
+
| | Development | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
148
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
149
|
+
| Monetization Buckets | Production | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
150
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
151
|
+
| | Preview | Edit | ✅ | ✅ | ❌ | ❌ |
|
|
152
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
153
|
+
| | Development | Edit | ✅ | ❌ | ❌ | ❌ |
|
|
154
|
+
| | | View | ✅ | ✅ | ✅ | ❌ |
|
|
155
|
+
|
|
156
|
+
The AI Pools and AI Apps rows show project-wide access granted directly by a
|
|
157
|
+
Zuplo account or Zuplo project role. A [pool role](../../ai-gateway/pools.mdx)
|
|
158
|
+
can grant additional access to a specific pool and its apps, but only when the
|
|
159
|
+
user also has permission to view the associated Zuplo project. A pool **Admin**
|
|
160
|
+
can manage the pool's settings, members, and apps, while a pool **Member** can
|
|
143
161
|
access its apps. AI provider permissions come only from the user's Zuplo account
|
|
144
|
-
or Zuplo project role;
|
|
162
|
+
or Zuplo project role; pool membership doesn't grant provider access.
|
|
163
|
+
|
|
164
|
+
The AI User App rows cover the project's
|
|
165
|
+
[User App](../../ai-gateway/user-apps.mdx). **View** lets a user find the User
|
|
166
|
+
App URL, call it with their own personal API keys, and see their own usage and
|
|
167
|
+
allowance. **Edit** covers the User App's policies and per-person budgets.
|
|
168
|
+
**Personal Keys** covers creating and rolling a user's own keys. Users with **AI
|
|
169
|
+
User App** **Edit** can also manage other people's personal keys on the project.
|
|
170
|
+
|
|
171
|
+
Permissions accumulate. Assigning **AI User** on a project never removes access
|
|
172
|
+
that a user already has from their account role. For example, an account Admin
|
|
173
|
+
who is also a project AI User keeps full access to the project.
|