Soundza

official

Free sound effects, music and ambience for games, videos and apps. Search by mood, tempo, key or use, play previews and download full-quality files, each with 35 metadata fields.

What can you do with Soundza MCP?

  • Search for sounds — Ask your assistant to find sound effects, music, or ambience using search_sounds with filters like type, mood, BPM, or duration.

  • Get sound details — Retrieve full metadata for a specific sound, including preview files, license info, and download URL, via get_sound.

  • Explore sound packs — Browse curated collections of sounds with search_packs, or view all sounds within a specific pack using get_pack.

  • Download full-quality audio — Get a ready-to-use curl command and a 15-minute download link for a sound's full-quality WAV file through download_sound.

  • Audition with previews — Listen to 128 kbps MP3 previews directly from the CDN without using API credits, before deciding to download.

Hosted MCP Server

npx add-mcp 'https://mcp.soundza.com/mcp/oauth'

Installs into Claude Code, Codex, Cursor and more

Documentation

How to Connect

Use soundza from an AI assistant or from your own code. Both are free and get the same sounds.

In an AI assistant

In Claude, ChatGPT, Claude Code or any MCP app, add the soundza MCP server and sign in once with a free account. Steps for each are below.

In your own code

In apps, games, scripts and build tools, call the REST API with a free API key. Get a key.

REST

https://api.soundza.com/v1

MCP, sign-in

https://mcp.soundza.com/mcp/oauth

MCP, API key

https://mcp.soundza.com/mcp

OpenAPI

soundza.com/openapi.json

For agents

soundza.com/llms.txt

The MCP server has five tools: search_sounds, get_sound, search_packs, get_pack and download_sound, which returns a 15-minute link, a ready curl command and the sound's page.

Claude

  1. Click Add to Claude. Claude opens with the name and URL filled in. Click Add.
  2. Sign in to soundza and approve. A free account is all you need.
  3. In a chat, click +, open Connectors and turn on Soundza.

Add to Claude or add a custom connector with https://mcp.soundza.com/mcp/oauth

ChatGPT

  1. Open ChatGPT plugins and add a custom MCP server. Name it Soundza and keep OAuth.
  2. Paste the URL below, then sign in to soundza.
  3. In a new chat, pick Soundza from the tools menu.

URL https://mcp.soundza.com/mcp/oauth

Custom servers depend on your ChatGPT plan; some need Developer mode turned on in settings.

Claude Code

Add it, then run /mcp, choose soundza and sign in in the browser.

claude mcp add --transport http soundza https://mcp.soundza.com/mcp/oauth

Rather use a key? Set SOUNDZA_API_KEY and add https://mcp.soundza.com/mcp with an Authorization header. The keys page shows this command with your key filled in:

claude mcp add --transport http soundza https://mcp.soundza.com/mcp --header "Authorization: Bearer $SOUNDZA_API_KEY"

Codex, Cursor and other agents

Any client that speaks streamable HTTP. Use https://mcp.soundza.com/mcp/oauth if it supports sign-in, otherwise https://mcp.soundza.com/mcp with an Authorization header. For Cursor, add this to ~/.cursor/mcp.json; it reads the key from your environment, so the key stays out of files you might commit.

{
  "mcpServers": {
    "soundza": {
      "url": "https://mcp.soundza.com/mcp",
      "headers": { "Authorization": "Bearer ${env:SOUNDZA_API_KEY}" }
    }
  }
}

Get an API key

Use a key in your own code. Send it as Authorization: Bearer <key>. Keys start with sz_live_. Keep yours on your server or in a gitignored .env, never in client code.

Create one yourself

Sign in and make a key on the keys page. It's shown once, with the MCP command filled in.

Or let your agent sign in

Ask your coding agent to find sounds on soundza.com. It reads llms.txt, sends you one link to approve, and saves the key itself.

Soundza is free, but every call needs an API key tied to a person's account. Get one with a one-click sign-in:

1. Start the sign-in. Include what the person is building, if you know it from the project: project_kind (one of game, video_tool, own_content, app, agent, music, trying, other) and project, one plain line about it. After approving, the person sees both and can change them; leave out anything you'd have to guess.
   curl -s -X POST https://api.soundza.com/v1/auth/device -H "content-type: application/json" -d '{"client_name":"<your tool> on <this machine>","project_kind":"game","project":"<one line, e.g. A retro sci-fi shooter in Godot>"}'
   It returns device_code, user_code, verification_uri_complete, expires_in (600 seconds) and interval (5 seconds).
