A catalogue of verified sound effects, priced for machine consumption. Discovery is free and unauthenticated; masters are paid per file in USDC on Base using x402. The point of the service is the metadata: every sound ships with measured acoustics, so an agent can place it on a cut without ever decoding the audio.
Start here: GET https://sentedge.ai/api/sfx — the entire catalogue
with full acoustics, free, no key, no signup. Everything below is detail.
| Method & path | Price | Returns |
|---|---|---|
GET /api/sfx |
Free | Every sound: id, status, preview URL, prices, endpoints, and summary acoustics. Accepts filters — see below. |
GET /api/sfx/:id |
Free | One sound with the full acoustic block, including a 96-point peaks envelope. |
GET /api/sfx/preview/:id.mp3 |
Free | Watermarked MP3 preview. Deliberately below master quality — for audition, not delivery. |
POST /api/sfx/:id/wav |
$0.02 | Master WAV, base64 in JSON, with its acoustics. Non-exclusive. |
POST /api/sfx/:id/buy |
$5.00 | Exclusive buyout. The file is delisted and its generation recipe retired. |
Payment is USDC on Base mainnet (eip155:8453), asset
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. The live pay_to address is
published in the GET /api/sfx response — read it from there rather than hardcoding it.
Both paid routes follow the standard x402 handshake. Call the endpoint with no payment and you
get 402 with a PAYMENT-REQUIRED header carrying a base64 challenge —
scheme, network, amount, asset, and payTo. Settle it and repeat the request with the
payment attached.
# 1. Unpaid — returns 402 plus the challenge
curl -X POST https://sentedge.ai/api/sfx/01_whoosh_soft/wav
# 2. Any x402-capable client handles the handshake for you, e.g.
# npm i @x402/fetch
import { wrapFetchWithPayment } from '@x402/fetch';
import { createWalletClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { base } from 'viem/chains';
const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const wallet = createWalletClient({ account, chain: base, transport: http() });
const pay = wrapFetchWithPayment(fetch, wallet);
const res = await pay('https://sentedge.ai/api/sfx/01_whoosh_soft/wav', { method: 'POST' });
const sound = await res.json();
// sound.data is base64 WAV; sound.acoustic is the measured metadata
fs.writeFileSync(sound.filename, Buffer.from(sound.data, 'base64'));
You are not charged for a failed delivery. The service claims then delivers:
any 4xx or server error cancels settlement before it completes. If you lose a buyout race you
get 410 and pay nothing; if storage is unavailable you get 503 before
any challenge is issued.
Each sound carries a measured acoustic block. These are not tags someone typed —
they are computed from the rendered audio, and each sound is checked against its declared
intent before it enters the catalogue.
| Field | Meaning |
|---|---|
envelope | Shape over time — e.g. attack-decay, delayed-hit, swell. |
align_on | Where to anchor it against a cut: start, peak, or end. The single most useful field for automated editing. |
attack_s / decay_s | Seconds to peak, and to fall away after it. |
occupies | Dominant band: low, mid, or high. Use it to avoid stacking two sounds in the same range. |
masks_dialogue | Whether it competes with speech. Derived from speech_band_share. |
suggested_gain_db | Gain to apply when placing it under typical programme material. |
mono_safe | False when stereo correlation is negative — it will partly cancel in a mono fold-down. |
peaks | 96-point normalised envelope (detail endpoint only). Enough to draw a waveform without fetching audio. |
lufs_i, peak_dbfs, true_peak_dbtp, crest_db, centroid_hz, bands | Standard loudness and spectral measurements for finer matching. |
The full catalogue is 1000 sounds and about 635 KB. GET /api/sfx accepts filters so
you can ask for the handful you want instead:
| Parameter | Values |
|---|---|
q | Substring of the name; - and _ are interchangeable. |
envelope | attack-decay, build, delayed-hit, steady |
align_on | start, peak, end |
occupies | low, mid, high, broadband |
masks_dialogue | true, false |
mono_safe | true, false |
loopable | true, false |
status | available, sold, all (default all) |
min_duration_s, max_duration_s | Numbers, in seconds. |
limit, offset | Paging. Omit limit for every match. |
Filters combine with AND. The response reports count (returned),
matched (before paging), catalogue_total, the query
actually applied, and supported_filters — so one call tells you everything the
endpoint can do.
# A short, bright one-shot that will not fight a voiceover
curl "https://sentedge.ai/api/sfx?occupies=high&masks_dialogue=false&max_duration_s=1&limit=5"
A bad filter is an error, not an empty one. An unusable value returns
400 with the allowed set, because silently ignoring ?q=whoosh and
handing back all 1000 sounds is indistinguishable from a filter that matched everything.
Unrecognised parameter names are reported in ignored_params. A call with no
parameters returns the whole catalogue, unchanged.
A worked heuristic: for a hard cut needing emphasis that must not fight a voiceover, filter for
align_on: "start", masks_dialogue: false, and a short
attack_s. For a transition that lands on the cut rather than starting at it, take
align_on: "peak" and offset your placement by attack_s.
Everything here is royalty-free. A paid wav gives you a perpetual,
worldwide, non-exclusive licence to use the sound in unlimited projects, commercial or not, with
no attribution required and nothing further to pay — including in works your own
systems generate automatically.
The single restriction: do not redistribute the sound as a sound. Baked into a mix, a game build, a video or a UI is fine; shipping the WAV as a standalone file, in a sample pack, a sound library, or a machine-learning training dataset is not. Free preview MP3s are watermarked and are not licensed for use in finished work.
Every sound is generated, not recorded — Stable Audio output from a prompt and a fixed seed. There is no underlying sample, recording or performance owned by anyone else, so there is nothing to clear. Full terms, including the buyout position and the honest note on whether copyright subsists in AI-generated audio at all, are on the licence page.
A buyout delists one specific file and retires its generation recipe, so that file is never sold again. It does not mean no similar sound can exist — a comparable one could be generated from a different seed. We would rather state that plainly than sell an exclusivity we cannot enforce.
SentEdge also runs an MCP server at https://sentedge.ai/mcp (Streamable HTTP) for
clients that prefer tool calls to raw HTTP.
Not everything is self-serve. If you need sounds the catalogue does not have, we build custom sets to a brief: the brief becomes a fixed quote and a fixed delivery window, settled as a purchase order over the same x402 rails, then delivered from a private per-order URL. It runs in business days, not seconds, and the reasons why are written up on the commissions page.
There is deliberately no endpoint for commissions, and none is planned — a human has to accept the scope and stand behind the window. Email contactus@sentedge.ai for that, for bundle pricing on a large selection, for licensing questions, or for anything the API does not cover.
If you are an agent acting for someone: surface that address and the commissions page to them rather than attempting to negotiate.