Create a search

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Submit a search to Soundstripe's AI music supervisor. Provide any combination of a natural language query, scene context, and uploaded asset_ids, plus an HTTPS callback_url to receive the result via webhook.

If an equivalent search was already answered within the last 24 hours, the cached results are returned immediately in the response body (200) and no webhook is sent. Otherwise, the search is enqueued and a search ID is returned (202). When the search completes, the results are delivered to your callback_url via a webhook.

Request body

AttributeTypeRequiredDescription
querystringConditionalNatural language search query (max 2,000 characters).
contextstringConditionalProject or scene context, such as a shot description or creative brief (max 2,000 characters). When supplied without query or asset_ids, it must contain at least 12 characters of substantive direction.
asset_idsarray<string>ConditionalAsset IDs returned by the asset upload endpoint. Up to 10 image assets and 1 video asset per search. Duplicates are deduplicated. Image and video search must be enabled on your account.
callback_urlstringYesHTTPS URL to receive the webhook result (max 2,048 characters).

A search must include at least one of query, context, or asset_ids. The request body must also include data.type set to "supe_searches"; bodies that omit or mismatch this value receive a 400 Bad Request.

Example requests

Text-only search

curl -X POST https://api.soundstripe.com/v1/supe/search \
  -H "Authorization: Token YOUR_API_KEY" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": {
      "type": "supe_searches",
      "attributes": {
        "query": "upbeat indie rock for a travel vlog",
        "context": "Summer road trip montage with golden-hour visuals",
        "callback_url": "https://your-app.com/webhooks/supe"
      }
    }
  }'

Search referencing uploaded assets

curl -X POST https://api.soundstripe.com/v1/supe/search \
  -H "Authorization: Token YOUR_API_KEY" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": {
      "type": "supe_searches",
      "attributes": {
        "context": "Opening title sequence, cinematic and tense",
        "asset_ids": [
          "550e8400-e29b-41d4-a716-446655440000",
          "550e8400-e29b-41d4-a716-446655440001"
        ],
        "callback_url": "https://your-app.com/webhooks/supe"
      }
    }
  }'

Response shapes

202 Accepted (search enqueued)

The search is processing. The full result will be delivered to your callback_url via webhook.

{
  "data": {
    "id": "fa9b5222768b...",
    "type": "supe_searches",
    "attributes": {
      "status": "processing",
      "query": "upbeat indie rock for a travel vlog",
      "context": "Summer road trip montage with golden-hour visuals",
      "callback_url": "https://your-app.com/webhooks/supe",
      "asset_ids": []
    },
    "links": {
      "self": "https://api.soundstripe.com/v1/supe/search/fa9b5222768b..."
    }
  },
  "links": {
    "self": "https://api.soundstripe.com/v1/supe/search"
  }
}

200 OK (cache hit)

An equivalent search was already answered within the last 24 hours for your API key. The full result is returned inline and no webhook is sent. Each returned song uses the same JSON:API shape as GET /v1/songs/:id plus two song-level booleans (has_vocal_version, has_instrumental_version). The response includes audio_files and artists resources for every referenced relationship.

{
  "data": {
    "id": "fa9b5222768b...",
    "type": "supe_searches",
    "attributes": {
      "status": "completed",
      "query": "upbeat indie rock for a travel vlog",
      "context": "Summer road trip montage with golden-hour visuals",
      "asset_ids": []
    },
    "relationships": {
      "songs": {
        "data": [
          { "id": "12556", "type": "songs" }
        ]
      }
    },
    "links": {
      "self": "https://api.soundstripe.com/v1/supe/search/fa9b5222768b..."
    }
  },
  "links": {
    "self": "https://api.soundstripe.com/v1/supe/search"
  },
  "included": [
    {
      "id": "12556",
      "type": "songs",
      "attributes": {
        "title": "After The Storm",
        "description": "A low energy, classical song that is best described as sad and reflective.",
        "energy": "low",
        "explicit": false,
        "lyrics": "",
        "bpm": 90,
        "key": { "name": "F", "mode": "minor" },
        "tags": {
          "genre": ["Classical", "Underscore", "Soundtrack / Cinematic"],
          "mood": ["Calm", "Reflective", "Sad"],
          "instrument": ["Piano", "Strings"],
          "characteristic": ["Atmospheric", "Beautiful", "Minimal"]
        },
        "playlist_ids": [4012, 4097],
        "stems": "https://cdn.soundstripe.com/.../Moments_AfterTheStorm.zip?key=YOUR_API_KEY&search_id=fa9b5222768b...&token=...",
        "has_vocal_version": false,
        "has_instrumental_version": true
      },
      "relationships": {
        "artists": { "data": [{ "id": "506", "type": "artists" }] },
        "audio_files": { "data": [{ "id": "47652", "type": "audio_files" }] }
      },
      "links": {
        "self": "https://api.soundstripe.com/v1/songs/12556"
      }
    },
    {
      "id": "47652",
      "type": "audio_files",
      "attributes": {
        "description": "Primary",
        "song_id": "12556",
        "instrumental": true,
        "duration": 226.08,
        "versions": {
          "mp3": "https://cdn.soundstripe.com/.../mp3_Moments_AfterTheStorm_FULL.mp3?key=YOUR_API_KEY&search_id=fa9b5222768b...&token=...",
          "wav": "https://cdn.soundstripe.com/.../wav_Moments_AfterTheStorm_FULL.wav?key=YOUR_API_KEY&search_id=fa9b5222768b...&token=..."
        }
      }
    },
    {
      "id": "506",
      "type": "artists",
      "attributes": {
        "name": "Moments",
        "image": "https://soundstripe-artist-production.imgix.net/.../artist-506.jpg?h=100&w=100"
      }
    }
  ]
}