2. Tell the human: "Open <verification_uri_complete> and approve code <user_code> (sign in with Google if it asks)." Nothing else is needed from them.
3. Right after telling them, poll every <interval> seconds until they approve. Run the polling loop in the foreground and wait for it; don't end your turn while the sign-in is pending (the code lasts 10 minutes).
   curl -s -X POST https://api.soundza.com/v1/auth/token -H "content-type: application/json" -d '{"device_code":"<device_code>"}'
   While it returns {"error":"authorization_pending"} keep polling; on "slow_down" wait the "interval" it returns. On approval it returns {"access_token":"sz_live_...","token_type":"Bearer",...} once: access_token is the API key. "expired_token" or "access_denied" means stop (start again only if the human asks).
4. Save the key as SOUNDZA_API_KEY in the project's .env and make sure .env is in .gitignore. Never commit the key or put it in a project-scope .mcp.json.
5. Optional: connect this MCP server with the key. The command reads $SOUNDZA_API_KEY from the shell, so load .env first (set -a; . ./.env; set +a). It stores the key in Claude Code's own settings (local scope), not in the project. If soundza is already added without a key, run "claude mcp remove soundza" first.
   claude mcp add --transport http soundza https://mcp.soundza.com/mcp --header "Authorization: Bearer $SOUNDZA_API_KEY"
   The tools load in the next session (or after /mcp). Until then, and in any tool that can't add MCP servers, use the REST API at https://api.soundza.com/v1 with the header "Authorization: Bearer $SOUNDZA_API_KEY". It does everything the MCP tools do.

A person can also create a key at https://soundza.com/developers/keys and set it the same way.

Quickstart

Search, then download what you use. Set SOUNDZA_API_KEY first.

curl -s "https://api.soundza.com/v1/sounds/search?type=sound_effect&q=whoosh&per_page=5" \
  -H "Authorization: Bearer $SOUNDZA_API_KEY"

# download_url redirects to the file: -L follows it, -OJ saves it under its own name
curl -LOJ "https://api.soundza.com/v1/sounds/SOUND_ID/file" \
  -H "Authorization: Bearer $SOUNDZA_API_KEY"

Each result has preview_files, 128 kbps MP3s that play straight from our CDN with no key, and a download_url for the full-quality file.

Endpoints

Every endpoint is a GET request under https://api.soundza.com/v1. The full spec is at /openapi.json.

EndpointWhat it does
GET /sounds/searchSearch by words and filters. Returns a page of sounds and a search_id.
GET /sounds/{id}One sound, by id.
GET /sounds/{id}/fileThe full-quality file, usually WAV, level-matched to the catalog;?variant=original for the untouched original. A 302 to a link that works for 5 minutes. Optional search_id and user.
GET /packsPublic packs, best first. Optional q, page and per_page.
GET /packs/{id}One pack, then a page of its sounds. Every sound names its pack.
GET /removals?since=Sounds removed since an ISO date, for anyone who stores files.

Search parameters

Give a q, at least one filter, or both. Durations are in seconds.

