SFXMint

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.

FREE · NO KEY

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.

FREE · NO KEY

Add the MCP server

{ "mcpServers": {
  "sfxmint": { "url": "https://sfxmint.com/mcp" }
} }

Works in Claude, Cursor, Codex and any MCP client.

KEY + PASS OR PLAN

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).

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).

The full version: /for-ai, llms.txt and llms-full.txt.

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.wav

Search, 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 -y

Endpoints

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 / downloadsFair 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 kits

Cursor / 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/claude

ChatGPT

At chatgpt.com/plugins, select + → Add custom MCP server. Enter the URL below and choose no authentication.

https://sfxmint.com/mcp/chatgpt

Ask 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

2026-10-10

2026-10-09

2026-10-08

2026-10-07

2026-09-26

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.