From 5adede0e26235238c97271a9d5a6d00ac5354e20 Mon Sep 17 00:00:00 2001
From: "mintlify[bot]" <109931778+mintlify[bot]@users.noreply.github.com>
Date: Fri, 7 Aug 2026 05:12:42 +0000
Subject: [PATCH] docs: add BYOK for AI guide and AI session limits
---
mintlify/docs/docs.json | 3 +-
mintlify/docs/guides/ai-byok.mdx | 143 ++++++++++++++++++++++++++++
mintlify/docs/limits-and-quotas.mdx | 13 +++
3 files changed, 158 insertions(+), 1 deletion(-)
create mode 100644 mintlify/docs/guides/ai-byok.mdx
diff --git a/mintlify/docs/docs.json b/mintlify/docs/docs.json
index d6df8c058..e11bde22b 100644
--- a/mintlify/docs/docs.json
+++ b/mintlify/docs/docs.json
@@ -53,7 +53,8 @@
"guides/mail-platform",
"guides/database",
"guides/storage",
- "guides/webhooks"
+ "guides/webhooks",
+ "guides/ai-byok"
]
},
{
diff --git a/mintlify/docs/guides/ai-byok.mdx b/mintlify/docs/guides/ai-byok.mdx
new file mode 100644
index 000000000..737e88ee6
--- /dev/null
+++ b/mintlify/docs/guides/ai-byok.mdx
@@ -0,0 +1,143 @@
+---
+title: "BYOK for AI"
+description: "Bring your own Groq API key for urBackend's AI features to bypass platform session limits."
+---
+
+urBackend's AI features (like the AI Query Builder) run on Groq. By default, requests use urBackend's platform key with a per-account monthly session cap. **Bring Your Own Key (BYOK) for AI** lets you configure a personal Groq API key so your AI requests use your key directly, with no urBackend-side session cap.
+
+You can configure a key at two levels:
+
+- **Developer (account) level** — used by every project you own that does not have its own key.
+- **Project level** — used only for a single project. Overrides the developer-level key.
+
+## When to use BYOK
+
+- You are on the **Free plan** and want to use AI features without hitting the platform session cap. Free accounts must add a personal Groq key to keep using AI once the platform cap is reached.
+- You are on the **Pro plan** and have hit (or expect to hit) the 20 AI sessions per month platform cap.
+- You want to bill AI usage directly to your own Groq account and control your own model quota.
+
+## Resolution order
+
+For each AI request, urBackend picks the Groq key using this order:
+
+1. **Project-level BYOK key** (if set on the project handling the request).
+2. **Developer-level BYOK key** (if set on your account).
+3. **urBackend platform key** — falls back to the shared platform key, subject to your plan's monthly session cap.
+
+If a BYOK key is used, no urBackend-side session cap applies. Groq's own rate limits and billing still apply to your key.
+
+## Plan-tier behavior
+
+| Plan | Personal Groq key allowed? | Platform-key AI sessions per month |
+| :--- | :--- | :--- |
+| Free | Yes | 5 |
+| Pro | Yes | 20 |
+
+The monthly counter resets on the first of each calendar month (UTC).
+
+Once your plan's platform-key cap is reached, further AI requests return `403 Forbidden` until either the counter resets or you configure a BYOK key.
+
+## Get a Groq API key
+
+1. Sign in at [console.groq.com](https://console.groq.com).
+2. Open **API Keys** and create a new key.
+3. Copy the key. Groq keys start with `gsk_`.
+
+
+ Treat your Groq key like any other secret. urBackend encrypts it at rest, but anyone with the raw key can bill your Groq account.
+
+
+## Set a developer-level key
+
+Use this when you want a single key to cover every project on your account.
+
+1. Open the urBackend dashboard and go to **Settings**.
+2. Find the **AI Integration (BYOK)** section.
+3. Paste your Groq API key (must start with `gsk_`) into **Groq API Key**.
+4. Click **Save Key**.
+
+Once saved, the field shows a masked placeholder (`gsk_••••••••`) and a **Configured** badge. The raw key is never returned by the API after it is stored.
+
+To remove the key, click **Clear**. Your account will fall back to the platform key (subject to the monthly session cap).
+
+## Set a project-level key
+
+Use this when a single project needs its own key — for example, when it belongs to a different Groq billing account, or when only that project should have unlimited AI usage.
+
+1. Open the project in the dashboard.
+2. Go to **Settings → Integrations**.
+3. In the **AI Services** section, find **Groq API (BYOK)**.
+4. Paste your Groq API key and click **Save Key**.
+
+A project-level key overrides the developer-level key for that project only. Other projects on the same account continue to use the developer-level key (or the platform key, if none is set).
+
+To remove the key, click **Clear** on the project's AI Services card.
+
+## API
+
+You can also manage BYOK keys programmatically.
+
+### Set or clear the developer-level key
+
+**Endpoint:** `PUT /api/user/me/byok`
+
+Requires a logged-in dashboard session.
+
+```bash
+# Save a key
+curl -X PUT "https://api.ub.bitbros.in/api/user/me/byok" \
+ -H "Content-Type: application/json" \
+ -H "Cookie: " \
+ -d '{"groqKey": "gsk_..."}'
+
+# Clear the key
+curl -X PUT "https://api.ub.bitbros.in/api/user/me/byok" \
+ -H "Content-Type: application/json" \
+ -H "Cookie: " \
+ -d '{"groqKey": null}'
+```
+
+**Response:**
+
+```json
+{
+ "success": true,
+ "data": { "hasGroqKey": true },
+ "message": "BYOK key saved successfully"
+}
+```
+
+### Set or clear a project-level key
+
+**Endpoint:** `PUT /api/projects/:projectId/byok`
+
+Requires the project **admin** role.
+
+```bash
+curl -X PUT "https://api.ub.bitbros.in/api/projects/PROJECT_ID/byok" \
+ -H "Content-Type: application/json" \
+ -H "Cookie: " \
+ -d '{"groqKey": "gsk_..."}'
+```
+
+Pass `"groqKey": null` to clear the project's key.
+
+### Validation and errors
+
+| Condition | Status | Detail |
+| :--- | :--- | :--- |
+| Key does not start with `gsk_`, or is longer than 200 characters | `400` | `Invalid Groq API key format. Key must start with 'gsk_'.` |
+| Saving a key on a plan without BYOK for AI enabled | `403` | `Bring Your Own AI Key (Groq) is a Pro feature. Please upgrade to continue.` |
+| Project ID is not a valid ObjectId | `400` | `Invalid project ID` |
+| Project not found or caller is not an admin | `404` | `Project not found or access denied` |
+| Groq rejects the key at request time | `401` | `Invalid BYOK Groq key provided` |
+
+## How the key is stored
+
+- Keys are encrypted at rest with AES-256-GCM before being written to the database.
+- The dashboard and API never return the raw key. Responses only include a `hasGroqKey` boolean.
+- When an AI request runs, urBackend decrypts the key in memory, re-encrypts it for transit to the internal AI service, and never logs it.
+
+## Related
+
+- [Limits & Quotas](/limits-and-quotas)
diff --git a/mintlify/docs/limits-and-quotas.mdx b/mintlify/docs/limits-and-quotas.mdx
index 57a416d89..c2ecf830f 100644
--- a/mintlify/docs/limits-and-quotas.mdx
+++ b/mintlify/docs/limits-and-quotas.mdx
@@ -31,6 +31,19 @@ Files that exceed the limit return `413 Payload Too Large`.
When your project approaches the database quota, writes may be rejected with `403 Forbidden`. Monitor your usage in the Dashboard.
+## AI session limits
+
+AI features (like the AI Query Builder) that use urBackend's platform Groq key are capped per account, per calendar month:
+
+| Plan | AI sessions per month (platform key) |
+| :--- | :--- |
+| Free | 5 |
+| Pro | 20 |
+
+Requests beyond the monthly cap return `403 Forbidden` until the counter resets on the first of the next calendar month (UTC).
+
+To bypass this cap, configure a personal Groq API key at the developer or project level. Requests that resolve to a BYOK key are not counted against the platform cap. See [BYOK for AI](/guides/ai-byok).
+
## HTTP status codes
| Code | Meaning | Common cause |