ParameterTypeDescription
qstringWords to match, e.g. "door slam" or "lofi drum loop". Typos are forgiven.
typestringWhat the sound is: music, sound_effect or ambience (see Type and facts). Case-insensitive. A search with q that finds nothing within its type searches every type, and says so in relaxed_filters.
formstringMusic only: track, excerpt, loop, one_shot or stem.
partsstringMusic only: full_mix or single_part. Without it, type=music ranks full mixes first, then loops, then single parts.
vocalsstringMusic only: none, backing or lead.
stylestringSound effects only: retro or cartoon. Set per pack, so most sounds have none; with a q that finds nothing with it, it is dropped and listed in relaxed_filters.
min_durationnumberShortest length, in seconds.
max_durationnumberLongest length, in seconds.
min_bpmnumberSlowest tempo. Only music has a tempo.
max_bpmnumberFastest tempo.
keystringMusical key, e.g. "C", "F# minor" or "Bbm". Matches only the keys sounds show: stated by the source or a person, or detected with high confidence.
chordstringChord a chord one-shot plays, e.g. "Am", "C#m7" or "Fmaj7".
notestringNote a pitched one-shot plays: "D3" for that octave (C3 is middle C), or "D" for any octave.
moodlistComma-separated mood words; sounds matching any of them come back, and more matches rank higher. One of: airy, heavy, metallic, bright, dark, punchy, soft, warm, glitchy, organic, cinematic, cartoony, retro.
good_forlistComma-separated jobs the sound should suit. Ranking only: matching sounds rank higher, and nothing is filtered out. One of: transition, reveal, build_up, impact_on_beat, title_or_logo, notification, ui_click, menu, game_pickup, game_hit, game_power_up, footsteps, background_bed, intro, outro.
fit_secondsnumberThe length the sound has to fill, e.g. 20 for a 20-second ad. Ranks sounds that can fill it (a track at least that long, or a seamless loop) and adds a fit hint to each result. It doesn't filter anything out.
packstringA pack's id or slug: only that pack's sounds.
loop_seamlessbooleantrue: only sounds that loop seamlessly, as measured from the audio (the end runs back into the start without a click or jump). For game music and ambience beds that repeat under a scene.
categorystringA Universal Category System top-level category ("CROWDS") or CatID ("CRWDCheer"). Sound effects and ambience.
pageintegerPage number, from 1.
per_pageintegerResults per page: default 15, at most 50. Results stop at 500 per query.

Response

A page of results, with a link to the next page. bpm and key describe music; creator is null when a sound has no public creator.

Files are level-matched, so sounds sit together without adjusting each one: one gain per sound, no compression, peaks at or under −1 dBTP. Ambience aims for −20 LUFS, music, pads and long loops for −16, everything else for −13 on its loudest 400 ms. lufs, true_peak_db and loudness describe the original; gain_db is what the default file adds to it. Add ?variant=original to the file route for the original as uploaded.

{
  "page": 1,
  "per_page": 5,
  "total_results": 38,
  "next_page": "https://api.soundza.com/v1/sounds/search?q=whoosh&type=SOUND_EFFECT&per_page=5&page=2",
  "search_id": "x7k2m9q4r1t8v3w6y0z5a2b4",
  "sounds": [
    {
      "id": "cm9w2k4e30001",
      "url": "https://soundza.com/sounds/fast-air-whoosh",
      "title": "Fast Air Whoosh",
      "description": "A quick, bright air whoosh that sweeps left to right.",
      "type": "sound_effect",
      "form": null,
      "parts": null,
      "vocals": null,
      "style": null,
      "good_for": ["transition"],
      "duration": 0.84,
      "bpm": null,
      "key": null,
      "chord": null,
      "note": null,
      "mood": ["airy", "bright"],
      "tags": ["whoosh", "swipe", "air", "airy", "bright"],
      "sync_ms": 310,
      "lufs": -19.4,
      "true_peak_db": -6.1,
      "loudness": { "value": -18.2, "basis": "momentary_max" },
      "gain_db": 5.1,
      "loop_seamless": null,
      "file_type": "audio/wav",
      "file_extension": "wav",
      "sample_rate": 48000,
      "bit_depth": 24,
      "channels": 2,
      "size_bytes": 322604,
      "category": { "id": "WHSH", "label": "Swooshes › Whoosh" },
      "pack": {
        "id": "cm8p1x7a20004",
        "name": "Air and Motion",
        "slug": "air-and-motion",
        "sound_count": 42,
        "url": "https://soundza.com/packs/air-and-motion"
      },
      "creator": null,
      "preview_files": [
        { "type": "audio/mpeg", "bitrate": 128, "link": "https://media.soundza.com/public/previews/4fJ9aQx2LmP0sT7vKc1Rb8Ze.mp3" }
      ],
      "download_url": "https://api.soundza.com/v1/sounds/cm9w2k4e30001/file",
      "license": { "name": "Soundza Standard License", "url": "https://soundza.com/license" },
      "attribution": "\"Fast Air Whoosh\" on Soundza (https://soundza.com/sounds/fast-air-whoosh)"
    }
  ]
}

Type and facts

type says what a sound is. Filter by type first, then by the facts you know, then put the rest in q.

