Skip to main content

Developer Docs

Build on the Developers Digest platform

One API key, one credit balance. Generate images and voice, count tokens, resolve favicons, query model pricing, and pull the Skill, Agent, and Design libraries - over REST, MCP, or the dd CLI.

Overview

What you can build

The platform exposes three surfaces over the same credit-metered capabilities. Pick whichever fits how you work.

REST API

https://www.developersdigest.tech/api/v1

Plain HTTP + JSON. Bearer auth. Every endpoint has a curl example below.

MCP endpoint

https://www.developersdigest.tech/api/mcp

Streamable HTTP MCP server. Drop it into any agent that speaks MCP.

dd CLI

dd generate image ...

Single-binary CLI for generation, skills, agents, and balance. Download at /dashboard/cli.

Prefer a visual workspace? The same credit-metered capabilities power Chat, Image generation, and Voice generation.

Authentication

API keys & credits

  • -Create an API key in the dashboard at /dashboard/keys. Keys are prefixed dd_live_.
  • -Send it on every request as an Authorization: Bearer dd_live_... header.
  • -A signed-in browser session also authenticates the /api/v1 REST routes; the MCP endpoint requires a real dd_live_ key (there is no session on that transport).
  • -Credits are shared with your account. Any spend from the API, MCP, or CLI draws from the same universal balance, and owner accounts are never charged.
  • -Metered actions only deduct credits on success. A provider failure returns an error and leaves your balance untouched.
curl
curl https://www.developersdigest.tech/api/v1/me \
  -H "Authorization: Bearer dd_live_your_key_here"

Create and manage keys at /dashboard/keys. Add credits at /pricing.

REST API

/api/v1 endpoints

All endpoints require a valid key or session and return plain JSON. Metered actions are charged only on success.

POST/api/v1/images1-6 credits

Generate an image from a text prompt. Models route through the Vercel AI Gateway; each model carries its own credit cost, resolved server-side.

JSON body

FieldTypeReqDescription
promptstringyesImage description, 3 to 2000 characters.
sizestringnoOne of square, square_hd, portrait, landscape, wide. Defaults to square_hd.
modelstringnoImage model id, e.g. xai/grok-imagine-image (default, 1 credit), openai/gpt-image-2 (3), google/gemini-3-pro-image (6). Invalid ids return 400 with the full list.
providerstringnoOptional provider override: "gateway" (default) or "fal" (legacy, only when configured).

Response

FieldTypeReqDescription
urlstringyesDurable image URL (falls back to the ephemeral provider URL when persistence fails).
persistedbooleanyesTrue when the image was saved to your gallery.
persistErrorstringnoPresent when the gallery save failed; the url is then ephemeral.
modelstringyesModel that produced the image.
creditsSpentnumberyesCredits charged (0 for owner accounts).
balancenumberyesRemaining credit balance.
curl
curl -X POST https://www.developersdigest.tech/api/v1/images \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"a hard-edged neutral workflow board","size":"landscape"}'
Response
{
  "url": "https://blob.../image.png",
  "persisted": true,
  "model": "xai/grok-imagine-image",
  "creditsSpent": 1,
  "balance": 999
}
  • -Rate limited to 10 requests / 5 minutes per account.
  • -Credits are deducted only after a successful generation, at the chosen model's rate.
  • -Returns 503 not_configured if image generation is not enabled on the server.
POST/api/v1/voice1 credit

Synthesize speech from text via the Vercel AI Gateway.

JSON body

FieldTypeReqDescription
textstringyesText to speak, 3 to 2000 characters.
voicestringnoOne of alloy, echo, fable, onyx, nova, shimmer. Defaults to alloy.
modelstringnoOne of openai/tts-1, openai/tts-1-hd. Defaults to openai/tts-1.

Response

