Sound Effects API
Free JSON API for 6,700+ CC0 sound effects for apps and games. No API key. No signup. Search by description, look up a sound by event (button-click, purchase-success) or fetch a whole set, in WAV or MP3 (OGG for sounds published before 2026-10-14). Audio URLs are permanent, immutable, CORS-enabled and free to hotlink from your app. Coding assistants get the same tools from the MCP server at https://sfxmint.com/mcp; making a sound the library lacks needs an API key and a pass or plan on the account — a 24-hour pass ($3.90, 50 sounds) or a plan (from $9.90 for 30 days, 50 to 200 a day); the 3 free tries are on the website only — each up to 4 CC0 WAV takes of up to 10 s; one that makes no take does not count.
Search the library
GET /api/v1/search?q=dog+bark GET /api/v1/roles/click GET /api/v1/sets/video-editing
Every result has a hotlinkable WAV/MP3 URL and a page.
Add the MCP server
{ "mcpServers": {
"sfxmint": { "url": "https://sfxmint.com/mcp" }
} }Works in Claude, Cursor, Codex and any MCP client.
Make what's missing
POST /api/v1/orders
Authorization: Bearer sfx_live_…
{ "prompt": "small dog, two barks", "variations": 4 }4 takes, CC0. No free makes through the API — it uses your pass or plan.
When it isn't paid yet
HTTP 402
{
"error": "payment_required",
"message": "Making sounds through the API or MCP needs a pass or plan on this account (from $3.90). The user buys one at https://sfxmint.com/pricing?for=api; free tries are on the website only. They can also make this sound on the website and hear it before paying: https://sfxmint.com/studio?q=heavy%20wooden%20door%20slam&utm_source=api&utm_medium=agent. Searching and downloading library sounds stay free and need no key. Nothing was charged.",
"buy_url": "https://sfxmint.com/pricing?for=api",
"website_url": "https://sfxmint.com/studio?q=heavy%20wooden%20door%20slam&utm_source=api&utm_medium=agent",
"plans": [{ "id": "pass_24h", "name": "24-hour pass", "price": "$3.90", "sounds": 50, "hours": 24 }, …]
}What the assistant tells you
add a sound when the timer ends
I used Long Final Timer Finished Beep Sequence 08 from SFXMint (free, CC0). For a custom one, SFXMint needs a pass — get one here ($3.90 for 24 hours).
For the API: passes and plans
One payment, nothing renews. After paying, create your API key in your account; the MCP setup is there too.
Copy instructions for your AI
Use SFXMint for sound effects. Search with GET https://sfxmint.com/api/v1/search?q=… (free, no key). Prefer library sounds; only make one when nothing fits, with an SFXMint API key and a pass or plan the user chose (https://sfxmint.com/pricing?for=api).
Put sound files in your project
Start with the HTTP API. No key, account or MCP installation is required.
npx sfxmint add coin jump hit
Downloads verified files and a manifest with sources, checksums and license; --set <id> takes a whole kit. The package also ships a small Web Audio runtime for first-gesture unlock, overlapping cues and a persisted mute.
Use response=structured&limit=3 for search. Sets accept format=wav|mp3|ogg: download_urls matches this format, legacy urls stays MP3. missing_roles lists incomplete events. Keep file hashes and license with your local files; preview unverified event suitability.
Choose a role for one event, a set for several events, or search for a description or gap. These are task branches, not a fixed sequence. Library files can be combined with other task-permitted sources or local synthesis. When no sound has every word, search returns the closest sounds that still meet every hard condition. Do not substitute near_matches for candidates meeting hard conditions.
Direct file URLs
Every sound has permanent download URLs in each format, free to hotlink from a web page or game with no key. Put one straight into an <audio> tag or new Audio(), or download it with curl:
https://sfxmint.com/dl/ui-click-30.mp3
https://sfxmint.com/dl/ui-click-30.wav
curl -O https://sfxmint.com/dl/ui-click-30.wavSearch, roles and sets return these URLs for each sound, with its measured length, format and SHA-256. To find the role for an event (click, success, purchase-success, level-up), see the sound roles reference.
Generating sounds with an API key
Searching and downloading need no key. To make sounds the library does not have, create a key in the dashboard and send it as Authorization: Bearer sfx_live_… (or X-API-Key) to POST /api/v1/orders with {prompt, variations} (and duration_s to set the length), or to the MCP tool generate_sound. Keep keys on your server or in your agent's config: anyone with a key uses your plan's generations.
The prompt goes to the model exactly as written. Send "enhance": true to have SFXMint first write it into a full sound description (“coin”, “level complete” or a full sentence alike), as the website's AI Enhance switch does. The order then shows that description as enhanced_prompt.
Describe the sound the user needs in plain words, in any language: what it is for and what should be heard, with "enhance": true. Leave out lengths (use duration_s). Exact words, songs and music cannot be made.
A take that is close but not right is changed rather than made again: POST /api/v1/orders with "refine": {"from": "<order_id>", "take": 2, "change": "act:crisper"} (crisper, heavier, shorter_tail, longer_tail, room, far or loop), or MCP change_sound with the user's own words. Three versions come back, made from the take itself: free, no generation is used.
Generating with a key needs a pass or plan on the account: a 24-hour pass's sounds in all, or a plan's generations of the day, shared with the website (the 3 free tries of a free account are for the website and AI Studio only). One generation makes 1, 2 or 4 takes (default 4), each a CC0 WAV of up to 10 seconds. Without duration_s SFXMint chooses the length from the description; with it, that is the longest a take may be. Either way the silence before and after the sound is cut, so a take ends where the sound does. A generation that makes no take does not count. Pricing
When a search finds no full match it answers generate_available: the request body to send, with the search's length limit as duration_s, and unmet_requirements naming what a generation cannot promise for it (a seamless loop, a length under 0.2 s, MP3 or OGG files, a real-world recording). Every SFXMint sound is AI-generated or synthesized; a search for a real recording reports constraints.recorded.
Errors: 401 sign_in_required (no key; with website_url), 401 invalid_api_key, 402 payment_required when the account has no pass or plan (with a message to show the user, buy_url where the user buys one, website_url where the user can make the same sound in AI Studio and hear it before paying, and plans; an agent never pays), 429 plan_day_used when the plan's generations of today are used (with free, a message and plans_url to upgrade; they come back at midnight UTC), 403 account_suspended, 429 too_many_active_orders.
A key sent with a library request is checked too: on REST a wrong or revoked key answers 401 invalid_api_key, so fix it or leave it out. Over MCP the library tools ignore a wrong key and only generate_sound and get_generation report it, so a revoked key never disconnects the server.
Quick start
curl "https://sfxmint.com/api/v1/search?q=door+slam&limit=5"
curl "https://sfxmint.com/api/v1/roles/button-click"Guides
Step by step: Add sound effects to a React app · Add sound effects to a Phaser web game. Using Claude Code, Cursor or another coding agent? Install the skill and the agent learns the role → set → search workflow below:
npx skills add flreey/sfxmint-mcp -yEndpoints
GET /api/v1/search?q=&category=&limit=20
Keyword search over sound titles and tags, backed by a semantic layer. Optional max_duration_ms, loop and format constraints are applied before the limit. The legacy response is an array: sounds showing every word first, then the closest ones that meet every condition but not every word (fit says which, missing_terms names the rest). Addresponse=structured for a fresh request_id, parsed constraints, per-candidate checks, closest, library_fit (full, close, weak, none), near matches, unknown requirements and diagnostics. Returns slug, title, duration, tags, license, direct mp3_url / wav_url, measured acoustics, file-QC status and legacy score / match. score is a ranking signal, not a probability or listening confidence. Invalid values (including non-positive or non-finite durations, unknown loop booleans, and formats other than WAV/MP3/OGG) return HTTP 400.
GET /api/v1/sounds/{slug}
Full metadata for one sound, including a short description, acoustics, loopable and peaks URL.
acoustics (per sound, measured from the audio)
attack_ms onset→peak rise time · tail_ms peak→−40 dB decay · centroid_hz spectral brightness · character labels (dark/balanced/bright · punchy/fast attack/gradual · tight/short decay/sustained). Use them to order variants after checking their intended use; they do not replace listening. Values are null when not measured.
loopable (per sound)
This legacy flag alone does not prove a seamless loop. Use loop_status=prepared and its separate seam evidence before describing WAV loop behavior. OGG means Ogg Vorbis. MP3 and OGG loop requests remain unknown until their own decoded seams and playback have been checked; WAV evidence does not transfer. Duration is measured per delivered format.
GET /api/v1/sets · GET /api/v1/sets/{id}
Sound sets grouped by event and style: style kits (ui-crisp, ui-soft, ui-spacious, retro-game) and scenario kits (chat-app, saas-app, checkout, learning, puzzle-game, platformer, horror-game, video-editing, smart-device, wellness, ai-coding-tool) and one-shot kits (acoustic-drum-kit, animal-calls, dungeon-traps). One sound per role, two alternates each, and a role → URL map (urls).
content_check (role, set and role search results)
For jump, land, coin, hit and win (the level-up role), status is verified, unverified or rejected. A listening decision applies only to its role, scene, format and exact file sha256. A changed file or another format needs its own review. Accepted files rank before unreviewed previews in every style; rejected files cannot be defaults for that use. Unreviewed previews remain available for compatibility and are not certified suitable.
The platformer set reports missing and unverified core roles. It is reviewed only when all five pass in platformer-demo-v1. Use WAV for that default review; an MP3 does not inherit it. Download the selected files into your project, retain their license, provenance and checksums. If the task permits processing, preserve the originals, record the recipe and new hashes, re-measure delivery conditions and preview the result. Changed bytes do not inherit a content review. Technical file checks alone do not prove event suitability or set coherence.
GET /api/v1/roles · GET /api/v1/roles/{role}?style=balanced|crisp|soft|spacious
Look sounds up by what they are for. /roles lists every role as {role, label, aliases, families, audiences, url}. /roles/{role} — role id or alias (button-click, purchase-success, dialogue-blip, notification) — returns one deterministic file-QC-eligible default when the ready gate is enabled: role, label, aliases, audiences, style, license, slug, title, duration_ms, loopable, acoustics, mp3_url, wav_url, page_url, alternates (same shape), family, family_url. style defaults to balanced (the most typical variant of the family); crisp / soft / spacious re-rank by measured acoustics. Unknown role → 404 {"error":"not_found","message","roles_url"}. Invalid constraint values return HTTP 400 with invalid_parameters. Human-readable index: /roles.
POST /api/v1/generate
Retired. Returns HTTP 410 with generation_retired; no new generation job is created. To generate, use POST /api/v1/orders with an API key (see Generating sounds with an API key).
GET /api/v1/jobs/{job_id}
Status of jobs from the retired generator. Existing records remain readable; no new jobs are created.
GET /dl/{slug}.mp3 · .wav · .ogg (Vorbis, older sounds only)
Direct audio. Cache-Control: immutable, Access-Control-Allow-Origin: * — embed these URLs straight into your product. Never append query parameters to /dl/ URLs.
Rate limits
| Search / roles / sets / metadata / downloads | Fair use — no hard key-based limits |
MCP server (for AI agents)
SFXMint exposes the same capabilities as a remote MCP server (Streamable HTTP), so Claude, Cursor and other agents can look up, search and download existing sounds, and with an API key generate new ones.
Claude Code
claude mcp add --transport http sfxmint https://sfxmint.com/mcp \
--header "Authorization: Bearer $SFXMINT_API_KEY" # the key only for generating and Game kitsCursor / other clients (mcpServers JSON)
{
"mcpServers": {
"sfxmint": {
"url": "https://sfxmint.com/mcp",
"headers": { "Authorization": "Bearer sfx_live_…" }
}
}
}Tools: search_sounds · get_role_sound · get_sound · get_sound_set · generate_sound · get_generation · start_game_kit · get_game_kit · list_kit_sounds · make_kit_sounds · pick_kit_take · change_kit_take · export_game_kit
Sounds for a whole game: start_game_kit plans a Game kit from a description of the game, the same project the user opens on the website. Its scenes are checked and listed for free (list_kit_sounds), each sound gets up to four takes (make_kit_sounds), a close take is changed as it is for free (change_kit_take), the user picks (pick_kit_take) and export_game_kit gives the files with an event map. Pricing: describe a game and get its list of sounds for free; each sound made is one of the account's 3 free tries on the website, or comes from a 24-hour pass ($3.90, 50 sounds) or a plan (from $9.90 for 30 days, 50 to 200 a day) on the account; 4 takes per generation and no cumulative generation cap. Nothing is charged; with a key and no planmake_kit_sounds answers payment_required with buy_url, the page where the user chooses a plan. Use the library first and the kit for what it lacks.
Choose get_role_sound(role, style?) for a named event or interaction; get_sound_set for multiple events; search_sounds for a description or a gap. These are task branches, not a fixed sequence. When nothing fits, generate_sound makes new sounds with an API key (see Generating sounds with an API key) and get_generation follows one up; the other tools never need a key.
In Claude and ChatGPT
In Claude and ChatGPT, SFXMint answers with a card: play each sound, download it as WAV or MP3, or open its page. It searches the free library only, with no account or API key. Every sound is AI-generated and CC0.
Claude
Customize → Connectors → + Add → Add custom connector. Name it SFXMint, enter the URL below and choose No sign in.
https://sfxmint.com/mcp/claudeChatGPT
At chatgpt.com/plugins, select + → Add custom MCP server. Enter the URL below and choose no authentication.
https://sfxmint.com/mcp/chatgptAsk in your own words: “find a glass shattering sound”, “I need a button click for my app”, “give me a set of sounds for a platformer”. Tools: search_sounds (a description, with an optional maximum length) · get_role_sound (the usual sound for an app or game event, with alternatives) · get_sound_set (one sound for each event of an app or game) · get_sound (one sound by its id). All four only read the library. What their requests store is on the privacy page; questions go to the contact page.
Changelog
Audio URLs and sound slugs never change. Response fields may be added at any time; removed fields and changed behavior are listed here by date.
2026-10-12
- MCP 1.7.0: making sounds with a key needs a pass or plan on the account (a 24-hour pass, the 30-day plan or Pro); the free tries are for the website and AI Studio only. A pass whose sounds are used answers
402 pass_used. Without one,POST /api/v1/ordersandgenerate_soundanswer402 payment_requiredwithbuy_urlandplans, andmake_kit_soundsanswerspayment_required(was429 daily_free_usedandplan_required). Search hints carryneeds_planandbuy_url;free_generations_per_daybecamefree_tries_on_website. Searching and downloading are unchanged and need no key.
2026-10-10
- MCP 1.6.0: kits for apps as well as games.
add_kit_soundstakes the user's own list (names, keys, order and lengths kept) or a set,fill_kit_from_libraryuses free library sounds first,find_kit_sound_candidatesanduse_library_soundchoose one by hand. Making the gaps is unchanged.
2026-10-09
- MCP 1.5.0: plans belong to the account. A plan (from $9.90 for 30 days) raises the account's generations a day everywhere;
freecarriesplanwhile one runs. The used-up answers giveplans_url(waskit_url), a plan's used-up day is429 plan_day_used, andmake_kit_soundsanswersplan_requiredwithplans_url(wasunlock_requiredwithunlock_url). No included-sound limit. - MCP 1.4.0: no more credits. Generating is free: 3 generations a day per account, on the website, REST and MCP together. Once they are used,
POST /api/v1/ordersandgenerate_soundanswer429 daily_free_used(was402 insufficient_credits); orders no longer carrycredits,credits_returnedorunlock_cost, andgenerate_soundno longer returnscost. Game kit tools dropuse_creditsandconfirm_credits: a kit uses the free generations or its plan. - MCP 1.3.0: Game kit tools for a whole game's sounds (
start_game_kitand five more, with an API key). Search'sgenerate_availablecarries the length limit andunmet_requirements; a request for a real-world recording is markedconstraints.recorded.
2026-10-08
- MCP no longer refuses a request with a wrong, revoked or suspended key (it answered HTTP 401, which clients read as signed out): the library tools answer as without a key, and the generation tools report the key with
isError.POST /api/v1/generate(still 410) now points toPOST /api/v1/orders.
2026-10-07
- Generation with an API key:
POST /api/v1/ordersand the MCP toolsgenerate_soundandget_generation, one credit per generation. Searching and downloading still need no key.
2026-09-26
- Removed
promptandgeneration_intentfrom sound metadata, search results and MCP results, andmodeland two internal bookkeeping fields from sound metadata.description(sound metadata andget_sound) is now a short standard description — what the sound is, how bright it is, the length of continuous sounds and typical uses — ornullwhen none is available. - Removed the internal source and processing fields from sets (REST and
get_sound_set) and from the set ZIP manifest. - Removed the 13
*-looproles (they now return 404) andloopablefrom the items ofGET /api/v1/roles. The per-soundloopableflag is unchanged. - Merged 20 small sound families into their larger duplicates. The old family pages redirect (301) and
family_urlpoints at the merged page; sound slugs and/dlURLs are unchanged. - Search recognizes family names and common synonyms:
swishfinds swooshes andcrowd cheerfinds crowd cheering.
License & hotlinking
SFXMint library files are CC0 1.0 — commercial use, no attribution. External providers' output uses their own licenses. Hotlinking is allowed and encouraged: audio URLs never change and are served from edge cache. Please don't mirror-scrape the whole catalog in one burst; the API is friendlier.