Authentication
Every request to /api requires an Authorization header with a Bearer token. You have two ways to get one.
OAuth (recommended for AI clients)
AI clients run Dynamic Client Registration on first connect, then walk the user through an OAuth consent screen. The /mcp/connect page handles this automatically. Your client receives a 30-day access token.
API key
For scripts and CI, generate a personal API key in the DesignerBox app under Account / API Keys. The key starts with apikey_ and is presented as a bearer token like any other.
Endpoint
All tool calls go to a single JSON-RPC 2.0 endpoint over HTTPS POST.
Tools
list_designs
List designs for the current team, with optional folder filter and pagination.
Arguments
limitfolderIdReturns
An object with designs: [{id, title, folderId, brandProfileId, createdAt, updatedAt}]. Up to limit results.
Example
{"jsonrpc":"2.0","method":"tools/call","id":1,
"params":{"name":"list_designs","arguments":{"limit":10}}}
get_design
Fetch full metadata for a single design including title, folder, brand profile references and creation date.
Arguments
designIdReturns
An object with full design metadata: id, title, folderId, brandProfileId, createdAt, updatedAt and any associated provider data.
Example
{"jsonrpc":"2.0","method":"tools/call","id":2,
"params":{"name":"get_design","arguments":{"designId":""}}}
search_designs
Full-text search across design titles and descriptions for the active team. Filters: limit (1-100, default 20).
Arguments
querylimitReturns
An object with designs: [{id, title, folderId, snippet, updatedAt}]. Snippet contains matching context.
Example
{"jsonrpc":"2.0","method":"tools/call","id":3,
"params":{"name":"search_designs","arguments":{"query":"logo","limit":10}}}
list_brand_profiles
Return all brand profiles for the current team with voice, themes, niche and industry fields.
Arguments
No arguments.
Returns
An object with profiles: [{id, name, brandVoice, mainThemes, primaryNiche, industry, isActive}].
Example
{"jsonrpc":"2.0","method":"tools/call","id":4,
"params":{"name":"list_brand_profiles","arguments":{}}}
list_folders
List folders in the active team workspace. Useful for targeting list_designs to a specific folder.
Arguments
No arguments.
Returns
An object with folders: [{id, name, designCount, createdAt}].
Example
{"jsonrpc":"2.0","method":"tools/call","id":5,
"params":{"name":"list_folders","arguments":{}}}
list_photo_packs
Browse available photo packs. Accepts an optional language parameter to filter category labels.
Arguments
languageReturns
An object with packs: [{id, name, category, imageCount, language}].
Example
{"jsonrpc":"2.0","method":"tools/call","id":6,
"params":{"name":"list_photo_packs","arguments":{}}}
list_teams
Return the teams the authenticated user owns or belongs to, with the currently active team flagged.
Arguments
No arguments.
Returns
An object with currentTeamId and teams: [{teamId, teamName, isCurrent}].
Example
{"jsonrpc":"2.0","method":"tools/call","id":7,
"params":{"name":"list_teams","arguments":{}}}
get_plan_limits
Read the current subscription tier and per-tier quotas (storage and AI credits). The aiCredits bucket nests monthly subscription credits, purchasedBalance from one-off credit packs, total ceiling, and remaining available. Useful before mutating tools to predict whether the call will succeed.
Arguments
No arguments.
Returns
An object with tier, isPaid, isTrial, upgradeUrl, limits.storage ({limit, current, exceeded}), limits.aiCredits ({monthly:{limit,current,exceeded}, purchasedBalance, total, available}), and creditsAvailable ({monthly, purchasedBalance, total}). For ULTRA Unlimited, limits.aiCredits.monthly.limit and limits.aiCredits.total are both -1, limits.aiCredits.available is null, and creditsAvailable.monthly and creditsAvailable.total are both null. purchasedBalance is always a number (zero when no packs).
Example
{"jsonrpc":"2.0","method":"tools/call","id":8,
"params":{"name":"get_plan_limits","arguments":{}}}
get_plan
Read plan name, billing cycle (monthly or yearly), Stripe subscription status, currency, renewal date, trial end, and seat count. Pairs with get_plan_limits which returns quota usage. Available on every plan with no AI credit cost.
Arguments
No arguments.
Returns
An object with tier, isPaid, isTrial, billingCycle (monthly or yearly or null), status (Stripe subscription status), currency, renewalDate (ISO 8601), trialEnd (ISO 8601 or null), quantity (seat count or null), cancelAtPeriodEnd, and upgradeUrl.
Example
{"jsonrpc":"2.0","method":"tools/call","id":43,
"params":{"name":"get_plan","arguments":{}}}
search_tools
Search the MCP tool catalog by free-text query, category, or intent. Returns categories, requiresScope, one-line descriptions, and matched use-case tags. Free for all plans (discovery surface).
Arguments
All optional. Call with no arguments to list all 43 tools.
querycategoryReturns
An object with totalTools, matchCount, categories: [string[]], and tools: [{name, category, requiresScope, description, useCases, matchedOn: [name|category|description|use_case]}].
Example
{"jsonrpc":"2.0","method":"tools/call","id":9,
"params":{"name":"search_tools",
"arguments":{"query":"brand profile"}}}
create_avatarPaid plan
Generate an AI avatar image from a text prompt. Returns a URL to the generated image and the task ID. Requires AI credits and a paid plan.
Arguments
promptstyleclientRequestIdReturns
An object with taskId, status, imageUrl (when ready), and creditsUsed.
Example
{"jsonrpc":"2.0","method":"tools/call","id":10,
"params":{"name":"create_avatar",
"arguments":{"prompt":"professional headshot, warm lighting"}}}
set_current_team
Switch the active team for this Bearer token. The user must be a member. Persisted on the OAuth token; in-session mutation makes it effective immediately for subsequent tools in the same conversation.
Arguments
teamIdReturns
An object with teamId, teamName, persisted (true if OAuth, false if API key) and an optional note.
Example
{"jsonrpc":"2.0","method":"tools/call","id":11,
"params":{"name":"set_current_team",
"arguments":{"teamId":"team_xxxxx"}}}
update_brand_profile
Patch the active brand profile. Allowed fields: brandVoice, mainThemes, contentGoals, contentTypes, primaryNiche, subNiches, industry, industries. Anything else is silently dropped.
Arguments
brandVoiceOther patchable fields: mainThemes, contentGoals, contentTypes, primaryNiche, subNiches, industry, industries.
Returns
An object with profileId, name, updated: [field names that were patched], and the current values of brandVoice, mainThemes, contentGoals, contentTypes, primaryNiche, industry after the patch.
Example
{"jsonrpc":"2.0","method":"tools/call","id":12,
"params":{"name":"update_brand_profile",
"arguments":{"brandVoice":["bold","minimal"]}}}
Avatars
list_avatars
List avatar generation tasks for the current user (user-scoped, not team-scoped). Optional status filter and limit (default 50, max 100).
Arguments
statuslimitExample
{"jsonrpc":"2.0","method":"tools/call","id":13,
"params":{"name":"list_avatars","arguments":{"status":"completed"}}}
get_avatar
Retrieve full detail for a single avatar task by taskUUID. Returns task state including generated images when complete. Cross-team access is rejected when teamId is resolved.
Arguments
taskUUIDExample
{"jsonrpc":"2.0","method":"tools/call","id":14,
"params":{"name":"get_avatar","arguments":{"taskUUID":""}}}
get_avatar_status
Poll an avatar task progress. Returns a slim status snapshot (status, progress, message). Use get_avatar to retrieve full detail including generated images once complete.
Arguments
taskUUIDExample
{"jsonrpc":"2.0","method":"tools/call","id":15,
"params":{"name":"get_avatar_status","arguments":{"taskUUID":""}}}
Templates
list_templates
List content templates grouped by category. Catalog-shaped (not team-scoped). Pass a language to restrict results to one locale; omit for all locales. Use get_template for the full body.
Arguments
languageExample
{"jsonrpc":"2.0","method":"tools/call","id":16,
"params":{"name":"list_templates","arguments":{"language":"en"}}}
get_template
Retrieve a single template by id or slug. Returns the template body for use as a content scaffold. One of id or slug is required.
Arguments
idslugExample
{"jsonrpc":"2.0","method":"tools/call","id":17,
"params":{"name":"get_template","arguments":{"slug":"hero-banner"}}}
Assets
list_assets
List assets (uploaded images, videos and files) for the active team. Optional filters by folder or MIME-type prefix. Use get_asset for full detail.
Arguments
folderIdpagelimittypeExample
{"jsonrpc":"2.0","method":"tools/call","id":18,
"params":{"name":"list_assets","arguments":{"type":"image","limit":20}}}
get_asset
Retrieve full detail for a single asset by ID. Cross-team access is rejected by the underlying service.
Arguments
idExample
{"jsonrpc":"2.0","method":"tools/call","id":19,
"params":{"name":"get_asset","arguments":{"id":""}}}
list_brand_assets
List brand assets (logos, fonts, palette swatches and similar) for the active team. Optional filters by brand profile, file type, category, tags or free-text search. Distinct from brand profiles, which describe voice and themes.
Arguments
brandProfileIdfileTypecategorytagssearchExample
{"jsonrpc":"2.0","method":"tools/call","id":20,
"params":{"name":"list_brand_assets","arguments":{"category":"logo"}}}
AI generation
generate_imagePaid plan
Generate one or more AI images synchronously (about 30 seconds). Costs at least 1 AI credit per image. FREE tier is blocked. Pass clientRequestId for idempotent retries within 5 minutes. Returns the generated image URLs immediately.
Arguments
promptmodelaspectRationumberResultsnegativePromptclientRequestIdExample
{"jsonrpc":"2.0","method":"tools/call","id":21,
"params":{"name":"generate_image",
"arguments":{"prompt":"sunset over the alps","aspectRatio":"16:9"}}}
generate_videoPaid plan
Submit an AI video generation task. Returns a taskUUID immediately; the task is processed asynchronously (BullMQ-backed). Use get_video_status to poll for completion. Credit cost is calculated from model and duration. FREE tier is blocked.
Arguments
promptmodeltypedurationresolutionaspectRatioinputImagenegativePromptclientRequestIdExample
{"jsonrpc":"2.0","method":"tools/call","id":22,
"params":{"name":"generate_video",
"arguments":{"prompt":"a cat surfing","model":""}}}
get_video_status
Poll a video generation task progress. Returns full task state including the final video URL when complete. Backed by a BullMQ queue (real async).
Arguments
taskUUIDExample
{"jsonrpc":"2.0","method":"tools/call","id":23,
"params":{"name":"get_video_status","arguments":{"taskUUID":""}}}
Stock photos
search_stock_photos
Search stock photos across Unsplash, Pexels and Pixabay simultaneously. Returns results from each provider plus any per-provider errors. Search-only; no list or browse.
Arguments
querypageperPageExample
{"jsonrpc":"2.0","method":"tools/call","id":24,
"params":{"name":"search_stock_photos","arguments":{"query":"mountains"}}}
Community workflows and pipelines
list_community_workflows
List published community workflows. Filter by category, sort by popular, recent or views, and scope to mine, team or all. Use get_community_workflow for the full graph.
Arguments
pagelimitcategorysortsearchfilterExample
{"jsonrpc":"2.0","method":"tools/call","id":25,
"params":{"name":"list_community_workflows","arguments":{"sort":"recent"}}}
get_community_workflow
Retrieve full detail for a community workflow including its node graph and edges. Use list_community_workflows for browsing.
Arguments
idExample
{"jsonrpc":"2.0","method":"tools/call","id":26,
"params":{"name":"get_community_workflow","arguments":{"id":""}}}
list_pipelines
List pipelines (workflow canvases) for the active team. Returns slim shape with node counts; use get_pipeline for the full graph.
Arguments
pagelimitsortExample
{"jsonrpc":"2.0","method":"tools/call","id":27,
"params":{"name":"list_pipelines","arguments":{}}}
get_pipeline
Retrieve a pipeline (workflow canvas) by ID, scoped to the active team. Returns the full node and edge graph.
Arguments
idExample
{"jsonrpc":"2.0","method":"tools/call","id":28,
"params":{"name":"get_pipeline","arguments":{"id":""}}}
list_whiteboards
List MySpace whiteboards for the current user, scoped to the active team. Whiteboard content is omitted from the list view; use the dedicated read endpoint for content.
Arguments
No arguments.
Example
{"jsonrpc":"2.0","method":"tools/call","id":29,
"params":{"name":"list_whiteboards","arguments":{}}}
Conversations and whiteboards
list_conversations
List the user AI Assistant chat conversations for the active team. Optional status filter (active or archived) and tag filter. Use get_conversation for full message history.
Arguments
statuspagelimittagsExample
{"jsonrpc":"2.0","method":"tools/call","id":30,
"params":{"name":"list_conversations","arguments":{"status":"archived"}}}
get_conversation
Retrieve a single AI Assistant conversation including its full message history. Cross-user and cross-team access is rejected by the underlying service.
Arguments
idExample
{"jsonrpc":"2.0","method":"tools/call","id":31,
"params":{"name":"get_conversation","arguments":{"id":""}}}
Galleries and skills
generate_designPaid plan
Generate a gallery design by applying a skill to a source image (image-to-image). Synchronous ~30-45s. Costs 1 AI credit per call. FREE tier is blocked. Use list_skills to discover valid skillId values. Pass clientRequestId for idempotent retries within 5 minutes.
Arguments
sourceImageUrlskillIdclientRequestIdExample
{"jsonrpc":"2.0","method":"tools/call","id":32,
"params":{"name":"generate_design",
"arguments":{"sourceImageUrl":"https://example.com/photo.jpg","skillId":""}}}
list_galleries
List AI gallery assets (designs generated via generate_design) for the active team and user. Supports pagination and an optional category filter. Returns a slim shape: assetId, assetUrl, slug, displayName, galleryCategory, createdAt.
Arguments
limitpagecategoryExample
{"jsonrpc":"2.0","method":"tools/call","id":33,
"params":{"name":"list_galleries","arguments":{"limit":10}}}
list_skills
List active skills available for generate_design. Returns skillId, name, type (image or video), group and category. Use this to discover valid skillId values before calling generate_design.
Arguments
typeExample
{"jsonrpc":"2.0","method":"tools/call","id":34,
"params":{"name":"list_skills","arguments":{"type":"image"}}}
Cinematic generation
generate_cinema_studioPaid plan
Generate cinematic AI images using a camera body, lens, focal length, aperture and aspect ratio combination. Synchronous ~30s. Costs 1 AI credit per image. FREE tier is blocked. Supply referenceImageUrl to switch to reference-image (style-transfer) mode. Pass clientRequestId for idempotent retries within 5 minutes.
Arguments
scenePromptcameraBodylensfocalLengthapertureaspectRatioimageCountreferenceImageUrlclientRequestIdExample
{"jsonrpc":"2.0","method":"tools/call","id":35,
"params":{"name":"generate_cinema_studio",
"arguments":{"scenePrompt":"a wide shot of a foggy harbour at dawn","aspectRatio":"16:9","imageCount":2}}}
Async task management
cancel_avatar_taskDestructive
Cancel a pending or in-flight avatar generation task. The service-side refund path returns previously-charged credits. Terminal-state tasks (completed or failed) cannot be cancelled; the call surfaces a structured error.
Arguments
taskUUIDExample
{"jsonrpc":"2.0","method":"tools/call","id":36,
"params":{"name":"cancel_avatar_task","arguments":{"taskUUID":""}}}
cancel_video_taskDestructive
Cancel a pending or in-flight video generation task. The service-side refund path returns previously-charged credits. Terminal-state tasks (completed or failed) cannot be cancelled; the call surfaces a structured error.
Arguments
taskUUIDExample
{"jsonrpc":"2.0","method":"tools/call","id":37,
"params":{"name":"cancel_video_task","arguments":{"taskUUID":""}}}
list_video_tasks
List video generation tasks for the current user (user-scoped, parity with list_avatars). Optional status filter (pending, processing, completed, failed, cancelled) and limit (default 20, max 100). Use get_video_status for full polling detail.
Arguments
statuslimitExample
{"jsonrpc":"2.0","method":"tools/call","id":38,
"params":{"name":"list_video_tasks","arguments":{"status":"completed"}}}
Single-fetch detail
get_brand_profile
Retrieve full detail for a single brand profile by ID. Cross-team access is rejected with a generic not-found (no existence leak). Use list_brand_profiles to enumerate IDs.
Arguments
brandProfileIdExample
{"jsonrpc":"2.0","method":"tools/call","id":39,
"params":{"name":"get_brand_profile","arguments":{"brandProfileId":""}}}
get_brand_asset
Retrieve full detail for a single brand asset by ID. Cross-team access is rejected with a generic not-found (no existence leak). Use list_brand_assets to enumerate IDs.
Arguments
brandAssetIdExample
{"jsonrpc":"2.0","method":"tools/call","id":40,
"params":{"name":"get_brand_asset","arguments":{"brandAssetId":""}}}
get_photo_pack
Retrieve a single photo-pack category including its images. Catalog-shaped (not team-scoped). Optional language code; falls back to English when the requested locale is missing.
Arguments
categoryIdlanguageExample
{"jsonrpc":"2.0","method":"tools/call","id":41,
"params":{"name":"get_photo_pack","arguments":{"categoryId":"3d-rendered-object"}}}
get_whiteboard
Retrieve a single whiteboard by ID including its full content blob. Whiteboards are user-scoped (creator-only); cross-user access is rejected with a generic not-found.
Arguments
whiteboardIdExample
{"jsonrpc":"2.0","method":"tools/call","id":42,
"params":{"name":"get_whiteboard","arguments":{"whiteboardId":""}}}
MCP Resources
Resources are read-only context the client can fetch via the MCP resources/read method. Claude pulls them at conversation start so it has account, team and brand context without you re-asking each session.
designerbox://account/summary
Plan, AI credits used / limit, design count, active team name, and folder count. Counts capped at 100 each for fast load.
designerbox://brand-profiles/active
The active brand profile for the current team. Returns LLM-relevant fields: brandVoice, mainThemes, contentGoals, contentTypes, primaryNiche, industry.
designerbox://teams/current
Current team metadata (teamId, teamName) plus totalTeamsAvailable count. Pair with list_teams + set_current_team to switch.
designerbox://recent-designs
The 10 most recent designs for the active team, pre-loaded into Claude's context so it has immediate design library awareness without a tool call.
Named workflows
Slash-menu shortcuts that orchestrate multiple tools. Pick one and let your AI assistant walk through a multi-step task with confirmation before mutating anything.
/weekly-design-batch
Read brand profile and recent designs, then propose design themes and folder targets for the coming week.
/audit-gallery
Walk recent designs via list_designs and flag items that drift from your active brand profile. Read-only.
/brand-sync
Compare designs against your active brand profile and surface gaps or stale fields. Suggests updates; you approve before anything changes.
/regenerate-with-style
Regenerate an existing design in a different style. Calls get_asset, then list_skills if needed, then generate_design.
Discovery and OAuth endpoints
Standards-compliant metadata so any MCP client can auto-configure.
GET /.well-known/oauth-protected-resource/apiRFC 9728GET /.well-known/oauth-authorization-serverRFC 8414GET /oauth/.well-known/openid-configurationOIDCPOST /oauth/regDynamic Client Registration (RFC 7591)GET /oauth/authAuthorize (PKCE-S256 required)POST /oauth/tokenToken exchange