FieldTypeReqDescription
audioBase64stringyesBase64-encoded MP3 audio (mime audio/mpeg).
urlstring | nullyesDurable gallery URL for the clip, or null when persistence failed.
persistedbooleanyesTrue when the clip was saved to your gallery.
persistErrorstringnoPresent when the gallery save failed; play back via the audioBase64 data instead.
modelstringyesTTS model used.
voicestringyesVoice used.
creditsSpentnumberyesCredits charged (0 for owner accounts).
balancenumberyesRemaining credit balance.
curl
curl -X POST https://www.developersdigest.tech/api/v1/voice \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"text":"Welcome to Developers Digest.","voice":"nova"}'
Response
{
  "audioBase64": "SUQzBAAAAAA...",
  "url": "https://blob.../voice.mp3",
  "persisted": true,
  "model": "openai/tts-1",
  "voice": "nova",
  "creditsSpent": 1,
  "balance": 999
}
  • -Rate limited to 10 requests / 5 minutes per account.
  • -Audio is returned as base64 JSON (not a raw audio body) so credits and balance travel with it. Wrap it in a data: URL for playback or download.
  • -Credits are deducted only after a successful generation.
POST/api/v1/text1-3 credits

Non-streaming text generation via the Vercel AI Gateway. Built for the dd CLI and scripts that want a single JSON completion back.

JSON body

FieldTypeReqDescription
promptstringyesThe prompt, 1 to 24,000 characters.
modelstringnoWhitelisted chat model id, e.g. anthropic/claude-sonnet-4.6 (2 credits) or openai/gpt-5.6-sol (3). Unknown ids fall back to the default (google/gemini-3.1-flash-lite, 1 credit).
systemstringnoOptional system prompt override, up to 8,000 characters.

Response

FieldTypeReqDescription
textstringyesThe generated completion.
modelstringyesModel that produced the text.
creditsSpentnumberyesCredits charged (0 for owner accounts).
balancenumberyesRemaining credit balance.
curl
curl -X POST https://www.developersdigest.tech/api/v1/text \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"Summarize the MCP spec in three bullets."}'
Response
{
  "text": "- MCP is an open protocol...",
  "model": "google/gemini-3.1-flash-lite",
  "creditsSpent": 1,
  "balance": 999
}
  • -Rate limited to 20 requests / 5 minutes per account.
  • -Priced by the chosen model's credit tier; credits are deducted only after a successful generation.
  • -Returns 503 not_configured if text generation is not enabled on the server.
POST/api/v1/video3-18 credits

Generate a short video from a text prompt (and an optional input image for image-to-video models). Each model carries its own credit cost.

JSON body

FieldTypeReqDescription
promptstringyesVideo description, 3 to 2000 characters.
modelstringnoVideo model id, e.g. bytedance/seedance-2.0-fast (default, 8 credits) or klingai/kling-v2.6-i2v (5). Invalid ids return 400 with the full list.
imageUrlstringnohttp(s) image URL. Required for image-to-video (i2v) models; used as the first frame by t2v models that support it.

Response

FieldTypeReqDescription
urlstringyesDurable video URL.
modelstringyesModel that produced the video.
creditsSpentnumberyesCredits charged (0 for owner accounts).
balancenumberyesRemaining credit balance.
curl
curl -X POST https://www.developersdigest.tech/api/v1/video \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"a slow pan across a neutral workflow board"}'
Response
{
  "url": "https://blob.../video.mp4",
  "model": "bytedance/seedance-2.0-fast",
  "creditsSpent": 8,
  "balance": 992
}
  • -Rate limited to 5 requests / 5 minutes per account.
  • -Generation is slow; the route polls the provider and can take up to 3 minutes. Set your client timeout accordingly.
  • -Credits are deducted only after a successful generation, at the chosen model's rate.
GET/api/v1/faviconsFree

Resolve a company favicon across public providers (Google s2, DuckDuckGo, /favicon.ico) and report which URLs serve an image.

Query string

FieldTypeReqDescription
domainstringnoExplicit domain, e.g. example.com. Validated for shape.
qstringnoCompany name to guess a domain from (best-effort, flagged in the response). Provide domain or q.

Response

FieldTypeReqDescription
domainstringyesResolved domain.
guessedbooleanyesTrue when derived from q.
sourcesarrayyesEach candidate { provider, url, size?, ok } with ok=true when it serves an image.
beststring | nullyesFirst provider URL that resolved, or null.
curl
curl "https://www.developersdigest.tech/api/v1/favicons?domain=vercel.com" \
  -H "Authorization: Bearer dd_live_your_key_here"
