---
canonical: https://wouldliker.com/developers/examples/curl/
meta-description: Six worked curl requests against the Wouldliker recommendation API. Recommend, AIGC-aware, brief, two-call combo, football routing, error shapes.
meta-og:description: Six worked curl requests against the live Wouldliker API.
meta-og:title: curl examples | Wouldliker
meta-og:type: website
meta-og:url: https://wouldliker.com/developers/examples/curl/
meta-robots: index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1
meta-theme-color: #0c0c0a
meta-viewport: width=device-width, initial-scale=1.0
title: curl examples | Wouldliker
---


★ Two POST calls★ No auth★ CORS open★ Same input returns the same answer★ Two POST calls★ No auth★ CORS open★ Same input returns the same answer

[![](https://wouldliker.com/assets/brand/wouldliker-tab-icon-192.png?v=20260515-unified-1)Wouldliker](https://wouldliker.com/)

[Sounds](https://wouldliker.com/sounds/)[Breakouts](https://wouldliker.com/breakout-view-examples/)[Matrix](https://wouldliker.com/recommendation-matrix/)[Developers](https://wouldliker.com/developers/)

[Use Vlog](https://www.tiktok.com/music/Vlog-7501680481626785808)

Examples › curl

# curl  *examples.*

Quick answer: use these curl requests to test `/api/recommend` and `/api/brief` before wiring Wouldliker into an agent or uploader. Responses return official TikTok sound URLs, proof context, captions, and boundary copy. Public proof is evidence of fit and momentum, not a guarantee of views.

[Back to examples→](https://wouldliker.com/developers/examples/)[Open API spec→](https://wouldliker.com/api/openapi.json)

01Quick start

## Recommend a  *sound.*

```bash
curl -sX POST https://wouldliker.com/api/recommend \
  -H "content-type: application/json" \
  -d '{
    "description": "morning routine and oatmeal cooking",
    "platform": "tiktok",
    "duration_seconds": 22
  }'
```

Returns `primary_sound.sound_slug` = `vlog`, the TikTok sound URL, a "why" line, public proof examples, and a `copy_boundary` line. Hand `tiktok_sound_url` to whatever attaches sounds at upload time.

02AIGC

## AI-generated  *product reveal.* {#aigc}

When the clip is AI-generated, set `is_aigc: true`. The response includes an `aigc_guidance` block. Some intents downgrade.

```bash
curl -sX POST https://wouldliker.com/api/recommend \
  -H "content-type: application/json" \
  -d '{
    "description": "AI-generated unboxing of a synthetic ceramic mug",
    "content_type": "product_reveal",
    "is_aigc": true
  }'
```

For AI-generated football content depicting real players, the recommendation downgrades to `vlog` with `downgrade_reason: "matched_intent_not_aigc_friendly"`. Do not override.

03Brief

## Brief +  *caption pack.*

```bash
curl -sX POST https://wouldliker.com/api/brief \
  -H "content-type: application/json" \
  -d '{
    "sound_slug":       "vlog",
    "description":      "morning routine and oatmeal",
    "platform":         "tiktok",
    "duration_seconds": 22
  }'
```

Paste `caption_pack.with_hashtags` into the post body, or split into description and first comment per your platform pattern.

04Two-call combo

## Describe →  *publishable pack.* {#combo}

The canonical pattern. Two calls, one publishable bundle.

```bash
DESC="Unboxing our new ceramic coffee mug , pour shot, warm morning light, 22 seconds"

REC=$(curl -sX POST https://wouldliker.com/api/recommend \
  -H "content-type: application/json" \
  -d "$(jq -n --arg d "$DESC" '{
    description:$d, platform:"tiktok", content_type:"product_reveal", duration_seconds:22
  }')")

SOUND=$(echo "$REC" | jq -r '.primary_sound.sound_slug')

BRIEF=$(curl -sX POST https://wouldliker.com/api/brief \
  -H "content-type: application/json" \
  -d "$(jq -n --arg d "$DESC" --arg s "$SOUND" '{
    sound_slug:$s, description:$d, platform:"tiktok", duration_seconds:22
  }')")

jq -n --argjson rec "$REC" --argjson brief "$BRIEF" '{
  sound_slug:        $rec.primary_sound.sound_slug,
  sound_name:        $rec.primary_sound.name,
  tiktok_sound_url:  $rec.primary_sound.tiktok_sound_url,
  why:               $rec.why,
  proof:             $rec.proof_examples,
  brief:             $brief.clip_brief,
  caption:           $brief.caption_pack.with_hashtags,
  copy_boundary:     $rec.copy_boundary
}'
```

05Football

## Football  *routing.* {#football}

```bash
# Returns hala-madrid (payoff / hype):
curl -sX POST https://wouldliker.com/api/recommend \
  -H "content-type: application/json" \
  -d '{"description": "Real Madrid goal edit, hype payoff"}' | jq .primary_sound.sound_slug

# Returns barcelona (reflective / elegant):
curl -sX POST https://wouldliker.com/api/recommend \
  -H "content-type: application/json" \
  -d '{"description": "reflective Barcelona tribute, elegant build"}' | jq .primary_sound.sound_slug
```

Keyword anchors do the routing. `goal`, `hype`, `payoff`, `highlight`, `winner` route to Hala Madrid. `reflective`, `nostalgic`, `elegant`, `anthem`, `tribute` route to Barcelona.

06Errors

## Error  *shapes.*

```bash
# Too-short description → 400 field_too_short
curl -sX POST https://wouldliker.com/api/recommend \
  -H "content-type: application/json" \
  -d '{"description": "ab"}'

# Unknown sound_slug → 422 unknown_intent + valid_slugs list
curl -sX POST https://wouldliker.com/api/brief \
  -H "content-type: application/json" \
  -d '{"sound_slug": "xyzzy", "description": "abc"}'

# Unsupported language → 422 unsupported_language
curl -sX POST https://wouldliker.com/api/recommend \
  -H "content-type: application/json" \
  -d '{"description": "morning vlog", "language": "de"}'
```

## Cached  *GETs.*

GET endpoints are cacheable (`Cache-Control: public, max-age=300, stale-while-revalidate=3600`). Pre-fetch and store on your side.

```bash
curl -s https://wouldliker.com/api/sounds        | jq '.sounds[] | {slug: .sound_slug, name, state: .saturation_state}'
curl -s https://wouldliker.com/api/sounds/vlog   | jq '.sound | {clip_job, fit_note, avoid_note}'
curl -s https://wouldliker.com/api/momentum      | jq '{leading: .leading.sound_slug, rising: [.rising[].sound_slug]}'
curl -s https://wouldliker.com/api/health
```

Rate limit on POSTs: 60 req/min/IP. GETs unlimited and CDN-cacheable.

WOULDLIKER

★ Sound layer for short-form video

Built to be readable by people, Google, and AI assistants. Public proof. No fake counters. No guaranteed views.

##### Sounds

- [Vlog](https://wouldliker.com/sounds/vlog/)
- [Core](https://wouldliker.com/sounds/core/)
- [Presentation](https://wouldliker.com/sounds/presentation/)
- [Product Reveal](https://wouldliker.com/best-audio-for-product-videos/)

##### Proof & guides

- [Breakouts](https://wouldliker.com/breakout-view-examples/)
- [Proof](https://wouldliker.com/proof-links/)
- [Matrix](https://wouldliker.com/recommendation-matrix/)
- [Football](https://wouldliker.com/best-tiktok-sounds-for-football-edits/)

##### Data

- [Developers](https://wouldliker.com/developers/)
- [Examples](https://wouldliker.com/developers/examples/)
- [llms.txt](https://wouldliker.com/llms.txt)

© 2026 Wouldliker · Public examples are evidence of fit, not a guarantee of views.
