/iblai-vibe-agent-api
Mirrored from
iblai/vibeΒ·skills/agents/iblai-vibe-agent-api/SKILL.md. This page is generated β edit it in the repository, not here.
Add the agent API tab -- the API keys an app uses to call the agent from
code. Scope: per organization. The tab sits in the agent's settings, but
the keys are the organization's Platform API Tokens (platform_key-scoped):
the same list shows on every agent, and a key works for any agent the key's
owner can use. The tab is a paged table (10 keys per page) with Create
New and a delete action per row. This is one tab in the agent-settings
family indexed by /iblai-vibe-agent; it shares the AgentSettingsProvider
wrapper with every other tab.
Keys -- name, created and expiry dates ("N/A" when a key never expires).
The list and the buttons need the user's /apitokens/ grants (Step 2).

Create API Key -- a name (letters, numbers, hyphens and underscores) and an optional expiry date.

API Key -- Submit shows the secret once, with a copy button. It cannot be retrieved again; the list then jumps back to page 1.

Delete API Key -- the trash icon asks for confirmation. Anything using the key stops working at once.

Common setup (brand, conventions, env files, verification): see docs/skill-setup.md.
Prerequisites
- Auth set up (
/iblai-vibe-auth, or vibe-starter). AgentSettingsProviderwraps the route (/iblai-vibe-agentΒ§1).@iblai/iblai-js@^2.62.1(resolves@iblai/web-containers1.62.1). Check withpnpm why @iblai/web-containers.- A real agent UUID. Ask the user; never invent one.
- The signed-in user needs the organization's API-token grants (org admins have them).
Step 1: Check Environment
Look for iblai.env in the project root with PLATFORM, DOMAIN, and
TOKEN. If it is missing, tell the user:
"You need an iblai.env with your platform configuration. Download the
template and fill in your values:
curl -o iblai.env https://raw.githubusercontent.com/iblai/vibe/refs/heads/main/iblai.env"
Step 2: Mount AgentApiTab
The table and buttons are gated on the RBAC grants /apitokens/#list and
/apitokens/#create, read from the provider's rbacPermissions -- even with
enableRBAC={false}. Without them the tab says "You do not have permission
to view API keys" (or "No API keys found") and Create New never shows.
Load the grants and pass them to a nested provider:
// app/(app)/agents/[mentorId]/api/page.tsx
"use client";
import { useEffect, useState } from "react";
import {
AgentApiTab,
AgentSettingsProvider,
useAgentSettings,
} from "@iblai/iblai-js/web-containers/next";
import { useGetRbacPermissionsMutation } from "@iblai/iblai-js/data-layer";
export default function AgentApiPage() {
const settings = useAgentSettings();
const [grants, setGrants] = useState<object>({});
const [getRbacPermissions] = useGetRbacPermissionsMutation();
useEffect(() => {
getRbacPermissions({
requestBody: {
platform_key: settings.tenantKey,
resources: ["/apitokens/"],
},
})
.unwrap()
.then((permissions) => setGrants({ ...permissions }))
.catch(() => {});
}, [settings.tenantKey, getRbacPermissions]);
return (
<div className="flex h-full flex-col bg-white">
<AgentSettingsProvider {...settings} rbacPermissions={grants}>
<AgentApiTab />
</AgentSettingsProvider>
</div>
);
}
If your layout already loads /apitokens/ grants into the provider, mount
<AgentApiTab /> directly. To put create and delete behind a paywall or
trial check, pass executeGatedAction on the provider; the tab runs both
through it.
Step 3: Customize Labels (Optional)
The tab renders with the default agent-facing copy (AGENT_API_TAB_LABELS,
localized through the SDK's i18n). Pass a partial labels object to change
any string:
import { AgentApiTab } from "@iblai/iblai-js/web-containers/next";
<AgentApiTab
labels={{
header: { title: "API keys" },
actions: { createNew: "New key" },
}}
/>;
Label groups (ApiTabLabels): header (title, description), infoBox,
disclaimer (lineOne, lineTwo), table (column headings, emptyState,
noPermission, deleteAriaLabel, notAvailable), actions.createNew,
createModal (title, field labels, validation messages, buttons, toasts),
deleteModal (title, confirmation, warning, buttons, toasts), and
apiKeyModal (the one-time reveal: title, descriptions, copy button labels).
Step 4: Use MCP Tools for Customization
get_component_info("AgentApiTab")
get_component_info("AgentSettingsProvider")
<AgentApiTab> Props
Import from @iblai/iblai-js/web-containers/next.
| Prop | Type | Required | Description |
|---|---|---|---|
labels | DeepPartial<ApiTabLabels> | No | Override user-visible strings |
Identity, grants and the gate come from AgentSettingsProvider (tenantKey,
username, rbacPermissions, executeGatedAction).
Related Exports
From @iblai/iblai-js/web-containers/next:
AGENT_API_TAB_LABELS-- the default label bundle.AgentApiTabProps,ApiTabLabels,ApiKey-- types.
How it saves
| Action | Request |
|---|---|
| Load | GET /api/core/platform/api-tokens/?platform_key={org}&page=β¦&page_size=10 |
| Submit (create) | POST /api/core/platform/api-tokens/ with name, platform_key, and expires_in (seconds until the chosen date, rounded up to whole days; omitted for no expiry). The tab also sends username, key, created, and expires, which the server ignores |
| Delete | DELETE /api/core/platform/api-tokens/{name}?platform_key={org} |
Keys are addressed by name. Deleting the last key on a page steps back a page.
Platform data
| Hook | Purpose |
|---|---|
useGetApiKeysQuery | The paged key list |
useCreateApiKeyMutation | Create a key (returns the secret once) |
useDeleteApiKeyMutation | Delete a key by name |
useGetRbacPermissionsMutation | Load the /apitokens/ grants (Step 2) |
REST twin: /iblai-api-token
(Platform API Tokens, including mode and token-scoped policies, which this
tab does not expose).
Step 5: Verify
Run /iblai-vibe-ops-test before telling the user the work is ready, and give
every page, control and state this skill added its own checkpoint β one Playwright
test titled <ID> Β· β¦ in e2e/journeys/, listed in e2e/coverage.json;
pnpm e2e:coverage must pass:
pnpm build-- must pass with zero errors.pnpm test-- vitest must pass.- Touch test
/agents/<uuid>/apiin the browser as/iblai-vibe-ops-testsays, signed in as an org admin: the key table and Create New render; create a key, copy it, then delete it; read the console; check the phone width.
Important Notes
- Organization keys, not agent keys: creating a key here creates a Platform API Token for the whole organization, and deleting one breaks every app that uses it, whichever agent it calls.
- Shown once: the secret appears only in the reveal dialog; store it
then, server-side only (e.g.
IBLAI_API_KEYin.env.local), never in client code or git. - No table or button? The
/apitokens/grants are missing (Step 2). - Shared provider: mount
AgentSettingsProvideronce at the layout level (/iblai-vibe-agentΒ§1). The nested provider in Step 2 replacesrbacPermissionsfor this tab with the/apitokens/grants; spread in the layout's grants if you have any. - Peer deps:
sonnerand@iblai/iblai-web-mentor(pnpm add sonner @iblai/iblai-web-mentor). - Brand guidelines: BRAND.md