cnghockey avatar

Sats4AI - Bitcoin-Powered AI Tools

cnghockey/sats4ai-mcp-server

This is a remote MCP server that puts 40+ AI services behind Lightning Network micropayments. No API keys, no accounts, just pay per use. You get tools for image generation, video creation, text-to-speech with voice cloning, OCR, translation across 119 languages, background removal, and even SMS and email sending. It works over HTTP so there's nothing to install locally. Pair it with a Lightning wallet MCP server and your agent can autonomously pay for services as it needs them. Built on L402 protocol if you want direct API access outside MCP. Useful when you want to prototype AI workflows without signing up for a dozen services or when you're building agents that need to pay their own way.

GitHub stars
2
tools
58
transport
STDIO, HTTP
last updated
Oct 22, 2026

Install

From registry metadata
$ npx add-mcp https://sats4ai.com/api/mcp --name sats4ai

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http sats4ai https://sats4ai.com/api/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 58 tools

Verified live against the running server on Nov 6, 2026.

create_paymentCreate a Lightning invoice to pay for one AI service call. Returns JSON: { paymentId, lightningInvoice (BOLT11), amountSats, expiresAt }. Each payment covers exactly one tool call — call this once per operation. Typical flow: list_models → create_payment → check_payment_status...16 params

Create a Lightning invoice to pay for one AI service call. Returns JSON: { paymentId, lightningInvoice (BOLT11), amountSats, expiresAt }. Each payment covers exactly one tool call — call this once per operation. Typical flow: list_models → create_payment → check_payment_status...

Parameters* required
characterCountnumber
Required for epub_to_audiobook: total text characters in the book (price is per-character by voice tier, minimum 500 sats). Send the count, not the book — the file goes to epub_to_audiobook itself....
durationnumber
Required for generate_video / animate_image: duration in seconds (5-15)
durationMinutesnumber
Minutes of audio/call. Required for place_call with audioUrl (1-30); for transcribe_audio / transcribe_translate it sets the per-minute price (10 sats/min) — declare your audio length (default 1)....
fileContextstring
For generate_text: include extracted file text if attaching a file (affects price)
generate_audioboolean
Accepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render.
messagestring
Required for send_sms: message text (max 1544 chars; billed per SMS segment, so longer or accented messages cost more)
modestring
Legacy alias for generate_video: 'standard'→768p, 'pro'→2K. Prefer 'resolution'.one of standard · pro
modelIdnumber
Optional. AI model ID from list_models. Omit for default (best) model.
ocrboolean
For receive_fax: include the OCR text-extraction add-on (+200 sats). Must be set HERE at payment time — receive_fax refuses ocr=true at execution unless the charge covered it.
phoneNumberstring
Required for send_sms and place_call: phone in E.164 format (e.g., +14155550100)
promptstring
Required for generate_text: the exact prompt (price calculated from char count, locked to payment)
quantitynumber
Units to pay for when the price scales: passes for boardingpass_wallet, pages for extract_document / extract_receipt / send_fax. Default 1 — under-counting is rejected at execution with the exact p...
resolutionstring
768p (default) or 2K for generate_video / animate_image — priced by resolution × duration, native audio free; 2K is upscaled from a 768p render. 480p/720p/1080p are retired Seedance rungs, still ac...one of 768p · 2K · 480p · 720p · 1080p · 1K
systemPromptstring
For generate_text: include if using a custom system prompt (affects price)
textstring
Required for text_to_speech: the exact text to synthesize (price is per-character by tier, locked to payment)
toolName*string
Tool name to pay for (e.g., 'generate_text', 'generate_image', 'generate_video', 'send_sms', 'place_call')
create_cartPay for 2 to 10 calls with ONE Lightning invoice, up to 2,000 sats in all. Each item is { toolName, ...the same inputs create_payment takes for that tool }. The server checks and prices EVERY item first: one bad item refuses the whole cart, with no invoice, and the error names...1 params

Pay for 2 to 10 calls with ONE Lightning invoice, up to 2,000 sats in all. Each item is { toolName, ...the same inputs create_payment takes for that tool }. The server checks and prices EVERY item first: one bad item refuses the whole cart, with no invoice, and the error names...

Parameters* required
items*array
The calls to pay for. Each item is an object with toolName and the inputs create_payment takes for that tool (for example prompt for generate_text, text and targetLanguage for translate_text).
check_payment_statusCheck whether a Lightning invoice has been paid. Returns JSON: { paid, serviceUsed, refundAllowed, readyToUse, next, state } — readyToUse=true means paid, not yet consumed, and no refund queued; next says what to do. state is unpaid, paid, delivered, held, refund-open, claimed...1 params

Check whether a Lightning invoice has been paid. Returns JSON: { paid, serviceUsed, refundAllowed, readyToUse, next, state } — readyToUse=true means paid, not yet consumed, and no refund queued; next says what to do. state is unpaid, paid, delivered, held, refund-open, claimed...