Response
{
  "domain": "vercel.com",
  "guessed": false,
  "sources": [
    { "provider": "google", "url": "https://www.google.com/s2/favicons?domain=vercel.com&sz=256", "size": 256, "ok": true }
  ],
  "best": "https://www.google.com/s2/favicons?domain=vercel.com&sz=64"
}
  • -Rate limited to 30 requests / 5 minutes per account.
  • -Only public provider URLs are checked and returned; image bytes are never proxied.
POST/api/v1/tokens/countFree

Count tokens in a string using OpenAI BPE encodings (o200k_base by default, cl100k_base for GPT-4 / GPT-3.5).

JSON body

FieldTypeReqDescription
textstringyesText to tokenize (max 2,000,000 characters).
modelstringnoModel id to pick the encoding. Defaults to gpt-4o.

Response

FieldTypeReqDescription
tokensnumberyesToken count.
modelstringyesModel used to pick the encoding.
encodingstringyeso200k_base or cl100k_base.
curl
curl -X POST https://www.developersdigest.tech/api/v1/tokens/count \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"text":"Count these tokens.","model":"gpt-4o"}'
Response
{
  "tokens": 4,
  "model": "gpt-4o",
  "encoding": "o200k_base"
}
GET/api/v1/pricingFree

Query the kept-current AI model pricing and capability dataset. Built for agents that reason about cost and context before dispatching a call.

Query string

FieldTypeReqDescription
providerstringnoFilter by provider, e.g. anthropic.
familystringnoSubstring match on family, e.g. sonnet.
idstringnoExact model id, e.g. claude-sonnet-5.

Response

FieldTypeReqDescription
modelsarrayyesMatching ModelPricing entries.
updatedAtstringyesWhen the dataset was last updated.
countnumberyesNumber of matching models.
curl
curl "https://www.developersdigest.tech/api/v1/pricing?provider=anthropic&family=sonnet" \
  -H "Authorization: Bearer dd_live_your_key_here"
Response
{
  "models": [ { "id": "claude-sonnet-5", "provider": "anthropic", "family": "sonnet", "...": "..." } ],
  "updatedAt": "2026-06-01",
  "count": 1
}
  • -Rate limited to 60 requests / 5 minutes per account. Filters are AND-combined and case-insensitive.
GET/api/v1/meFree

Identity and balance for the authenticated caller.

Response

FieldTypeReqDescription
clerkIdstringyesThe caller's account id.
balancenumberyesCurrent credit balance.
isOwnerbooleanyesTrue when the account is never charged.
planstringyesCurrent plan.
planRenewsAtstring | nullyesISO renewal date, or null.
curl
curl https://www.developersdigest.tech/api/v1/me \
  -H "Authorization: Bearer dd_live_your_key_here"
Response
{
  "clerkId": "user_xxx",
  "balance": 1000,
  "isOwner": false,
  "plan": "pro",
  "planRenewsAt": "2026-08-01T00:00:00.000Z"
}
GET/api/v1/memoryFree

List or search your saved memories (notes and links).

Query string

FieldTypeReqDescription
qstringnoSearch term. Omit to list all memories, newest first.

Response

FieldTypeReqDescription
memoriesarrayyesEach { id, kind, title, body, url, meta, createdAt }.
curl
curl "https://www.developersdigest.tech/api/v1/memory?q=mcp" \
  -H "Authorization: Bearer dd_live_your_key_here"
Response
{
  "memories": [
    { "id": "mem_1", "kind": "note", "title": "MCP config", "body": "...", "url": null, "createdAt": "..." }
  ]
}
POST/api/v1/memoryFree

Save a note or a link to your memory canvas.

JSON body

FieldTypeReqDescription
kindstringnoEither "note" (default) or "link".
titlestringnoOptional title.
bodystringnoNote text. A note needs a title or body.
urlstringnoRequired for a link; must be an http(s) URL.

Response

FieldTypeReqDescription
memoryobjectyesThe created memory row. Returned with HTTP 201.
curl
curl -X POST https://www.developersdigest.tech/api/v1/memory \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"kind":"note","title":"MCP config","body":"basePath is /api"}'
Response
{
  "memory": { "id": "mem_2", "kind": "note", "title": "MCP config", "body": "basePath is /api" }
}
POST/api/v1/uploadsFree

Upload a member file (image or audio) into the dashboard gallery.

