{"openapi":"3.1.0","info":{"title":"AIMP3 API","version":"1.0.0","description":"セミナー動画・広告クリエイティブ向けの商用フリーBGMライブラリ。全曲 AI 生成のオリジナル楽曲で、商用利用可・クレジット表記不要。API キーは https://xaimp3.com/developers でメールアドレスを登録すると即時発行される。","license":{"name":"AIMP3 Free License v1.0","url":"https://xaimp3.com/license"}},"servers":[{"url":"https://xaimp3.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API キー（aimp3_live_ で始まる）"}},"schemas":{"Track":{"type":"object","properties":{"id":{"type":"string","example":"aimp3_0001"},"title":{"type":"string"},"duration":{"type":"number","description":"秒"},"scenes":{"type":"array","items":{"type":"string"},"description":"opening/main/trivia/cta/closing/uplift/shortad"},"useCases":{"type":"array","items":{"type":"string"},"description":"webinar/vsl/education/product/shorts/corporate"},"moods":{"type":"array","items":{"type":"string"}},"onomatopoeia":{"type":"array","items":{"type":"string"},"description":"キラキラ・しっとり等の感覚タグ"},"bpm":{"type":"number"},"key":{"type":"string"},"valence":{"type":"number","description":"0=落ち着いた 1=明るい"},"energy":{"type":"number","description":"0=静か 1=盛り上がる"},"build":{"type":"number","description":"0=平坦 1=じわじわ盛り上がる"},"duckFriendly":{"type":"boolean","description":"ナレーションの下に敷けるか"},"ngScenes":{"type":"array","items":{"type":"string"},"description":"使うべきでない場面"},"highlightSec":{"type":"number","description":"サビの開始位置（秒）"},"variants":{"type":"object","description":"full/60s/30s/15s/loop/preview それぞれの URL と秒数"}}},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"renewUrl":{"type":"string","description":"api_key_expired のとき、再発行ページの URL"},"action":{"type":"string","description":"api_key_expired のとき reissue_api_key"},"retryAfterSeconds":{"type":"integer","description":"rate_limited のとき"}}}}}},"responses":{"Unauthorized":{"description":"キーが無い・不正・期限切れ。期限切れの場合は code=api_key_expired と renewUrl が返るので、利用者に再発行を案内すること。","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"レート制限（60 リクエスト/分、ダウンロードは 12 回/分）。retryAfterSeconds 秒待つ。","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v1/tracks":{"get":{"summary":"条件で楽曲を絞り込む","parameters":[{"name":"scene","in":"query","schema":{"type":"string"},"description":"opening/main/trivia/cta/closing/uplift/shortad（カンマ区切り可）"},{"name":"useCase","in":"query","schema":{"type":"string"},"description":"webinar/vsl/education/product/shorts/corporate"},{"name":"duration","in":"query","schema":{"type":"integer"},"description":"15 / 30 / 60。その尺の版を持つ曲に絞る"},{"name":"bpmMin","in":"query","schema":{"type":"number"}},{"name":"bpmMax","in":"query","schema":{"type":"number"}},{"name":"duckFriendly","in":"query","schema":{"type":"boolean"},"description":"ナレーションの下に敷ける曲だけ"},{"name":"onomatopoeia","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"},"description":"自由入力"},{"name":"limit","in":"query","schema":{"type":"integer","default":20,"maximum":100}},{"name":"offset","in":"query","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"integer"},"tracks":{"type":"array","items":{"$ref":"#/components/schemas/Track"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/search":{"post":{"summary":"自然文で楽曲を探す","description":"「落ち着いたウェビナー待機画面用、ナレの下に敷ける」のような文章をそのまま渡せる。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"limit":{"type":"integer","default":10,"maximum":50},"duckFriendly":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"query が未指定"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/tracks/{id}":{"get":{"summary":"楽曲の詳細と、雰囲気の近い曲","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"description":"見つからない"}}}},"/api/v1/tracks/{id}/download":{"get":{"summary":"ダウンロード用の URL を得る","description":"無料枠は 100 ダウンロード/月。返る url から実ファイルを取得する。","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"variant","in":"query","schema":{"type":"string","enum":["full","60s","30s","15s","loop","preview"],"default":"full"}}],"responses":{"200":{"description":"OK"},"400":{"description":"その尺が無い"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/api/v1/license":{"post":{"summary":"ライセンス証明書を発行する","description":"第三者（クライアント・広告審査）に提示できる公開 URL が返る。","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["trackId"],"properties":{"trackId":{"type":"string"},"holder":{"type":"string"},"usedIn":{"type":"string"}}}}}},"responses":{"201":{"description":"発行した"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/api/v1/me":{"get":{"summary":"キーの状態・有効期限・利用状況","description":"有効期限まで 14 日を切ると warning と renewUrl が付く。","responses":{"200":{"description":"OK"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/api/popular":{"get":{"summary":"ダウンロードランキング（認証不要）","security":[],"parameters":[{"name":"days","in":"query","schema":{"type":"integer","default":30}},{"name":"limit","in":"query","schema":{"type":"integer","default":10}}],"responses":{"200":{"description":"OK"}}}}}}