Parameters* required
paymentId*string
The paymentId returned by create_payment
generate_imageGenerate an image from a text prompt. Returns JSON with image URL. Models: Grok Imagine 2 (fast creative generation, 100 sats), Seedream 5 Pro (most permissive content policy, 150 sats at 1K / 300 at 2K), GPT Image 2.5 (ranked #1 on the Artificial Analysis text-to-image leader...6 params

Generate an image from a text prompt. Returns JSON with image URL. Models: Grok Imagine 2 (fast creative generation, 100 sats), Seedream 5 Pro (most permissive content policy, 150 sats at 1K / 300 at 2K), GPT Image 2.5 (ranked #1 on the Artificial Analysis text-to-image leader...

Parameters* required
aspectRatiostring
Optional output shape, default 1:1. Same price for every shape.one of 1:1 · 16:9 · 9:16 · 4:3 · 3:4 · 3:2
imageBase64string
Optional base64 image for img2img generation
modelIdnumber
Optional. Omit for default (best) model.
paymentId*string
Valid payment ID (must be paid)
prompt*string
Text prompt describing the image
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
generate_videoGenerate cinematic video from a text prompt. Uses MiniMax H3 — top 2 on the Artificial Analysis text-to-video leaderboard — with native audio. Async — returns requestId, poll with check_job_status. 768p or 2K (2K is upscaled from a 768p render), 5-15 seconds, priced per second...8 params

Generate cinematic video from a text prompt. Uses MiniMax H3 — top 2 on the Artificial Analysis text-to-video leaderboard — with native audio. Async — returns requestId, poll with check_job_status. 768p or 2K (2K is upscaled from a 768p render), 5-15 seconds, priced per second...

Parameters* required
duration*number
Duration in seconds (5-15)
generate_audioboolean
Accepted and IGNORED — H3 audio is native and always on, at no extra cost. There is no way to request a silent render.
modelIdnumber
Optional. Omit for default model.
paymentId*string
Valid payment ID (must be paid)
prompt*string
Text prompt describing the video
reference_audiostring
Optional https URL(s) of reference audio CLIPS, 2-15 seconds each (max 3, combined <=15s). Cite them in your prompt as "Audio 1", "Audio 2" or the model has no instruction to use them. ⚠ Audio cann...
reference_imagestring
Optional https URL of a reference still for character/style consistency across shots (accepts an array, max 3). Pass the URL from generate_image. Free: does not change the price.
resolutionstring
Output resolution: 768p or 2K (2K is upscaled from a 768p render). Omitting it yields 768p — ask for 2K explicitly, and quote it at create_payment too. Retired rungs still accepted: 480p/720p→768p,...one of 768p · 2K · 480p · 720p · 1080pdefault: 768p
animate_imageAnimate a still image into cinematic video with MiniMax H3 — provide a first frame and a prompt to direct the motion. Native audio. Async — returns requestId, poll with check_job_status. 768p or 2K (2K is upscaled from a 768p render), duration 5-15 seconds, priced per second b...6 params

Animate a still image into cinematic video with MiniMax H3 — provide a first frame and a prompt to direct the motion. Native audio. Async — returns requestId, poll with check_job_status. 768p or 2K (2K is upscaled from a 768p render), duration 5-15 seconds, priced per second b...

Parameters* required
duration*number
Duration in seconds (5-15)
imageBase64*string
Base64 encoded image to animate
modelIdnumber
Optional. Omit for default model.
paymentId*string
Valid payment ID (must be paid)
prompt*string
Text prompt describing the animation
resolutionstring
Output resolution: 768p or 2K (2K is upscaled from a 768p render). Omitting it yields 768p — if you quoted 2K at create_payment, send it here too or you will be billed 2K and rendered 768p. Retired...one of 768p · 2K · 480p · 720p · 1080pdefault: 768p
check_job_statusPoll the status of an async job. Use this after calling any async tool (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call) that returns a requestId. Returns JSON: { status: 'IN_PROGRESS' | 'COMPLETED' | 'FAILED', requestId, jobType...2 params

Poll the status of an async job. Use this after calling any async tool (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call) that returns a requestId. Returns JSON: { status: 'IN_PROGRESS' | 'COMPLETED' | 'FAILED', requestId, jobType...

Parameters* required
jobType*string
Must match the async tool: video=generate_video, video-image=animate_image, image-3d=generate_3d_model, transcription=transcribe_audio, epub-audiobook=epub_to_audiobook, ai-call=ai_call. video-fal-...one of video · video-image · video-fal-standard · video-fal-pro · image-3d · transcription
requestId*string
The requestId returned by the async tool (e.g., from generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call)
get_job_resultRetrieve the final output of a completed async job. Call ONLY after check_job_status returns status='COMPLETED' — calling on a job that has not completed returns an error. Returns JSON whose shape depends on jobType: video/video-image → { videoUrl, duration }; image-3d → { mod...3 params

Retrieve the final output of a completed async job. Call ONLY after check_job_status returns status='COMPLETED' — calling on a job that has not completed returns an error. Returns JSON whose shape depends on jobType: video/video-image → { videoUrl, duration }; image-3d → { mod...

Parameters* required
jobType*string
Must match the async tool: video=generate_video, video-image=animate_image, image-3d=generate_3d_model, transcription=transcribe_audio, epub-audiobook=epub_to_audiobook, ai-call=ai_call. video-fal-...one of video · video-image · video-fal-standard · video-fal-pro · image-3d · transcription
paymentIdstring
The paymentId that bought this job. On a failed or refunded job the refund is opened either way; the claim link (lnurl_withdraw / refund_secret) is returned only when this matches — or call check_p...
requestId*string
The requestId returned by the original async tool — same ID used with check_job_status
await_resultWait for an async job to finish and return its result in ONE call — no manual polling loop. Pass the requestId + jobType from an async tool (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call). If your MCP client opened the request w...3 params

Wait for an async job to finish and return its result in ONE call — no manual polling loop. Pass the requestId + jobType from an async tool (generate_video, animate_image, generate_3d_model, transcribe_audio, epub_to_audiobook, ai_call). If your MCP client opened the request w...

Parameters* required
jobType*string
Must match the async tool that returned requestId.one of video · video-image · video-fal-standard · video-fal-pro · image-3d · transcription
paymentIdstring
Optional: the paymentId that bought this job. If its payment was refunded, the claim link comes back only when this matches — or call check_payment_status(paymentId).
requestId*string
The requestId returned by the async tool.
analyze_imageAnalyze and describe image content, answer visual questions, extract information from screenshots or photos. Uses Qwen VL — multimodal vision-language model with strong OCR, chart reading, and spatial reasoning. 21 sats per image. Pay per request with Bitcoin Lightning — no AP...4 params

Analyze and describe image content, answer visual questions, extract information from screenshots or photos. Uses Qwen VL — multimodal vision-language model with strong OCR, chart reading, and spatial reasoning. 21 sats per image. Pay per request with Bitcoin Lightning — no AP...

Parameters* required
imageBase64*string
Base64 encoded image to analyze. Single images only — for PDFs or multi-page document text use extract_document (a PDF sent here is treated as an image and may return a wrong/hallucinated result wi...
modelIdnumber
Optional. Omit for default model.
paymentId*string
Valid payment ID (must be paid)
prompt*string
Question or analysis prompt for the image
generate_textGenerate text using frontier AI language models. Pure per-character pricing (no minimum): Kimi K3 (best, ~10 chars/sat, 1M context, default), GPT-OSS-120B (standard, ~1000 chars/sat, 119 languages, best value). Rates are BTC-pegged and re-quoted hourly, so treat them as approx...8 params

Generate text using frontier AI language models. Pure per-character pricing (no minimum): Kimi K3 (best, ~10 chars/sat, 1M context, default), GPT-OSS-120B (standard, ~1000 chars/sat, 119 languages, best value). Rates are BTC-pegged and re-quoted hourly, so treat them as approx...

Parameters* required
fileContextstring
Extracted file text to include as context
fileNamestring
Name of the attached file
imageBase64string
Base64 data URI for vision analysis (best model only)
maxTokensnumber
Max tokens in responsedefault: 16384
modelIdnumber
Optional. Omit for default (best) model.
paymentId*string
Valid payment ID (must be paid)
prompt*string
The text prompt or question
systemPromptstring
Optional system prompt
generate_musicGenerate a full song with AI vocals from a style prompt plus lyrics — or an INSTRUMENTAL bed / underscore (background music under video narration, intros, outros) by sending ONLY structure tags and no words. You choose the length: 15-300 seconds at 5 sats/second (75-1500 sats)...8 params

Generate a full song with AI vocals from a style prompt plus lyrics — or an INSTRUMENTAL bed / underscore (background music under video narration, intros, outros) by sending ONLY structure tags and no words. You choose the length: 15-300 seconds at 5 sats/second (75-1500 sats)...

Parameters* required
durationinteger
Song length in seconds, 15-300. THE PRICE (5 sats/second) — must match the duration sent to create_payment. Default: 15
lyricsstring
Song lyrics with section tags (up to 3,500 chars). Each tag on its OWN line, words on the lines after it — words sharing a line with a tag are dropped. Tags: [intro], [verse], [pre-chorus], [chorus...
lyricsAboutstring
Optional, with lyricsAddon: what the lyrics should be about. Omit and the subject is inferred from your music prompt.
lyricsAddonboolean
Set true to have the lyrics written for you (+25 sats, billed on the song's own invoice). Must also be sent to create_payment.
modelIdnumber
Optional. Omit for default model.
paymentId*string
Valid payment ID (must be paid)
prompt*string
Music style with BPM, key, genre, mood, instruments (up to 2,000 chars). Example: 'E minor, 90 BPM, acoustic guitar ballad, male vocal'
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
text_to_speechText-to-speech with 3 tiers: OmniVoice Global (602+ languages including Yoruba, Bengali, Cebuano, Twi, voice design, ~106 chars/sat — use 'language' parameter with ISO code), Inworld Premium (#1 ranked TTS ELO 1217, emotion control, 40+ languages, ~16 chars/sat), Minimax Studi...8 params

Text-to-speech with 3 tiers: OmniVoice Global (602+ languages including Yoruba, Bengali, Cebuano, Twi, voice design, ~106 chars/sat — use 'language' parameter with ISO code), Inworld Premium (#1 ranked TTS ELO 1217, emotion control, 40+ languages, ~16 chars/sat), Minimax Studi...

Parameters* required
languagestring
OmniVoice tier ONLY: ISO 639 language code (646 supported). Default: 'en'. NOTE: on the Inworld/Minimax tiers this field is silently ignored — you get the chosen voice's own language (usually Engli...one of kbt · ab · abr · abn · fub · ady
modelIdnumber
Optional. 3 tiers: OmniVoice Global (602+ langs, ~106 chars/sat), Inworld Premium (#1 ranked, ~16 chars/sat), Minimax Studio (voice cloning, ~5 chars/sat). Omit for default.
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
speednumber
Speech speed multiplier (0.5-2.0)default: 1
text*string
Text to convert to speech
voicestring
Voice ID. 467 total voices. Use list_models to see available TTS models. Or paste a custom cloned voice ID. ## Minimax Studio — voice cloning from reference clip, ~5 chars/sat (332 voices) ### Ara...
voice_descriptionstring
OmniVoice only: voice-design words, one per group, separated by commas: male|female; child|teenager|young adult|middle-aged|elderly; very low|low|moderate|high|very high pitch; whisper; american|br...
transcribe_audioTranscribe audio to text with WORD-LEVEL timestamps (timestamps:'word' returns per-word start/end times — subtitle alignment, karaoke captions, cutting video to speech) or segment timestamps. Uses Mistral Transcription — high-accuracy speech recognition that handles accents, b...8 params

Transcribe audio to text with WORD-LEVEL timestamps (timestamps:'word' returns per-word start/end times — subtitle alignment, karaoke captions, cutting video to speech) or segment timestamps. Uses Mistral Transcription — high-accuracy speech recognition that handles accents, b...

Parameters* required
audioBase64*string
Base64 encoded audio file
callback_idstring
Optional correlation string echoed back in the webhook body. Max 128 chars.
callback_urlstring
Optional HTTPS webhook we POST when the job finishes (HMAC-signed). Polling still works.
diarizeboolean
Identify different speakers (default false). Forces segment granularity upstream. If the speaker-label request fails, you still get the text, and result.degraded includes 'diarization'.
languagestring
Optional. One of: detect (the default), en, zh, hi, es, ar, fr, pt, ru, de, ja, ko, it, nl. A locale tag (en-US) or the English name (French) also works; "auto" means detect.
namesarray
Optional: the names and places spoken in the audio (characters, people, towns), e.g. ["Siobhan", "Tadhg", "Chicoutimi"]. It helps the speech model spell them right. Free: the price does not change....
paymentId*string
Valid payment ID (must be paid)
timestampsstring
Timestamp granularity in result.segments. 'word' returns per-word start/end times (subtitle alignment, karaoke captions, cutting video to speech). Default 'segment'. If the timestamp request fails,...one of none · segment · word
transcribe_translateCompound endpoint — one payment turns audio in any of 13 source languages into both a transcript AND a translation in any of 119 target languages. Perfect for WhatsApp voice messages in a language you don't speak (Yoruba → English), or recording a meeting in another language a...5 params

Compound endpoint — one payment turns audio in any of 13 source languages into both a transcript AND a translation in any of 119 target languages. Perfect for WhatsApp voice messages in a language you don't speak (Yoruba → English), or recording a meeting in another language a...

Parameters* required
audioBase64*string
Base64-encoded audio file
namesarray
Optional: the names and places spoken in the audio (characters, people, towns), e.g. ["Siobhan", "Tadhg", "Chicoutimi"]. It helps the speech model spell them right. Free: the price does not change....
paymentId*string
Valid payment ID (must be paid)
sourceLanguagestring
Optional — auto-detected if omitted. Accepts ISO-639 codes for the 13 STT languages: en, zh, hi, es, ar, fr, pt, ru, de, ja, ko, it, nl. NOTE: only these 13 are transcribable — a wrong hint (or aud...
targetLanguage*string
Target language — English name (e.g. 'Spanish') or ISO-639 code (e.g. 'es', 'en-US'). 119 languages supported.
translate_epubTranslate a whole EPUB into another language and get an EPUB back. Every chapter is translated with its markup intact — headings, emphasis, footnote links, images and code stay where they were — the package language is retargeted and the table of contents is translated. 119 ta...5 params

Translate a whole EPUB into another language and get an EPUB back. Every chapter is translated with its markup intact — headings, emphasis, footnote links, images and code stay where they were — the package language is retargeted and the table of contents is translated. 119 ta...

Parameters* required
epubBase64*string
Base64-encoded EPUB (max 50 MB)
fileNamestring
Optional original filename, used to name the download.
paymentId*string
Valid payment ID (must be paid)
sourceLanguagestring
Optional source-language hint. Omit to let the model read it from the text.
targetLanguage*string
Target language — English name (e.g. 'Spanish') or ISO-639 code (e.g. 'es'). Must equal the targetLanguage the payment was quoted with.
generate_3d_modelGenerate a textured 3D GLB model from EITHER a photo OR a text prompt (provide exactly one, not both). Uses Tencent Hunyuan3D — high-fidelity geometry and PBR materials. Async — returns requestId, poll with check_job_status. 1600 sats per model. Pay per request with Bitcoin Li...4 params

Generate a textured 3D GLB model from EITHER a photo OR a text prompt (provide exactly one, not both). Uses Tencent Hunyuan3D — high-fidelity geometry and PBR materials. Async — returns requestId, poll with check_job_status. 1600 sats per model. Pay per request with Bitcoin Li...

Parameters* required
imageBase64string
Base64 encoded image (PNG, JPEG, or WEBP) for image-to-3D. Provide EITHER this OR prompt, not both.
modelIdnumber
Optional. Omit for default model.
paymentId*string
Valid payment ID (must be paid)
promptstring
Text description for text-to-3D (max 1024 chars). Provide EITHER this OR imageBase64, not both.
extract_documentExtract text from PDFs and images as clean Markdown. Uses Mistral OCR — handles complex layouts, tables, handwriting, multi-column documents, and mathematical notation. Preserves document hierarchy in structured Markdown. 10 sats/page. Pay per request with Bitcoin Lightning —...3 params

Extract text from PDFs and images as clean Markdown. Uses Mistral OCR — handles complex layouts, tables, handwriting, multi-column documents, and mathematical notation. Preserves document hierarchy in structured Markdown. 10 sats/page. Pay per request with Bitcoin Lightning —...

Parameters* required
documentBase64*string
Base64 encoded PDF or image
modelIdnumber
Optional. Omit for default model.
paymentId*string
Valid payment ID (must be paid)
convert_fileConvert files between 200+ formats: documents (PDF, DOCX, XLSX, HTML→PDF), images (PNG, JPG, WEBP, SVG), PDF first page to image (PDF→JPG, PDF→PNG), audio (MP3, WAV, FLAC), video (MP4, AVI, MOV). Industrial-grade conversion engine — preserves formatting and quality. Returns do...6 params

Convert files between 200+ formats: documents (PDF, DOCX, XLSX, HTML→PDF), images (PNG, JPG, WEBP, SVG), PDF first page to image (PDF→JPG, PDF→PNG), audio (MP3, WAV, FLAC), video (MP4, AVI, MOV). Industrial-grade conversion engine — preserves formatting and quality. Returns do...

Parameters* required
extensionFrom*string
Source format without dot (e.g., 'pdf', 'docx')
extensionTo*string
Target format without dot (e.g., 'pdf', 'docx')
fileBase64string
Base64-encoded file (provide this OR fileUrl)
fileUrlstring
Public URL to the file (provide this OR fileBase64)
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
send_emailReach anyone with an email address — useful when your task requires formal communication, sending reports, or contacting someone outside chat. No SMTP server, no domain verification needed. Plain text, max 10,000 chars body, 200 chars subject. 200 sats. Pay with Bitcoin Lightn...5 params

Reach anyone with an email address — useful when your task requires formal communication, sending reports, or contacting someone outside chat. No SMTP server, no domain verification needed. Plain text, max 10,000 chars body, 200 chars subject. 200 sats. Pay with Bitcoin Lightn...

Parameters* required
body*string
Email body text (plain text, max 10,000 characters)
paymentId*string
Valid payment ID (must be paid) No impersonation, scams, threats, harassment, credential theft, unsolicited bulk messages, or contact after an opt-out. Answering a call does not establish consent....
replyTostring
Optional reply-to email address
subject*string
Email subject (max 200 characters)
to*string
Recipient email address
clone_voiceClone a voice you own or have permission to use, from a single audio sample. Returns a reusable voice_id for text_to_speech. Requires consent=true; cloning a voice to impersonate someone is prohibited. High-fidelity reproduction capturing tone, cadence, and accent. SAMPLE REQU...5 params

Clone a voice you own or have permission to use, from a single audio sample. Returns a reusable voice_id for text_to_speech. Requires consent=true; cloning a voice to impersonate someone is prohibited. High-fidelity reproduction capturing tone, cadence, and accent. SAMPLE REQU...

Parameters* required
accuracynumber
Text validation accuracy 0-1 (default 0.7)default: 0.7
consent*boolean
Required. Set true to attest that you own this voice or have the speaker's permission to clone it. Cloning a voice to impersonate someone is prohibited (sats4ai.com/terms).
modelstring
Voice model: turbo (faster) or hd (higher quality)one of speech-02-turbo · speech-02-hddefault: speech-02-turbo
paymentId*string
Valid payment ID (must be paid)
voiceFileUrl*string
Public URL to audio file of the voice to clone. MP3, M4A or WAV, 10 seconds to 5 minutes, 20 MB max. One speaker, no background music.
edit_imageEdit an image with natural language instructions. Uses MAI-Image-2.6, ranked #3 on the Artificial Analysis image-editing leaderboard as of September 2026 — understands context, handles object addition/removal, style transfer, and inpainting. Returns JSON with image URL. 200 sa...8 params

Edit an image with natural language instructions. Uses MAI-Image-2.6, ranked #3 on the Artificial Analysis image-editing leaderboard as of September 2026 — understands context, handles object addition/removal, style transfer, and inpainting. Returns JSON with image URL. 200 sa...

Parameters* required
aspectRatiostring
Output aspect ratio (default: match_input_image, which keeps the input's shape)one of match_input_image · auto · 1:1 · 4:3 · 3:4 · 16:9default: match_input_image
imageBase64*string
Base64 encoded image to edit
outputFormatstring
Output formatone of jpg · png · webpdefault: jpg
paymentId*string
Valid payment ID (must be paid)
prompt*string
Editing instructions describing what to change
resolutionstring
Ignored: MAI-Image-2.6 has no resolution setting. Accepted for compatibility; every edit is 200 sats.one of 1K · 2K · 4Kdefault: 1K
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
returnBase64boolean
Also return the edited image as a base64 data URL (base64Image). Default false: imageUrl is the deliverable and the base64 copy is megabytes of context.default: false
merge_pdfsMerge multiple PDF files into a single document. Preserves bookmarks, links, and formatting. Returns JSON: { url } — a temporary download URL (valid ~1 hour). Minimum 2 files, no maximum. Files are concatenated in array order. 100 sats per merge regardless of file count. Use c...3 params

Merge multiple PDF files into a single document. Preserves bookmarks, links, and formatting. Returns JSON: { url } — a temporary download URL (valid ~1 hour). Minimum 2 files, no maximum. Files are concatenated in array order. 100 sats per merge regardless of file count. Use c...

Parameters* required
files*array
Array of base64-encoded PDF files (minimum 2)
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
convert_html_to_pdfConvert HTML or Markdown to a pixel-perfect PDF. Returns JSON: { url } — a temporary download URL (valid ~1 hour). Great for generating invoices, reports, receipts, or formatted documents programmatically. Supports full HTML/CSS including tables, images (base64 or URL), and in...4 params

Convert HTML or Markdown to a pixel-perfect PDF. Returns JSON: { url } — a temporary download URL (valid ~1 hour). Great for generating invoices, reports, receipts, or formatted documents programmatically. Supports full HTML/CSS including tables, images (base64 or URL), and in...

Parameters* required
formatstring
Input format (default: html)one of html · markdowndefault: html
html*string
HTML or Markdown content to convert
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
render_cardRender a typographic card — headline, versus (two columns), list, stat (one big number) or quote — as a PNG or JPEG at 1920x1080 or 2560x1440. Deterministic layout, no AI model: the text you send is exactly what appears, which no image generator can promise. Built for video ti...20 params

Render a typographic card — headline, versus (two columns), list, stat (one big number) or quote — as a PNG or JPEG at 1920x1080 or 2560x1440. Deterministic layout, no AI model: the text you send is exactly what appears, which no image generator can promise. Built for video ti...

Parameters* required
accent_lineinteger
headline: index of the line drawn in the accent colour
formatstring
Output format (default png)one of png · jpgdefault: png
itemsarray
list: 1-6 items, each up to 40 chars; the last revealed item is drawn in the accent colour
labelstring
stat: caption under the number (up to 60 chars)
leftstring
versus: left value (up to 22 chars)
left_labelstring
versus: small label over the left value (up to 28 chars)
linesarray
headline: 1-3 lines, each up to 40 characters
paymentId*string
Valid payment ID (must be paid)
revealedinteger
list: how many items are shown (default all) — render 1..N for a beat-by-beat reveal
rightstring
versus: right value, drawn in the accent colour
right_labelstring
versus: small label over the right value
show_rightboolean
versus: false renders the left column only (first beat of a two-state reveal)
sizestring
Output size (default 1920x1080)one of 1920x1080 · 2560x1440default: 1920x1080
sourcestring
quote: attribution line (up to 60 chars)
substring
stat: small line above the number, e.g. a year
textstring
quote: the quoted words (up to 30 chars)
themeobject
Optional hex colours: background, foreground, accent, muted (default: near-black ground, Bitcoin-orange accent)
titlestring
list: small caps title (up to 40 chars)
valuestring
stat: the big number (up to 12 chars), e.g. '34 Md $'
variant*string
Card layoutone of headline · versus · list · stat · quote
translate_textTranslate text across 119 languages with high accuracy. The target language picks the engine: GPT-OSS 120B by default, or a higher-scoring model (Gemini) where one measurably beats it. Auto-detects source language. Privacy-preserving: no data stored. Pricing: 1 sat per 1,000 c...5 params

Translate text across 119 languages with high accuracy. The target language picks the engine: GPT-OSS 120B by default, or a higher-scoring model (Gemini) where one measurably beats it. Auto-detects source language. Privacy-preserving: no data stored. Pricing: 1 sat per 1,000 c...

Parameters* required
modelIdnumber
Optional. Translation model is selected automatically.
paymentId*string
Valid payment ID (must be paid)
sourceLanguagestring
Source language (auto-detected if omitted). NOTE: only checked for being a known language, not against your text — a wrong but valid value (e.g. 'German' for Spanish text) is accepted and silently...
targetLanguage*string
Target language — English name ('Spanish', 'Chinese (Simplified)') or ISO-639 code / locale tag ('es', 'pt-BR'). 119 supported; full list at the GET /api/l402/translate-text endpoint.
text*string
Text to translate
multilingual_askAsk a frontier AI a question in your OWN language and get the answer back in that same language, in ONE payment. We translate the question to English, answer it with a frontier model, then translate the answer back. Two engines behind one endpoint: 119 mainstream languages use...4 params

Ask a frontier AI a question in your OWN language and get the answer back in that same language, in ONE payment. We translate the question to English, answer it with a frontier model, then translate the answer back. Two engines behind one endpoint: 119 mainstream languages use...

Parameters* required
language*string
Language to answer in. English name ('Igbo'), ISO-639 code ('ig'), or a rare-language code ('wal'). Rejected before payment if unsupported.
modelstring
Standard | Better | Best. Best is Kimi K3 and costs materially more. Must match the create_payment quote.
paymentId*string
Valid payment ID (must be paid), quoted for THIS language and tier.
question*string
Your question, in your own language. Max 4000 characters.
translate_rare_languageTranslate into 452 languages, 251 of them NOT supported by ChatGPT, Claude or Gemini (29 of those 251 measured at fair quality or better against human references) — including Bhojpuri (~50M speakers), Maithili (~34M), Egyptian Arabic (~100M), Moroccan Arabic (~30M), Chhattisga...3 params

Translate into 452 languages, 251 of them NOT supported by ChatGPT, Claude or Gemini (29 of those 251 measured at fair quality or better against human references) — including Bhojpuri (~50M speakers), Maithili (~34M), Egyptian Arabic (~100M), Moroccan Arabic (~30M), Chhattisga...

Parameters* required
paymentId*string
Valid payment ID (must be paid). Price = 50 sats + 0.002/char.
targetLanguage*string
MADLAD language code ('mag', 'arz', 'bho', 'hne') or English name ('Magahi', 'Egyptian Arabic'). Rejected before payment if unsupported.
text*string
Text to translate. Max 6000 characters.
extract_receiptExtract structured data from receipts, invoices, and financial documents. Uses a dual-model pipeline (Mistral OCR + Kimi K3) for high-accuracy extraction. Returns JSON with merchant, date, line items, totals, tax, currency, and expense category. Handles crumpled receipts, fade...2 params

Extract structured data from receipts, invoices, and financial documents. Uses a dual-model pipeline (Mistral OCR + Kimi K3) for high-accuracy extraction. Returns JSON with merchant, date, line items, totals, tax, currency, and expense category. Handles crumpled receipts, fade...

Parameters* required
documentBase64*string
Base64 encoded receipt/invoice image or PDF. NOTE: any text-bearing document is accepted — a non-receipt returns best-guess (possibly fabricated) merchant/total/line-item JSON with no error. Confir...
paymentId*string
Valid payment ID (must be paid)
boardingpass_walletTurn airline boarding passes (PDF or screenshot) into Google Wallet passes with the fields a plain scan drops — boarding zone, gate, boarding time — for a whole family in one go. Returns one save link per passenger plus a single 'add all' link. The original barcode is preserve...3 params

Turn airline boarding passes (PDF or screenshot) into Google Wallet passes with the fields a plain scan drops — boarding zone, gate, boarding time — for a whole family in one go. Returns one save link per passenger plus a single 'add all' link. The original barcode is preserve...

Parameters* required
documentBase64string
Base64 boarding pass PDF or screenshot (max 8MB). Single-file convenience form. Must contain a readable BCBP barcode — a blurry photo or non-boarding-pass is refunded, not converted.
documentsarray
Base64 boarding passes, one per file (up to 8), for a family/booking. Provide this OR documentBase64 (at least one required).
paymentId*string
Valid payment ID (must be paid). Price = 100 × number of passes.
e_signatureSend a document out for legally binding e-signature and have the signed copy emailed back. Upload the PDF, name up to 3 signers, and give the email where the signed copy should land. Flat 1000 sats per document. The request is fulfilled through an established e-sign provider....5 params

Send a document out for legally binding e-signature and have the signed copy emailed back. Upload the PDF, name up to 3 signers, and give the email where the signed copy should land. Flat 1000 sats per document. The request is fulfilled through an established e-sign provider....

Parameters* required
customerEmail*string
Your email — the signed copy is sent here once everyone has signed.
documentBase64*string
Base64-encoded PDF to be signed (a data: URI is accepted). Max 8MB. Must be a PDF.
notestring
Optional note shown to the signers.
paymentId*string
Valid payment ID (must be paid). Price = 1000 sats flat.
signers*array
1-3 signers, each with a name and email.
epub_to_audiobookConvert books (EPUB/PDF/TXT) to full audiobooks with automatic chapter detection, multi-voice narration, and optional translation to any language before narration. 3 voice tiers: OmniVoice Global (602+ langs, ~106 chars/sat), Inworld Premium (#1 ranked TTS ELO 1217, ~16 chars/...9 params

Convert books (EPUB/PDF/TXT) to full audiobooks with automatic chapter detection, multi-voice narration, and optional translation to any language before narration. 3 voice tiers: OmniVoice Global (602+ langs, ~106 chars/sat), Inworld Premium (#1 ranked TTS ELO 1217, ~16 chars/...

Parameters* required
epubBase64*string
Base64-encoded book file (EPUB, PDF, or TXT)
fileName*string
Original filename with extension (e.g., 'mybook.epub', 'document.pdf', 'story.txt'). Required to detect format.
languagestring
Narration language (e.g., English, Spanish, French). NOTE: on the default tier this only affects chapter titles / number expansion — the spoken language comes from the chosen voice. For non-English...default: English
modelIdnumber
Optional. 3 voice tiers: OmniVoice Global (602+ langs), Inworld Premium (#1 ranked), Minimax Studio (voice clone). Omit for default.
paymentId*string
Valid payment ID (must be paid)
selectedChapterIndicesarray
Chapter indices to include (0-based). Omit to auto-select content chapters. NOTE: auto-select drops front/back matter heuristically and can silently exclude a short (<200 char) wanted chapter near...
speednumber
Speech speed 0.5-2.0default: 1
translateToLanguagestring
Translate book to this language before narration. Accepts English names ('Spanish', 'Chinese (Simplified)') or ISO-639 codes / locale tags ('es', 'en-US', 'pt-BR'). Cost added to price.
voicestring
Voice ID. Must belong to the resolved tier's own voice set — Minimax: English_expressive_narrator, Wise_Woman, Deep_Voice_Man; Inworld: Ashley, Abby. OMIT to get a valid default for whichever tier...
send_smsReach a human via SMS when your task requires real-world coordination. Send to any phone number worldwide — delivery timing varies by destination. No phone plan, no SIM card, no telecom account needed. Pay with Bitcoin Lightning — no API key, no KYC, no subscription. Requires...3 params

Reach a human via SMS when your task requires real-world coordination. Send to any phone number worldwide — delivery timing varies by destination. No phone plan, no SIM card, no telecom account needed. Pay with Bitcoin Lightning — no API key, no KYC, no subscription. Requires...

Parameters* required
message*string
Message text (max 1544 chars — a short signature line is appended; billed per SMS segment)
paymentId*string
Valid payment ID (must be paid)
phoneNumber*string
Phone number in E.164 format (e.g., +14155550100). NOTE: non-+1 (international) numbers are delivered from an alphanumeric sender ID, so the recipient CANNOT reply — one-way only; for some countrie...
place_callBridge the digital-physical gap — place an automated phone call to deliver a spoken message or play audio to any number. Useful when your task requires notifying a human, delivering alerts, or reaching someone who isn't online. Pay with Bitcoin Lightning — no telecom account,...5 params

Bridge the digital-physical gap — place an automated phone call to deliver a spoken message or play audio to any number. Useful when your task requires notifying a human, delivering alerts, or reaching someone who isn't online. Pay with Bitcoin Lightning — no telecom account,...

Parameters* required
audioUrlstring
Public URL to audio file. Provide this OR message.
durationMinutesnumber
Duration in minutes (1-30). Required for audioUrl.
messagestring
Text to speak via TTS; must fit prepaid minutes including the closing spoken notice (about 12 s). Provide this OR audioUrl.
paymentId*string
Valid payment ID (must be paid)
phoneNumber*string
Phone number in E.164 format (e.g., +14155550100)
send_faxWhen your task requires a paper-trail on the other end — loan paperwork to a bank, signed contract to a notary, booking confirmation to a hotel in Japan — send a fax to any number worldwide. Two modes: 'pdf' (fetch from public URL) or 'text' (we format typed text into a PDF lo...7 params

When your task requires a paper-trail on the other end — loan paperwork to a bank, signed contract to a notary, booking confirmation to a hotel in Japan — send a fax to any number worldwide. Two modes: 'pdf' (fetch from public URL) or 'text' (we format typed text into a PDF lo...

Parameters* required
coverTextstring
Optional cover page text (mode=pdf only, adds 1 page)
mode*string
'pdf' = send PDF from pdfUrl. 'text' = generate PDF from typed text.one of pdf · text
pagesnumber
Expected page count (1-350). Used for pricing. Pass same value to create_payment as 'quantity'.
paymentId*string
Valid payment ID (must be paid)
pdfUrlstring
Required for mode=pdf: public HTTPS URL returning application/pdf
phoneNumber*string
Destination fax number in E.164 format (e.g. +14155550100)
textstring
Required for mode=text: message text to format as PDF
receive_faxWhen you're expecting a fax back — bank confirmation, court filing, signed document — open a 24h receive window at our shared number +1 320 299 1523. Matched by caller ID (last 10 digits of the sender), delivered to your email as soon as it arrives. Optional OCR add-on (+200 s...6 params

When you're expecting a fax back — bank confirmation, court filing, signed document — open a 24h receive window at our shared number +1 320 299 1523. Matched by caller ID (last 10 digits of the sender), delivered to your email as soon as it arrives. Optional OCR add-on (+200 s...

Parameters* required
callback_idstring
Optional opaque correlation string (max 128 chars). Echoed in the webhook body.
callback_urlstring
Optional HTTPS webhook URL. POSTed (HMAC-signed) when fax is delivered. Public HTTPS only — no loopback/RFC1918.
email*string
Email address to deliver the fax PDF to
fromNumber*string
Expected sender fax number in E.164 format (matched by last 10 digits of caller ID)
ocrboolean
Add OCR text extraction (+200 sats). Default: false.
paymentId*string
Valid payment ID (must be paid)
ai_callWhen your task hits a wall that requires a human — booking, negotiating, navigating IVR menus, getting information from a business — send an AI voice agent to handle the call. The agent follows your instructions, has a real two-way conversation, and returns a full transcript w...7 params

When your task hits a wall that requires a human — booking, negotiating, navigating IVR menus, getting information from a business — send an AI voice agent to handle the call. The agent follows your instructions, has a real two-way conversation, and returns a full transcript w...

Parameters* required
beginMessagestring
Optional opening line for the agent
durationMinutesnumber
Max call duration 1-10 minutes (default: 3)
languagestring
Language the agent should speak to the called party. Pass this when you know the destination's preferred language (e.g. calling a French pizzeria → fr-FR, a Japanese restaurant → ja-JP). If omitted...one of en-US · en-GB · es-ES · fr-FR · de-DE · ja-JP
paymentId*string
Valid payment ID (must be paid)
phoneNumber*string
Phone number in E.164 format (e.g., +14155550100)
refundAddressstring
Lightning address of YOUR user (for example name@wallet.com), only if the user gave you one. Never invent or guess an address: the refund is paid out at once and cannot be called back. The unused d...
task*string
Instructions for the AI agent (what to say, ask, or accomplish)
confirm_ai_callConfirm an AI call after reviewing push-back questions, optionally providing answers to missing info. Required when ai_call returns state='pending_confirm'. Uses the original payment — no new payment needed. Returns call_id for polling with check_job_status(jobType='ai-call').2 params

Confirm an AI call after reviewing push-back questions, optionally providing answers to missing info. Required when ai_call returns state='pending_confirm'. Uses the original payment — no new payment needed. Returns call_id for polling with check_job_status(jobType='ai-call').

Parameters* required
answersobject
Key-value answers to the push-back questions (keys are the question strings, values are your answers). Omit to confirm the task as-is.
sessionId*string
Session ID from the ai_call response
open_voice_bridgeOpen a phone call you drive one turn at a time: we dial, transcribe what the other side says, and speak whatever text you send. You call voice_bridge_say to talk, poll_voice_bridge to read transcripts, end_voice_bridge to hang up. ⚠ Turn-based, NOT full-duplex conversation. Af...10 params

Open a phone call you drive one turn at a time: we dial, transcribe what the other side says, and speak whatever text you send. You call voice_bridge_say to talk, poll_voice_bridge to read transcripts, end_voice_bridge to hang up. ⚠ Turn-based, NOT full-duplex conversation. Af...

Parameters* required
codecstring
PCMU 8kHz (default, universal) or L16_16000 for HD voice when both endpoints support itone of PCMU · L16_16000
durationMinutesnumber
Deposit for N minutes, 2-30 (default 3). Unused time refunded.
fillerstring
Optional. A short phrase (at most 60 characters) we say ONCE when you are slow: if about 3.5 seconds pass after the callee stops talking and your voice_bridge_say has not started, the callee hears...
greetingstring
Spoken the instant the callee answers (max 500 chars). Synthesized while the phone rings, so there is no pause before the first word — without it the callee hears silence until your first voice_bri...
languagestring
BCP-47 language tag (default en-US). See /api/l402/voice-bridge/coverage for the matrix.
paymentId*string
Valid payment ID from create_payment (toolName=voice_bridge_open)
phoneNumber*string
Destination phone number in E.164 format (e.g., +14155550100)
refundAddressstring
Lightning address of YOUR user (for example name@wallet.com), only if the user gave you one. Never invent or guess an address: the refund is paid out at once and cannot be called back. The unused d...
sttEnabledboolean
Default true. Set false for TTS-only broadcast calls.
ttsEnabledboolean
Default true. Set false to bring-your-own-audio via voice_bridge_say.
voice_bridge_sayInject audio into an open Voice Bridge call. Two modes: (1) text — we synthesize speech in any of 602 languages (English, Spanish and German start fastest); (2) audio_base64 + encoding — bring your own audio (mulaw_8000 or pcm_l16_16000 for MVP). Keep each reply to one or two...6 params

Inject audio into an open Voice Bridge call. Two modes: (1) text — we synthesize speech in any of 602 languages (English, Spanish and German start fastest); (2) audio_base64 + encoding — bring your own audio (mulaw_8000 or pcm_l16_16000 for MVP). Keep each reply to one or two...

Parameters* required
audioBase64string
Pre-rendered audio bytes, base64 (mode 2). Use with 'encoding'.
encodingstring
Encoding of audioBase64. mp3/opus require ffmpeg (not yet wired in MVP).one of mulaw_8000 · pcm_l16_16000
languagestring
Language override for this utterance (default: session language)
sessionId*string
Session ID from open_voice_bridge
textstring
Text to speak (mode 1). One or two sentences work best; at most 700 speech units (each Chinese, Japanese, Korean or Thai character counts 3), longer is refused with a 400.
voiceDescriptionstring
OmniVoice voice-design words, one per group, separated by commas: male|female; child|teenager|young adult|middle-aged|elderly; very low|low|moderate|high|very high pitch; whisper; american|british|...
poll_voice_bridgeFetch new transcript events from an open Voice Bridge call since the last cursor. Returns partial + final transcripts + system events. Pass waitMs (e.g. 20000) to hold the call until the callee has FINISHED TALKING (a final transcript, then 0.7 s of silence) or the call change...4 params

Fetch new transcript events from an open Voice Bridge call since the last cursor. Returns partial + final transcripts + system events. Pass waitMs (e.g. 20000) to hold the call until the callee has FINISHED TALKING (a final transcript, then 0.7 s of silence) or the call change...

Parameters* required
cursornumber
Last seq number seen (default 0 = start from beginning)
quietMsnumber
Optional, used with waitMs. How many milliseconds of silence after a final transcript count as 'finished talking' (0-5000, default 700). 0 = return at the first final transcript, even mid-sentence.
sessionId*string
Session ID from open_voice_bridge
waitMsnumber
Optional. Hold the call up to this many milliseconds (max 25000) until the callee has finished talking: a FINAL transcript has arrived and nothing new for quietMs, or a system event arrives. Then e...
end_voice_bridgeHang up a Voice Bridge call, finalize billing, and return a LNURL-withdraw refund link for unused deposit time. Also returns the final transcript for convenience.1 params

Hang up a Voice Bridge call, finalize billing, and return a LNURL-withdraw refund link for unused deposit time. Also returns the final transcript for convenience.

Parameters* required
sessionId*string
Session ID from open_voice_bridge
list_modelsDiscover available AI models with numeric IDs, tier labels, capabilities, and per-call pricing in sats. Call this before create_payment to find the right modelId for your task. Returns JSON array: [{ id, name, tier, description, price, isDefault, category }]. Models marked isD...1 params

Discover available AI models with numeric IDs, tier labels, capabilities, and per-call pricing in sats. Call this before create_payment to find the right modelId for your task. Returns JSON array: [{ id, name, tier, description, price, isDefault, category }]. Models marked isD...

Parameters* required
categorystring
Filter by service category (matches tool names)one of generate_text · generate_image · generate_video · animate_image · generate_music · text_to_speech
get_model_pricingGet pricing for a specific model by ID. No payment required.1 params

Get pricing for a specific model by ID. No payment required.

Parameters* required
modelId*number | string
The AI model database ID from list_models. A numeric string ("16") is accepted and coerced.
get_cost_estimateGet an exact sat cost quote for a service BEFORE creating a payment. Useful for budget-aware agents to price-check before committing. No payment required, no side effects. Pass service=text-to-speech&chars=1500, service=translate&chars=800, service=transcribe-audio&minutes=5,...6 params

Get an exact sat cost quote for a service BEFORE creating a payment. Useful for budget-aware agents to price-check before committing. No payment required, no side effects. Pass service=text-to-speech&chars=1500, service=translate&chars=800, service=transcribe-audio&minutes=5,...

Parameters* required
charsnumber
Character count — required for TTS and translate
minutesnumber
Audio length — required for transcribe-audio
modelstring
Optional model id for services with multiple tiers
pagesnumber
Page count — for OCR (default 1)
secondsnumber
Video duration — required for video / video-from-image
servicestring
Service id (e.g. 'text-to-speech', 'translate', 'image', 'video', 'transcribe-audio', 'ocr'). Omit to list all services.
get_error_codesGet the machine-readable catalog of all error codes this API can return (e.g. TIMEOUT, CONTENT_FILTERED, RATE_LIMITED, L402_REFUND_ISSUED, L402_AUTO_ROUTED). Agents should branch on error_code rather than parsing free-text messages. No payment required.

Get the machine-readable catalog of all error codes this API can return (e.g. TIMEOUT, CONTENT_FILTERED, RATE_LIMITED, L402_REFUND_ISSUED, L402_AUTO_ROUTED). Agents should branch on error_code rather than parsing free-text messages. No payment required.

No parameters. Call it with no arguments.

request_refundOpen a MANUAL 48-hour refund review ticket for a service that FAILED (error, timeout, wrong output). Sends an email to the operator. DO NOT call this for unused-minute refunds on metered services (ai_call, voice_bridge) — those are returned automatically as an LNURL-withdraw l...4 params

Open a MANUAL 48-hour refund review ticket for a service that FAILED (error, timeout, wrong output). Sends an email to the operator. DO NOT call this for unused-minute refunds on metered services (ai_call, voice_bridge) — those are returned automatically as an LNURL-withdraw l...

Parameters* required
emailstring
Optional email address for follow-up
feedbackstring
Optional description of what went wrong (max 2000 chars)
invoice*string
Lightning address (e.g., user@wallet.com) or bolt11 invoice for the refund
paymentId*string
The payment ID from a failed service call
remove_backgroundRemove background from any image, returning transparent PNG. Uses BiRefNet (state-of-the-art, Papers with Code — Sm 0.901 on DIS5K). Handles hair, fur, glass, transparency, and complex edges. Stable endpoint — model upgrades automatically as SOTA evolves. 44 sats per image, pa...3 params

Remove background from any image, returning transparent PNG. Uses BiRefNet (state-of-the-art, Papers with Code — Sm 0.901 on DIS5K). Handles hair, fur, glass, transparency, and complex edges. Stable endpoint — model upgrades automatically as SOTA evolves. 44 sats per image, pa...

Parameters* required
imageBase64*string
Base64-encoded image (PNG, JPEG, WEBP) or data URI
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
upscale_imageUpscale images 2x or 4x with neural super-resolution. Uses Real-ESRGAN (ICCV 2021, PSNR 32.73dB on Set5 4x, 100M+ production runs). Recovers real detail from low-resolution images — not interpolation. Optional face enhancement. Stable endpoint — model upgrades automatically as...5 params

Upscale images 2x or 4x with neural super-resolution. Uses Real-ESRGAN (ICCV 2021, PSNR 32.73dB on Set5 4x, 100M+ production runs). Recovers real detail from low-resolution images — not interpolation. Optional face enhancement. Stable endpoint — model upgrades automatically as...

Parameters* required
face_enhanceboolean
Apply face enhancement during upscaling (default false)
imageBase64*string
Base64-encoded image (PNG, JPEG, WEBP) or data URI
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
scalestring
Upscale factor: 2x or 4x (default 4x)one of 2 · 4
restore_faceRestore blurry, damaged, or AI-generated faces to sharp, natural quality. Uses CodeFormer (NeurIPS 2022, state-of-the-art FID 32.65 on CelebA-Test). Adjustable fidelity — balance between quality enhancement and identity preservation. Also enhances background and upsamples. Sta...7 params

Restore blurry, damaged, or AI-generated faces to sharp, natural quality. Uses CodeFormer (NeurIPS 2022, state-of-the-art FID 32.65 on CelebA-Test). Adjustable fidelity — balance between quality enhancement and identity preservation. Also enhances background and upsamples. Sta...

Parameters* required
background_enhanceboolean
Also enhance the background (default true)
face_upsampleboolean
Upsample restored faces (default true)
fidelitynumber
Fidelity to input: 0.0 = max quality enhancement, 1.0 = max identity preservation (default 0.5)
imageBase64*string
Base64-encoded image containing faces (PNG, JPEG, WEBP) or data URI
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
upscalenumber
Output upscale factor 1-4 (default 2)
estimate_depthEstimate per-pixel depth from a single photo. Depth Anything V2 (NeurIPS 2024, 3.8M+ runs) returns BOTH the raw greyscale depth map — what a ControlNet, AR or 3D reconstruction pipeline consumes — and a colour visualization for humans. Structured geometry a vision LLM cannot p...4 params

Estimate per-pixel depth from a single photo. Depth Anything V2 (NeurIPS 2024, 3.8M+ runs) returns BOTH the raw greyscale depth map — what a ControlNet, AR or 3D reconstruction pipeline consumes — and a colour visualization for humans. Structured geometry a vision LLM cannot p...

Parameters* required
imageBase64*string
Base64-encoded image (PNG, JPEG, WEBP) or data URI
model_sizestring
Model size — larger is more accurate, price is the same (default Large)one of Small · Base · Large
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
detect_nsfwClassify image safety (normal / suggestive / explicit). Falcons.ai NSFW detection — 100x cheaper and faster than asking an LLM. Returns classification label and boolean is_nsfw flag. Essential for content moderation pipelines. 2 sats per image, pay per request with Bitcoin Lig...2 params

Classify image safety (normal / suggestive / explicit). Falcons.ai NSFW detection — 100x cheaper and faster than asking an LLM. Returns classification label and boolean is_nsfw flag. Essential for content moderation pipelines. 2 sats per image, pay per request with Bitcoin Lig...

Parameters* required
imageBase64*string
Base64-encoded image (PNG, JPEG, WEBP) or data URI
paymentId*string
Valid payment ID (must be paid)
detect_objectsDetect and locate objects in an image by name. Grounding DINO (open-set detector, ECCV 2024) — describe what to find in natural language, get bounding box coordinates and confidence scores. Structured pixel data agents can't get from vision LLMs. 5 sats per image, pay per requ...5 params

Detect and locate objects in an image by name. Grounding DINO (open-set detector, ECCV 2024) — describe what to find in natural language, get bounding box coordinates and confidence scores. Structured pixel data agents can't get from vision LLMs. 5 sats per image, pay per requ...

Parameters* required
box_thresholdnumber
Confidence threshold for detection boxes (0-1, default 0.25)
imageBase64*string
Base64-encoded image (PNG, JPEG, WEBP) or data URI
paymentId*string
Valid payment ID (must be paid)
query*string
Comma-separated object names to detect (e.g. 'cat, dog, person')
text_thresholdnumber
Confidence threshold for text matching (0-1, default 0.25)
remove_objectRemove unwanted objects from images by describing what to remove — no mask needed. Combines Grounding DINO detection (ECCV 2024) with Bria Eraser inpainting. Just say 'person', 'car', or 'watermark' and the object is erased and filled convincingly. 130 sats per image, pay per...6 params

Remove unwanted objects from images by describing what to remove — no mask needed. Combines Grounding DINO detection (ECCV 2024) with Bria Eraser inpainting. Just say 'person', 'car', or 'watermark' and the object is erased and filled convincingly. 130 sats per image, pay per...

Parameters* required
box_thresholdnumber
Detection confidence threshold (0-1, default 0.25)
imageBase64*string
Base64-encoded image (PNG, JPEG, WEBP) or data URI
paymentId*string
Valid payment ID (must be paid)
query*string
What to remove (e.g. 'person', 'car', 'watermark', 'text')
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
text_thresholdnumber
Text matching threshold (0-1, default 0.25)
colorize_imageColorize black-and-white or grayscale photos. DDColor (dual-decoder, ICCV 2023) — vivid, natural colorization. Impossible for text/vision LLMs. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='colori...4 params

Colorize black-and-white or grayscale photos. DDColor (dual-decoder, ICCV 2023) — vivid, natural colorization. Impossible for text/vision LLMs. 5 sats per image, pay per request with Bitcoin Lightning — no API key or signup needed. Requires create_payment with toolName='colori...

Parameters* required
imageBase64*string
Base64-encoded grayscale or B&W image (PNG, JPEG) or data URI
model_sizestring
Model variant: 'large' (best quality) or 'tiny' (faster). Default: largeone of tiny · large
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
deblur_imageRecover detail from camera-shake and accidental motion blur. NAFNet (ECCV 2022, SOTA on GoPro/SIDD benchmarks). Best for: handheld shake, bumped camera, whole-frame uniform blur. NOT effective for: intentional panning blur, bokeh/depth-of-field, or artistic motion effects. Als...4 params

Recover detail from camera-shake and accidental motion blur. NAFNet (ECCV 2022, SOTA on GoPro/SIDD benchmarks). Best for: handheld shake, bumped camera, whole-frame uniform blur. NOT effective for: intentional panning blur, bokeh/depth-of-field, or artistic motion effects. Als...

Parameters* required
imageBase64*string
Base64-encoded blurry image (PNG, JPEG, WEBP) or data URI
paymentId*string
Valid payment ID (must be paid)
resultKeystring
Optional. The resultKey from create_payment. Send it with the same arguments to get this result again after a timeout.
task_typestring
'Image Debluring (GoPro)' for camera shake (default), 'Image Debluring (REDS)' for video frame blur, 'Image Denoising' for grain/noiseone of Image Debluring (GoPro) · Image Debluring (REDS) · Image Denoising
vote_on_serviceVote for a planned service to be built next. Returns JSON: { success, slug, newVoteCount }. 1 sat per vote — multiple votes allowed. Call list_planned_services first to discover valid slugs and current vote counts. Highest-voted services get prioritized. Requires create_paymen...2 params

Vote for a planned service to be built next. Returns JSON: { success, slug, newVoteCount }. 1 sat per vote — multiple votes allowed. Call list_planned_services first to discover valid slugs and current vote counts. Highest-voted services get prioritized. Requires create_paymen...

Parameters* required
paymentId*string
Valid payment ID (1 sat, must be paid)
slug*string
Service slug to vote for (from list_planned_services)
list_planned_servicesList all planned services with current vote counts. Returns JSON array: [{ slug, name, description, votes }], sorted by votes descending. No payment required — this is a free discovery tool. Use the slug values with vote_on_service to cast votes. This tool is idempotent and sa...

List all planned services with current vote counts. Returns JSON array: [{ slug, name, description, votes }], sorted by votes descending. No payment required — this is a free discovery tool. Use the slug values with vote_on_service to cast votes. This tool is idempotent and sa...

No parameters. Call it with no arguments.

Sponsors

Readme

sats4ai-mcp

badge

The permissionless communication supercharger for AI agents. 40+ tools paid with Bitcoin Lightning. No signup, no API keys, no KYC.

A remote MCP (Model Context Protocol) server that gives AI agents access to AI phone calls in any language, voice in 602 languages, translation across 119, fax, SMS, transcription, audiobooks, image generation, music, document extraction, and more — all paid per-use with Lightning Network micropayments.

Quick Setup

Claude Desktop

Add to your claude_desktop_config.json (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):

{
  "mcpServers": {
    "sats4ai": {
      "url": "https://sats4ai.com/api/mcp"
    }
  }
}

Claude Code

claude mcp add sats4ai --transport http https://sats4ai.com/api/mcp

View the full README on GitHub

Details

Repository
github.com/cnghockey/sats4ai-mcp-server
Category
Communication & Messaging
Package
sats4ai-mcp
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
3
Prompts
1
Tools verified
Nov 6, 2026

Related Communication & Messaging MCP servers

View all
1creativestefan avatarMailbridgecreativestefan/mailbridge-mcpConnect your AI assistant to email — read, search, send, and organise via IMAP/SMTP.2stars
2platfone-com avatarPlatfoneplatfone-com/mcpVirtual phone numbers for AI agents — rent numbers in 200+ countries, receive SMS.0stars
3stonematt avatarMcp Obsidian Clistonematt/mcp-obsidian-cliSave chat notes from Claude Desktop to your vault — MCP on Obsidian CLI. Keep what matters.2stars
4adelaidasofia avatarMulti-account MCP for Gmail, Calendar, Drive, Docs, and Sheets — 61 tools, tokenadelaidasofia/google-workspace-mcpMulti-account MCP for Gmail, Calendar, Drive, Docs, and Sheets — 61 tools, token-efficient, macOS…1stars
5adelaidasofia avatarmacOS-only MCP server that exposes iMessage chatadelaidasofia/imessage-mcpmacOS-only MCP server that exposes iMessage chat.db to Claude and exports per-chat history to an…1stars
6getcoherence avatarMcpgetcoherence/mcp-serverCoherence MCP — chat with your CRM's AI agent from Claude, Cursor, and Cline.0stars