Multipart form

FieldTypeReqDescription
filefileyesA single image/* or audio/* file. Max 15 MB.

Response

FieldTypeReqDescription
assetobjectyesThe stored asset row. Returned with HTTP 201.
curl
curl -X POST https://www.developersdigest.tech/api/v1/uploads \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -F "file=@./cover.png"
Response
{
  "asset": { "id": "a_3", "kind": "upload", "url": "https://blob.../cover.png", "creditsSpent": 0 }
}
  • -Rate limited to 20 uploads / 5 minutes per account.
  • -Only image/* and audio/* are accepted; the file field is required.
  • -Returns 503 not_configured when media storage is not enabled.
GET/api/v1/skillsFree

The lean index of the Skill Library: slug, one-line description, and category for every skill. The entry point for progressive disclosure.

Response

FieldTypeReqDescription
skillsarrayyesEach { slug, description, category }.
curl
curl https://www.developersdigest.tech/api/v1/skills
Response
{
  "skills": [
    { "slug": "clerk-nextjs", "description": "Wire Clerk auth into a Next.js app.", "category": "auth" }
  ]
}
  • -Public and unauthenticated: the Skill Library is open content, cacheable for an hour.
  • -Scan this cheap list, then GET /api/v1/skills/{slug} for the overview and file manifest.
GET/api/v1/skills/{slug}Free

A skill's overview manifest: identity plus the file tree (paths and purposes, not contents) and a download link.

Response

FieldTypeReqDescription
slugstringyesSkill slug.
namestringyesDisplay name.
descriptionstringyesOne-line description.
categorystringyesSkill category.
filesarrayyesEach { path, purpose }. Contents come from the download zip.
downloadUrlstringyesAbsolute URL of the zip download.
curl
curl https://www.developersdigest.tech/api/v1/skills/clerk-nextjs
Response
{
  "slug": "clerk-nextjs",
  "name": "Clerk + Next.js",
  "files": [ { "path": "SKILL.md", "purpose": "The skill overview and file manifest (this document)." } ],
  "downloadUrl": "https://www.developersdigest.tech/api/v1/skills/clerk-nextjs/download"
}
  • -Public and unauthenticated. Unknown slugs return 404 not_found.
  • -Download the full tree as a zip from /api/v1/skills/{slug}/download; it unpacks cleanly into .claude/skills/.
GET/api/v1/agentsFree

The lean index of the first-party Agent Library: copyable Claude Code subagent definitions.

Response

FieldTypeReqDescription
agentsarrayyesEach { slug, name, description, model, tools }.
curl
curl https://www.developersdigest.tech/api/v1/agents
Response
{
  "agents": [
    { "slug": "code-reviewer", "name": "Code Reviewer", "model": "sonnet", "tools": ["Read", "Grep"] }
  ]
}
  • -Public and unauthenticated: serves only the curated library, never member-authored agents.
  • -Fetch the full definition (frontmatter + system prompt) from GET /api/v1/agents/{slug}; save it into .claude/agents/.
POST/api/v1/agents/runMetered

Run one of your managed agents in a sandbox with a single input, buffered to completion. The API sibling of the dashboard run flow.

JSON body

FieldTypeReqDescription
agentstringyesYour agent's project id or slug.
inputstringyesThe task to send as the kickoff message.

Response

FieldTypeReqDescription
sessionIdstringyesRun session id; feed it to GET /api/v1/agents/runs/{id}.
statusstringyesFinal run status.
outputstringyesThe agent's final output.
creditsSpentnumberyesCredits charged for the sandbox boot (0 when a warm sandbox is reused or for owners).
balancenumberyesRemaining credit balance.
curl
curl -X POST https://www.developersdigest.tech/api/v1/agents/run \
  -H "Authorization: Bearer dd_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{"agent":"my-agent","input":"Summarize the latest changelog."}'
Response
{
  "sessionId": "run_abc123",
  "status": "completed",
  "output": "Here is the summary...",
  "creditsSpent": 2,
  "balance": 998
}
  • -Rate limited to 5 runs / 10 minutes per account.
  • -Runs your own managed agents (built in the dashboard), not the public Agent Library. Unknown agents return 404.
  • -Sandbox boot plus a buffered run can take minutes; the route caps at 5 minutes. Fetch the event trace afterwards from GET /api/v1/agents/runs/{sessionId}.

MCP Endpoint

Model Context Protocol

The Model Context Protocol endpoint lives at https://www.developersdigest.tech/api/mcp and is served over streamable HTTP via mcp-handler. It exposes the same credit-metered capabilities as the REST API as MCP tools, so agents can call them directly.

A dd_live_ API key is REQUIRED as an Authorization: Bearer header. There is no session on the MCP transport; every tool call resolves its owner from the key.

Generation tools are credit-metered: generate_image is 5 credits, generate_voice is 1 credit, and generate_video is priced per model. Everything else - search, memory, and the Library tools (skills, agents, design systems) - is free.

Beyond the tools below, the server also exposes files (list_folders, list_assets, list_files, get_file), Canvas authoring (create_canvas, create_html_asset, and friends), and slideshow tools (list_slideshows, export_slide_deck_pptx). Connect and list tools to see the full surface.

Endpoint

HTTPhttps://www.developersdigest.tech/api/mcp

Config (mcp.json)

mcp.json
{
  "mcpServers": {
    "developers-digest": {
      "type": "http",
      "url": "https://www.developersdigest.tech/api/mcp",
      "headers": {
        "Authorization": "Bearer dd_live_your_key_here"
      }
    }
  }
}

Tools

generate_image5 credits

Text-to-image via Fal.ai FLUX schnell. Persists to your Studio gallery and returns a durable Blob URL plus a dashboard link. Charged only on success.

prompt: stringsize?: enum
generate_voice1 credit

Text-to-speech (mp3) via the AI Gateway. Persists to your Studio gallery and returns a durable audio URL. Charged only on success.

text: stringvoice?: enummodel?: enum
generate_videoPer model

Text-to-video via the AI Gateway (optional imageUrl for image-to-video models). Persists to your Studio gallery and returns a durable video URL. Charged only on success at the chosen model's rate.

prompt: stringmodel?: enumimageUrl?: string
count_tokensFree

Count tokens in a string using OpenAI's o200k_base encoding.

text: string
search_contentFree

Search Developers Digest content (blog, guides, tools, videos, courses).

query: stringlimit?: number
get_daily_briefFree

Return the latest Developers Digest Daily Brief.

get_balanceFree

Return the caller's credit balance and owner status.

save_memoryFree

Save a note or link to your memory canvas.

kind?: enumtitle?: stringbody?: stringurl?: string
list_memoriesFree

List your saved memories, newest first.

limit?: number
search_memoriesFree

Search your saved memories (case-insensitive match over title and body).

q: string
list_skillsFree

List the Skill Library: vetted, copyable SKILL.md entries. Returns slug, name, description, category. Filter by category, then call get_skill.

category?: enum
get_skillFree

Fetch a complete SKILL.md ready to save into .claude/skills/<slug>/SKILL.md, plus metadata. Use a slug from list_skills.

slug: string
get_skill_fileFree

Fetch the raw contents of one file inside a skill (e.g. reference/roles.md). The on-demand tier of progressive disclosure; discover paths via get_skill first.

slug: stringpath: string
list_agentsFree

List the Agent Library: copyable Claude Code subagent definitions. Returns slug, name, description, model, tools.

get_agentFree

Fetch a complete subagent definition ready to save into .claude/agents/<filename>, plus a usage snippet. Use a slug from list_agents.

slug: string
list_design_systemsFree

List the DESIGN.md Library: copyable, machine-readable design contracts. Returns slug, name, description, best-for, and gradient policy.

get_design_mdFree

Fetch a complete DESIGN.md contract ready to save into your project root, plus metadata. Use a slug from list_design_systems.

slug: string

dd CLI

Command line

The dd CLI is a small, zero-dependency command line tool that calls the /api/v1 REST surface with your dd_live_ key, prints result URLs, and links back to the dashboard studio.

It ships as a single compiled binary for macOS, Linux, and Windows; download it from /dashboard/cli. Every command accepts --json for machine-readable output, and the CLI exits non-zero on any error so it composes cleanly in scripts.

Setup

Shell
# 1. Download the binary for your platform at https://www.developersdigest.tech/dashboard/cli
chmod +x ~/Downloads/dd && mv ~/Downloads/dd /usr/local/bin/dd

# 2. Authenticate (create a key at https://www.developersdigest.tech/dashboard/keys)
export DD_API_KEY=dd_live_your_key_here
# or persist it: ~/.config/devdigest/config.json -> { "apiKey": "dd_live_..." }

dd --help
generate image

Generate an image from a prompt. Prints URL, model, credits spent, balance, and the dashboard link.

Shell
dd generate image "packet streams over a filesystem tree" --size landscape --out hero.png
  • --sizesquare, square_hd, portrait, landscape, wide (default square_hd).
  • --out file.pngDownload the generated image to a local file.
generate voice

Synthesize speech and save the MP3. Prints model, voice, credits spent, balance, and the dashboard link.

Shell
dd generate voice "Welcome to Developers Digest." --voice nova --out intro.mp3
  • --voicealloy, echo, fable, onyx, nova, shimmer (default alloy).
  • --modelopenai/tts-1, openai/tts-1-hd (default openai/tts-1).
  • --out file.mp3Output path (default voice-<timestamp>.mp3).
generate text

One-shot text generation (non-streaming). Prints the completion plus model, credits spent, and balance.

Shell
dd generate text "Summarize the MCP spec in three bullets."
  • --modelWhitelisted chat model id (default google/gemini-3.1-flash-lite).
skills

Progressive skill disclosure, mirroring the MCP library tools: list the index, get a manifest, pull the zip.

Shell
dd skills list
dd skills get clerk-nextjs
dd skills pull clerk-nextjs --out clerk-nextjs.zip
  • --out file.zippull only: where to save the zip (default <slug>.zip). Unzips into .claude/skills/.
agents

The first-party Agent Library: list copyable Claude Code subagents, or get a full definition.

Shell
dd agents list
dd agents get code-reviewer --out code-reviewer.md
  • --out file.mdget only: save the definition as a .md you can drop into .claude/agents/.
agent-run

Run one of your managed agents with a single task and print the buffered output. Pipe the task on stdin or pass --input.

Shell
dd agent-run my-agent --input "Summarize the latest changelog."
  • --inputThe task to send. Alternatively pipe it: cat task.txt | dd agent-run my-agent.
  • --out file.jsonAlso save the full run result as JSON.
agent-logs

Status and event trace for a run session id returned by agent-run.

Shell
dd agent-logs run_abc123 --limit 20
  • --limitOnly show the last N events.
gallery

List your recent assets as a table (kind, credits, created at, url).

Shell
dd gallery --limit 10
  • --limitHow many recent assets to list.
credits / whoami

credits prints your universal balance and plan; whoami adds your account id and owner flag. Both confirm your key works.

Shell
dd credits
dd whoami

Errors & Rate Limits

Status codes & throttling

Every error uses the same shape - { error, message } - with a matching HTTP status, so any client can rely on a single format. Some errors add extra fields.

StatusCodeMeaningExtra fields
400bad_requestValidation failed (bad JSON, missing or out-of-range field).-
401unauthorizedMissing or invalid API key or session.-
402insufficient_creditsNot enough credits for this action. Add credits at /pricing.balance
404not_foundNo resource for that slug or id (skills, agents, run sessions).-
429rate_limitedToo many requests. Slow down and retry.retryAfterSeconds + Retry-After header
500internalUnexpected server error. Metered actions do not charge on failure.-
503not_configuredThe feature is not enabled on the server (missing provider config).-

Error shape

Response
{
  "error": "insufficient_credits",
  "message": "Not enough credits for this action. Add credits at /pricing.",
  "balance": 1
}

Rate limits

EndpointLimit
POST /api/v1/images10 / 5 min
POST /api/v1/voice10 / 5 min
POST /api/v1/text20 / 5 min
POST /api/v1/video5 / 5 min
POST /api/v1/agents/run5 / 10 min
GET /api/v1/favicons30 / 5 min
GET /api/v1/pricing60 / 5 min
POST /api/v1/uploads20 / 5 min
MCP generate_image / generate_voice10 / 5 min

A 429 includes a retryAfterSeconds field and a Retry-After header. Other /api/v1 reads (me, memory, gallery) are not separately throttled.