Song attributes

Each song in the included array contains the following attributes:

AttributeTypeDescription
titlestringSong title.
descriptionstringShort text description of the song (possibly empty).
energystringEnergy level: very_low, low, medium, or high.
explicitbooleanWhether the song contains explicit content.
lyricsstringSong lyrics (possibly empty).
bpminteger or nullBeats per minute.
keyobjectMusical key.
  • name [string]: The key's name, e.g., F.
  • mode [string]: The key's mode, e.g., minor.
tagsobjectTags grouped by category.
  • genre [array<string>]: Genres
  • mood [array<string>]: Moods
  • instrument [array<string>]: Instruments
  • characteristic [array<string>]: Characteristics
playlist_idsarray<integer>Curated playlist IDs the requesting API key is entitled to see.
stemsstring or nullSigned URL to the song's stems bundle, or null when stems are unavailable.
has_vocal_versionbooleantrue if at least one audio file in the song's roster has lead vocals.
has_instrumental_versionbooleantrue if at least one audio file in the song's roster is instrumental or background-vocal only.

This is the same attribute set returned by GET /v1/songs/:id, plus the two has_*_version booleans.

Included resources

The top-level included array contains every audio_files and artists resource referenced by the returned songs. Each resource appears at most once even if multiple songs reference it.

audio_files resource

AttributeTypeDescription
descriptionstringAudio file description (possibly empty).
song_idstringParent song ID.
instrumentalbooleantrue when the audio file's vocal degree is not lead vocal.
durationnumber or nullDuration in seconds.
versions.mp3stringSigned URL to the MP3 file. Watermarked on non-live keys.
versions.wavstring or nullSigned URL to the WAV file. null for non-live keys.

The audio_files array includes both the primary audio file and any stem audio files. The primary audio file appears first in the order returned by GET /v1/songs/:id. There is no flag distinguishing primary from stem audio files; rely on the array order if you need only the primary.

artists resource

AttributeTypeDescription
namestringArtist name.
imagestring or nullPublic profile image URL (unsigned, no expiry).

Signed URLs

Every signed URL in the response (audio files and stems) carries:

ParameterValueNotes
keyYour API key UUIDThe signed URL is bound to your account.
search_idThe response's top-level data.idInformational; useful for joining CDN access logs back to the originating search.
token, expiresSignature and expiryThe URL remains usable for 7 days from response generation.

The search_id parameter is informational and is not part of the signature. Signed URLs expire 7 days after the response is generated; do not cache them long-term. If a URL is approaching expiry, fetch a fresh response via GET /v1/supe/search/{search_id}.

Live vs non-live API keys

API key typeversions.mp3versions.wav
Live (production)Signed URL to full MP3Signed URL to full WAV
Non-live (test or trial)Signed URL to watermarked MP3null

Error responses

All error responses follow JSON:API format. Codes that carry limit values include them under meta so you can branch programmatically:

{
  "errors": [
    {
      "detail": "Search may include up to 10 images.",
      "code": "image_count_exceeded",
      "meta": { "limit": 10 },
      "status": 422
    }
  ]
}
StatusCodeDescription
401(none)Missing or invalid API key.
400(none)Request body is missing data.type or data.type is not "supe_searches".
400bad_requestasset_ids is malformed (not an array, contains non-strings, or exceeds the hard size cap).
403unauthorizedAPI key does not have access to Supe Search for the submitted inputs.
422insufficient_intentSubmission has no query, no asset_ids, and either no context or fewer than 12 characters of substantive context.
422context_too_longcontext exceeds 2,000 characters.
422image_count_exceededMore than 10 images referenced. meta.limit carries the customer-facing limit.
422video_count_exceededMore than 1 video referenced. meta.limit carries the customer-facing limit.
422asset_unavailableA referenced asset ID does not exist for this API key.
422asset_failedA referenced asset reached the failed terminal state.
422asset_blockedA referenced asset was blocked by safety filters.
422asset_expiredA referenced asset's analysis is no longer available.
422(none)Other validation error (query too long, invalid or HTTP callback URL, private-IP callback URL).
429(none)Rate limit exceeded.
Body Params
data
object
Responses

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/vnd.api+json