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
node cli/dd.mjsZero-dependency Node CLI for images, voice, gallery, and balance.
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/images5 creditsGenerate an image from a text prompt (Fal.ai FLUX schnell).
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. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Generated image URL. |
| 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://fal.media/files/.../image.png",
"model": "fal-ai/flux/schnell",
"creditsSpent": 5,
"balance": 995
}/api/v1/voice2 creditsSynthesize 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, xai/grok-tts. Defaults to openai/tts-1. |
Response
| Field | Type | Req | Description |
|---|---|---|---|
| audioBase64 | string | yes | Base64-encoded MP3 audio (mime audio/mpeg). |
| 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...",
"model": "openai/tts-1",
"voice": "nova",
"creditsSpent": 2,
"balance": 993
}/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 Creative Studio 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 Creative Studio 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 }
}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.
Credit costs match the REST API: generate_image is 5 credits, generate_voice is 2 credits, and everything else is free. The Library tools (skills, agents, design systems) are a zero-credit adoption 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_voice2 creditsText-to-speech (mp3) via the AI Gateway. Persists to your Studio gallery and returns a durable audio URL. Charged only on success.
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.
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.
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 requires Node 18 or newer (uses built-in fetch) and has no packages to install.
Setup
export DD_API_KEY=dd_live_your_key_here
# optional, this is the default:
export DD_API_URL=https://www.developersdigest.tech
node cli/dd.mjs --helpimageGenerate an image from a prompt. Prints URL, model, credits spent, balance, and the dashboard link.
node cli/dd.mjs 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.voiceSynthesize speech and save the MP3. Prints model, voice, credits spent, balance, and the dashboard link.
node cli/dd.mjs 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, xai/grok-tts (default openai/tts-1).--out file.mp3Output path (default voice-<timestamp>.mp3).galleryList your recent assets as a table (kind, credits, created at, url).
node cli/dd.mjs gallery --limit 10--limitHow many recent assets to list.balanceConfirm your API key works and link to your live credit balance.
node cli/dd.mjs balanceErrors & 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 |
| 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 |
| 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.