Developer Docs
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
The platform exposes three surfaces over the same credit-metered capabilities. Pick whichever fits how you work.
REST API
https://www.developersdigest.tech/api/v1Plain HTTP + JSON. Bearer auth. Every endpoint has a curl example below.
MCP endpoint
https://www.developersdigest.tech/api/mcpStreamable 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
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
All endpoints require a valid key or session and return plain JSON. Metered actions are charged only on success.
/api/v1/images1-6 creditsGenerate 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
| Field | Type | Req | Description |
|---|---|---|---|
| prompt | string | yes | Image description, 3 to 2000 characters. |
| size | string | no | One of square, square_hd, portrait, landscape, wide. Defaults to square_hd. |
| model | string | no | Image 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. |
| provider | string | no | Optional provider override: "gateway" (default) or "fal" (legacy, only when configured). |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Durable image URL (falls back to the ephemeral provider URL when persistence fails). |
| persisted | boolean | yes | True when the image was saved to your gallery. |
| persistError | string | no | Present when the gallery save failed; the url is then ephemeral. |
| model | string | yes | Model that produced the image. |
| creditsSpent | number | yes | Credits charged (0 for owner accounts). |
| balance | number | yes | Remaining credit balance. |
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"}'{
"url": "https://blob.../image.png",
"persisted": true,
"model": "xai/grok-imagine-image",
"creditsSpent": 1,
"balance": 999
}/api/v1/voice1 creditSynthesize speech from text via the Vercel AI Gateway.
JSON body
| Field | Type | Req | Description |
|---|---|---|---|
| text | string | yes | Text to speak, 3 to 2000 characters. |
| voice | string | no | One of alloy, echo, fable, onyx, nova, shimmer. Defaults to alloy. |
| model | string | no | One of openai/tts-1, openai/tts-1-hd. Defaults to openai/tts-1. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| audioBase64 | string | yes | Base64-encoded MP3 audio (mime audio/mpeg). |
| url | string | null | yes | Durable gallery URL for the clip, or null when persistence failed. |
| persisted | boolean | yes | True when the clip was saved to your gallery. |
| persistError | string | no | Present when the gallery save failed; play back via the audioBase64 data instead. |
| model | string | yes | TTS model used. |
| voice | string | yes | Voice used. |
| creditsSpent | number | yes | Credits charged (0 for owner accounts). |
| balance | number | yes | Remaining credit balance. |
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"}'{
"audioBase64": "SUQzBAAAAAA...",
"url": "https://blob.../voice.mp3",
"persisted": true,
"model": "openai/tts-1",
"voice": "nova",
"creditsSpent": 1,
"balance": 999
}/api/v1/text1-3 creditsNon-streaming text generation via the Vercel AI Gateway. Built for the dd CLI and scripts that want a single JSON completion back.
JSON body
| Field | Type | Req | Description |
|---|---|---|---|
| prompt | string | yes | The prompt, 1 to 24,000 characters. |
| model | string | no | Whitelisted 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). |
| system | string | no | Optional system prompt override, up to 8,000 characters. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| text | string | yes | The generated completion. |
| model | string | yes | Model that produced the text. |
| creditsSpent | number | yes | Credits charged (0 for owner accounts). |
| balance | number | yes | Remaining credit balance. |
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."}'{
"text": "- MCP is an open protocol...",
"model": "google/gemini-3.1-flash-lite",
"creditsSpent": 1,
"balance": 999
}/api/v1/video3-18 creditsGenerate 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
| Field | Type | Req | Description |
|---|---|---|---|
| prompt | string | yes | Video description, 3 to 2000 characters. |
| model | string | no | Video 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. |
| imageUrl | string | no | http(s) image URL. Required for image-to-video (i2v) models; used as the first frame by t2v models that support it. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Durable video URL. |
| model | string | yes | Model that produced the video. |
| creditsSpent | number | yes | Credits charged (0 for owner accounts). |
| balance | number | yes | Remaining credit balance. |
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"}'{
"url": "https://blob.../video.mp4",
"model": "bytedance/seedance-2.0-fast",
"creditsSpent": 8,
"balance": 992
}/api/v1/faviconsFreeResolve a company favicon across public providers (Google s2, DuckDuckGo, /favicon.ico) and report which URLs serve an image.
Query string
| Field | Type | Req | Description |
|---|---|---|---|
| domain | string | no | Explicit domain, e.g. example.com. Validated for shape. |
| q | string | no | Company name to guess a domain from (best-effort, flagged in the response). Provide domain or q. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| domain | string | yes | Resolved domain. |
| guessed | boolean | yes | True when derived from q. |
| sources | array | yes | Each candidate { provider, url, size?, ok } with ok=true when it serves an image. |
| best | string | null | yes | First provider URL that resolved, or null. |
curl "https://www.developersdigest.tech/api/v1/favicons?domain=vercel.com" \
-H "Authorization: Bearer dd_live_your_key_here"{
"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"
}/api/v1/tokens/countFreeCount tokens in a string using OpenAI BPE encodings (o200k_base by default, cl100k_base for GPT-4 / GPT-3.5).
JSON body
| Field | Type | Req | Description |
|---|---|---|---|
| text | string | yes | Text to tokenize (max 2,000,000 characters). |
| model | string | no | Model id to pick the encoding. Defaults to gpt-4o. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| tokens | number | yes | Token count. |
| model | string | yes | Model used to pick the encoding. |
| encoding | string | yes | o200k_base or cl100k_base. |
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"}'{
"tokens": 4,
"model": "gpt-4o",
"encoding": "o200k_base"
}/api/v1/pricingFreeQuery the kept-current AI model pricing and capability dataset. Built for agents that reason about cost and context before dispatching a call.
Query string
| Field | Type | Req | Description |
|---|---|---|---|
| provider | string | no | Filter by provider, e.g. anthropic. |
| family | string | no | Substring match on family, e.g. sonnet. |
| id | string | no | Exact model id, e.g. claude-sonnet-5. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| models | array | yes | Matching ModelPricing entries. |
| updatedAt | string | yes | When the dataset was last updated. |
| count | number | yes | Number of matching models. |
curl "https://www.developersdigest.tech/api/v1/pricing?provider=anthropic&family=sonnet" \
-H "Authorization: Bearer dd_live_your_key_here"{
"models": [ { "id": "claude-sonnet-5", "provider": "anthropic", "family": "sonnet", "...": "..." } ],
"updatedAt": "2026-06-01",
"count": 1
}/api/v1/meFreeIdentity and balance for the authenticated caller.
Response
| Field | Type | Req | Description |
|---|---|---|---|
| clerkId | string | yes | The caller's account id. |
| balance | number | yes | Current credit balance. |
| isOwner | boolean | yes | True when the account is never charged. |
| plan | string | yes | Current plan. |
| planRenewsAt | string | null | yes | ISO renewal date, or null. |
curl https://www.developersdigest.tech/api/v1/me \
-H "Authorization: Bearer dd_live_your_key_here"{
"clerkId": "user_xxx",
"balance": 1000,
"isOwner": false,
"plan": "pro",
"planRenewsAt": "2026-08-01T00:00:00.000Z"
}/api/v1/memoryFreeList or search your saved memories (notes and links).
Query string
| Field | Type | Req | Description |
|---|---|---|---|
| q | string | no | Search term. Omit to list all memories, newest first. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| memories | array | yes | Each { id, kind, title, body, url, meta, createdAt }. |
curl "https://www.developersdigest.tech/api/v1/memory?q=mcp" \
-H "Authorization: Bearer dd_live_your_key_here"{
"memories": [
{ "id": "mem_1", "kind": "note", "title": "MCP config", "body": "...", "url": null, "createdAt": "..." }
]
}/api/v1/memoryFreeSave a note or a link to your memory canvas.
JSON body
| Field | Type | Req | Description |
|---|---|---|---|
| kind | string | no | Either "note" (default) or "link". |
| title | string | no | Optional title. |
| body | string | no | Note text. A note needs a title or body. |
| url | string | no | Required for a link; must be an http(s) URL. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| memory | object | yes | The created memory row. Returned with HTTP 201. |
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"}'{
"memory": { "id": "mem_2", "kind": "note", "title": "MCP config", "body": "basePath is /api" }
}/api/v1/galleryFreeList your dashboard gallery assets, newest first.
Query string
| Field | Type | Req | Description |
|---|---|---|---|
| limit | number | no | Max assets to return. |
| before | string | no | ISO date cursor for pagination. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| assets | array | yes | Each { id, kind, url, name, prompt, model, contentType, creditsSpent, createdAt }. |
curl "https://www.developersdigest.tech/api/v1/gallery?limit=10" \
-H "Authorization: Bearer dd_live_your_key_here"{
"assets": [
{ "id": "a_1", "kind": "image", "url": "https://.../image.png", "creditsSpent": 5, "createdAt": "..." }
]
}/api/v1/galleryFreePersist a just-generated asset into durable Blob storage. The generating call already charged, so persisting is free.
JSON body
| Field | Type | Req | Description |
|---|---|---|---|
| kind | string | yes | Either "image" or "voice". |
| sourceUrl | string | no | For image: a fal.media / fal.run / fal.ai URL or a data:image URL, re-hosted server-side (SSRF-guarded). |
| audioBase64 | string | no | For voice: base64 MP3 bytes. |
| prompt | string | no | Prompt to record for display. |
| model | string | no | Model to record for display. |
| creditsSpent | number | no | Credits the source generation cost, echoed for display. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| asset | object | yes | The stored asset row. Returned with HTTP 201. |
curl -X POST https://www.developersdigest.tech/api/v1/gallery \
-H "Authorization: Bearer dd_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"kind":"image","sourceUrl":"https://fal.media/files/example.png","creditsSpent":5}'{
"asset": { "id": "a_2", "kind": "image", "url": "https://blob.../image.png", "creditsSpent": 5 }
}/api/v1/uploadsFreeUpload a member file (image or audio) into the dashboard gallery.
Multipart form
| Field | Type | Req | Description |
|---|---|---|---|
| file | file | yes | A single image/* or audio/* file. Max 15 MB. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| asset | object | yes | The stored asset row. Returned with HTTP 201. |
curl -X POST https://www.developersdigest.tech/api/v1/uploads \
-H "Authorization: Bearer dd_live_your_key_here" \
-F "file=@./cover.png"{
"asset": { "id": "a_3", "kind": "upload", "url": "https://blob.../cover.png", "creditsSpent": 0 }
}/api/v1/skillsFreeThe lean index of the Skill Library: slug, one-line description, and category for every skill. The entry point for progressive disclosure.
Response
| Field | Type | Req | Description |
|---|---|---|---|
| skills | array | yes | Each { slug, description, category }. |
curl https://www.developersdigest.tech/api/v1/skills{
"skills": [
{ "slug": "clerk-nextjs", "description": "Wire Clerk auth into a Next.js app.", "category": "auth" }
]
}/api/v1/skills/{slug}FreeA skill's overview manifest: identity plus the file tree (paths and purposes, not contents) and a download link.
Response
| Field | Type | Req | Description |
|---|---|---|---|
| slug | string | yes | Skill slug. |
| name | string | yes | Display name. |
| description | string | yes | One-line description. |
| category | string | yes | Skill category. |
| files | array | yes | Each { path, purpose }. Contents come from the download zip. |
| downloadUrl | string | yes | Absolute URL of the zip download. |
curl https://www.developersdigest.tech/api/v1/skills/clerk-nextjs{
"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"
}/api/v1/agentsFreeThe lean index of the first-party Agent Library: copyable Claude Code subagent definitions.
Response
| Field | Type | Req | Description |
|---|---|---|---|
| agents | array | yes | Each { slug, name, description, model, tools }. |
curl https://www.developersdigest.tech/api/v1/agents{
"agents": [
{ "slug": "code-reviewer", "name": "Code Reviewer", "model": "sonnet", "tools": ["Read", "Grep"] }
]
}/api/v1/agents/runMeteredRun 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
| Field | Type | Req | Description |
|---|---|---|---|
| agent | string | yes | Your agent's project id or slug. |
| input | string | yes | The task to send as the kickoff message. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| sessionId | string | yes | Run session id; feed it to GET /api/v1/agents/runs/{id}. |
| status | string | yes | Final run status. |
| output | string | yes | The agent's final output. |
| creditsSpent | number | yes | Credits charged for the sandbox boot (0 when a warm sandbox is reused or for owners). |
| balance | number | yes | Remaining credit balance. |
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."}'{
"sessionId": "run_abc123",
"status": "completed",
"output": "Here is the summary...",
"creditsSpent": 2,
"balance": 998
}MCP Endpoint
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
https://www.developersdigest.tech/api/mcpConfig (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 creditsText-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.
generate_voice1 creditText-to-speech (mp3) via the AI Gateway. Persists to your Studio gallery and returns a durable audio URL. Charged only on success.
generate_videoPer modelText-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.
count_tokensFreeCount tokens in a string using OpenAI's o200k_base encoding.
search_contentFreeSearch Developers Digest content (blog, guides, tools, videos, courses).
get_daily_briefFreeReturn the latest Developers Digest Daily Brief.
get_balanceFreeReturn the caller's credit balance and owner status.
save_memoryFreeSave a note or link to your memory canvas.
list_memoriesFreeList your saved memories, newest first.
search_memoriesFreeSearch your saved memories (case-insensitive match over title and body).
list_skillsFreeList the Skill Library: vetted, copyable SKILL.md entries. Returns slug, name, description, category. Filter by category, then call get_skill.
get_skillFreeFetch a complete SKILL.md ready to save into .claude/skills/<slug>/SKILL.md, plus metadata. Use a slug from list_skills.
get_skill_fileFreeFetch 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.
list_agentsFreeList the Agent Library: copyable Claude Code subagent definitions. Returns slug, name, description, model, tools.
get_agentFreeFetch a complete subagent definition ready to save into .claude/agents/<filename>, plus a usage snippet. Use a slug from list_agents.
list_design_systemsFreeList the DESIGN.md Library: copyable, machine-readable design contracts. Returns slug, name, description, best-for, and gradient policy.
get_design_mdFreeFetch a complete DESIGN.md contract ready to save into your project root, plus metadata. Use a slug from list_design_systems.
dd CLI
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
# 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 --helpgenerate imageGenerate an image from a prompt. Prints URL, model, credits spent, balance, and the dashboard link.
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 voiceSynthesize speech and save the MP3. Prints model, voice, credits spent, balance, and the dashboard link.
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 textOne-shot text generation (non-streaming). Prints the completion plus model, credits spent, and balance.
dd generate text "Summarize the MCP spec in three bullets."--modelWhitelisted chat model id (default google/gemini-3.1-flash-lite).skillsProgressive skill disclosure, mirroring the MCP library tools: list the index, get a manifest, pull the zip.
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/.agentsThe first-party Agent Library: list copyable Claude Code subagents, or get a full definition.
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-runRun one of your managed agents with a single task and print the buffered output. Pipe the task on stdin or pass --input.
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-logsStatus and event trace for a run session id returned by agent-run.
dd agent-logs run_abc123 --limit 20--limitOnly show the last N events.galleryList your recent assets as a table (kind, credits, created at, url).
dd gallery --limit 10--limitHow many recent assets to list.credits / whoamicredits prints your universal balance and plan; whoami adds your account id and owner flag. Both confirm your key works.
dd credits
dd whoamiErrors & Rate Limits
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.
| Status | Code | Meaning | Extra fields |
|---|---|---|---|
| 400 | bad_request | Validation failed (bad JSON, missing or out-of-range field). | - |
| 401 | unauthorized | Missing or invalid API key or session. | - |
| 402 | insufficient_credits | Not enough credits for this action. Add credits at /pricing. | balance |
| 404 | not_found | No resource for that slug or id (skills, agents, run sessions). | - |
| 429 | rate_limited | Too many requests. Slow down and retry. | retryAfterSeconds + Retry-After header |
| 500 | internal | Unexpected server error. Metered actions do not charge on failure. | - |
| 503 | not_configured | The feature is not enabled on the server (missing provider config). | - |
Error shape
{
"error": "insufficient_credits",
"message": "Not enough credits for this action. Add credits at /pricing.",
"balance": 1
}Rate limits
| Endpoint | Limit |
|---|---|
| POST /api/v1/images | 10 / 5 min |
| POST /api/v1/voice | 10 / 5 min |
| POST /api/v1/text | 20 / 5 min |
| POST /api/v1/video | 5 / 5 min |
| POST /api/v1/agents/run | 5 / 10 min |
| GET /api/v1/favicons | 30 / 5 min |
| GET /api/v1/pricing | 60 / 5 min |
| POST /api/v1/uploads | 20 / 5 min |
| MCP generate_image / generate_voice | 10 / 5 min |
A 429 includes a retryAfterSeconds field and a Retry-After header. Other /api/v1 reads (me, memory, gallery) are not separately throttled.