typeWhat belongsFacts
musicTracks, excerpts, loops, one-shots, stems, stingers, jingles and vocal chops, game music included.form (track, excerpt, loop, one_shot, stem), parts (full_mix, single_part), vocals (none, backing, lead), bpm, key, note, chord
sound_effectWhooshes, impacts, foley, UI and game sounds, voices as effects.category (UCS), style (retro, cartoon; set per pack)
ambiencePlaces, room tone and noise beds.category (UCS)

“Corporate background music, no vocals” is type=music&vocals=none&q=corporate. With type=music, full mixes come first, then loops, then single parts, unless you set parts. good_for moves sounds suited to a job (transition, ui_click, background_bed …) up the results without filtering any out. A search with q that finds nothing within its type searches every type and lists type in relaxed_filters.

Limits

Free keys get:

  • 60searches a minute
  • 250downloads an hour
  • 350downloads a day

Every response includes these headers. A 429 also includes Retry-After, in seconds:

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset
  • X-RateLimit-Policy

All keys on one account share these limits. Audition sounds with their preview_files, which are free and don't count, and download only the sounds you use.

Only different sounds count as downloads, so fetching the same sound again within 24 hours is free. Total file fetches are capped at twice the download limits. Save each file once and reuse it by the sound's id. Looking up a single sound or pack has a separate limit, five times the search limit.

Putting a sound picker in your app? Go ahead: a free key covers a small app with a handful of users a day. Once it gets real traffic, request higher limits from the keys page and tell us a little about it, or write to admin@soundza.com. We'll reply by email.

Request higher limits

Giving credit

Everything is completely free. The only thing we ask is for you to credit soundza.com (and/or an original sound creator if applicable) somewhere it makes sense for your project. Ideally please include a link to soundza.com somewhere on your website/blog/itch page (e.g. 'Thanks to soundza.com for the free sounds'). If you don't have a site we'd still love a shoutout on social media or in a Youtube video description, etc. Help spread the word!

Below are some examples. We are flexible on how you credit us, but we ask that you please do so somehow that works naturally for your project.

You're makingHow to credit
An app or tool with a sound pickerPowered by soundza in the picker, plus a link to soundza.com in your site's footer, About page, blog, or somewhere else that makes sense.
A game, even a small oneWherever you share it (a Reddit or Discord post, X, your devlog or site, itch.io or Steam), a quick thank-you to soundza.com, with a link where you can.
VideosSound effects: soundza.com in the YouTube description. On TikTok or Instagram, tag @soundza_audio if you can.
A bot, agent or open-source toolA line in your README, help text or listing page.
Something just for youNothing needed.

Want to use our logo? You're welcome to show it with your link: the full logo (PNG) or the mark on its own (SVG). Just don't use it as your app's icon.

Made something with soundza? We'd love to see it. Email admin@soundza.com or tag @soundza_audio. We reshare cool projects.

Errors

Errors are JSON: {"error": {"code", "message", "details"?}}.

StatusCodeMeaning
400invalid_requestA parameter is wrong. details lists each one.
401missing_keyNo Authorization: Bearer header.
401invalid_keyThe key doesn't exist.
401revoked_keyThe key was revoked.
404not_foundNo public sound has that id.
429rate_limitedA limit was hit. Wait Retry-After seconds.
500server_errorSomething went wrong on our end. Try again shortly.

Licensing

Every sound comes under the Soundza Standard License, linked from its license field: royalty-free for personal and commercial work, with no attribution required for the sounds themselves (see giving credit for what we ask in return). We review sounds carefully, but provide them as is, with no guarantee that a sound is free of third-party claims. The license has the full terms.

Guidelines

  • Once people outside your team see what you make, link back to soundza.com in the way that fits it: "Powered by soundza" by your sound picker plus a link on your site, a thank-you wherever you share your game, or a line in your video description. See soundza.com/developers#credit.
  • Request a sound's download_url when it is added to a project, save the file once, and reuse it by the sound's id.
  • Previews are for listening. Use downloaded files in finished work.
  • Don't copy Soundza's core functionality or build a competing sound library or API.
  • A free key may store up to 500 downloaded sounds. Remove any sound listed in GET /v1/removals, and check it at least monthly.
  • Respect the rate limits, and ask when you need more. We may suspend or end API access for anyone, at any time, for any reason.

Use of the API is governed by the Terms of Service and the License.

Soundza picker

A sound picker for your product in three files: two server routes that keep your key private, and a component with chips, previews and the credit link. Style it to match your app.

// app/api/sounds/route.ts: search, with your key kept on the server
export async function GET(req: Request) {
  const params = new URL(req.url).searchParams;
  const res = await fetch(\`https://api.soundza.com/v1/sounds/search?${params}\`, {
    headers: { Authorization: \`Bearer ${process.env.SOUNDZA_API_KEY}\` },
  });
  return new Response(res.body, { status: res.status, headers: { "Content-Type": "application/json" } });
}

// app/api/sounds/[id]/file/route.ts: call it from your server when a user adds a sound
export async function GET(req: Request, { params }: { params: Promise<{ id: string }> }) {
  const { id } = await params;
  const query = new URL(req.url).searchParams; // search_id, and your own user id as user
  const res = await fetch(\`https://api.soundza.com/v1/sounds/${encodeURIComponent(id)}/file?${query}\`, {
    headers: { Authorization: \`Bearer ${process.env.SOUNDZA_API_KEY}\` },
    redirect: "manual",
  });
  const location = res.headers.get("location");
  return location ? Response.redirect(location, 302) : new Response(res.body, { status: res.status });
}

When a user adds a sound, fetch the file route from your server and save the file to your own storage. That counts the download. The route redirects to a signed link that lasts 5 minutes and can't be read from a browser on another site, so don't fetch it client-side or keep the link. Pass your own user id as user if you want per-user reports.

FAQ

Is the API free?

Yes. The API and the keys are free. In return, we'd love a link back to soundza wherever it fits what you make.

Do I need to credit soundza?

We ask for it once people outside your team see what you make, in whatever form fits: a link on your site, your store page or your video description. Nothing is needed while you build or test, or for things that are just for you.

What counts as credit?

A link to soundza.com where people can see it. For an app, Powered by soundza by your sound picker plus a link in your site's footer, About page, blog, or somewhere else that makes sense. For a game, a thank-you wherever you share it: a Reddit or Discord post, your devlog or site, or its itch.io or Steam page. For a video, Sound effects: soundza.com in the description. A shout-out on X, Discord or YouTube is lovely too.

Will you share what I make?

We'd love to hear about what you build. Email admin@soundza.com or tag @soundza_audio and tell us what you made. We reshare cool projects made with soundza.

Can I use the soundza logo?

Yes, we'd love you to show it with your "Powered by soundza" link, though it's optional. Please don't use it as your app's icon. Download the full logo (soundza.com/logo-wordmark.png) or the mark on its own (soundza.com/logo.svg).

What are the limits?

Free keys get 60 searches a minute, 250 downloads an hour and 350 a day, shared by all keys on your account. Previews don't count. Every response has X-RateLimit-* headers.

How do I get higher limits?

The free limits cover building a game, editing videos, or a small app with a sound picker. If you're putting a sound picker in an app with real traffic, use "Request higher limits" on the keys page and tell us a little about it, or email admin@soundza.com with your key prefix and what you're building. We'll reply by email.

Can I use the sounds in commercial projects?

Yes. Every sound is royalty-free for personal and commercial work under the Soundza Standard License, and shipping a sound inside a game or app you make is fine.

Can I store the files?

Yes. Save each file once and reuse it by the sound's id. A free key may store up to 500 downloaded sounds. Don't keep the signed link download_url redirects to; it lasts 5 minutes.

What if a sound is removed?

Call GET /v1/removals?since=<date> now and then (at least monthly) and delete any sound it lists.

Can I use the sounds to train AI?

No. The sounds can't be used to train, fine-tune or build an AI or machine-learning model.

Can I build a sound library on the API?

No. Please don't redistribute sounds as standalone files or sample packs, or build a competing sound library or API.

REST or MCP?

Both use the same key, limits and catalog. Use REST from your code, and MCP (mcp.soundza.com/mcp) so an agent like Claude Code or Cursor can search and download for you.

Can my coding agent get a key itself?

Yes. Ask it to find sounds on soundza.com. It reads llms.txt, sends you one link to approve, and saves the key.