# 音楽APIとCLI

> あなたのアイデアや歌詞を、独自のスクリプトから曲に変えましょう。アプリと同じアカウント、クレジット、プライベートライブラリを使用します。

[llms.txt](https://wordsintomusic.com/ja/developers/llms.txt)

## アカウントを接続

[アカウントを作成](https://wordsintomusic.com/create/) し、メールアドレスを確認してください。

設定を開き、APIキーを作成してください。 [APIキー](https://wordsintomusic.com/app/settings/)

キーはサーバーまたはシークレットマネージャーに保管してください。Authorizationヘッダーとして送信し、URLやフロントエンドコードには決して含めないでください。

キーは90日後に期限切れになります。5つのアクティブなキーを持つことができ、設定でキーを即座に失効させることができます。読み取り専用キーでは曲を生成できません。

```bash
curl https://mcp.wordsintomusic.com/v1/account \
  -H "Authorization: Bearer $WIM_API_KEY"
```

## 曲の準備、開始、確認

まず、クレジットを消費せずにブリーフを準備します。その準備を開始すると、既存のソングクレジットを1つ消費します。再試行時には同じリクエストIDを保持してください。タイムアウトによって別の曲が開始されることはありません。

このJSONをPOST /v1/songs/prepareに送信します。次に、そのpreparedRequestIdをPOST /v1/songs/startに送信します。GET /v1/jobs/{jobId}を少なくとも15秒間隔で確認してください。準備ができたら、返されたプライベートライブラリリンクを開いて聴いたりダウンロードしたりできます。

対応する曲の言語は、英語、スペイン語、ドイツ語、フランス語、ブラジルポルトガル語、イタリア語、オランダ語、ポーランド語、スウェーデン語、日本語、韓国語です。長さは60～180秒で指定してください。自分の歌詞を使う場合は歌詞モードを、ボーカルなしの音楽には instrumental: true を使用してください。

```json
{
  "requestId": "my-first-song-20261021",
  "input": {
    "mode": "idea",
    "idea": "新しい街で再出発する希望に満ちた歌",
    "direction": "温かいアコースティックポップ、安定したドラム、優しいボーカル",
    "language": "ja",
    "duration": 120
  },
  "uiLocale": "ja"
}
```

## APIエンドポイント

APIのベースURLは `https://mcp.wordsintomusic.com/v1`. [OpenAPI仕様をダウンロードする](https://wordsintomusic.com/ja/openapi.json) リクエストフィールド、制限、権限、レスポンス形式について

| メソッドとパス | アクション |
| --- | --- |
| `GET /v1/account` | 利用可能なソングクレジットを確認する |
| `POST /v1/billing/checkout` | Stripeのチェックアウトリンクを作成する |
| `POST /v1/songs/prepare` | クレジットを消費せずに曲を準備する |
| `POST /v1/songs/start` | 既存のクレジットを1つ使用して準備済みの曲を生成する |
| `GET /v1/jobs/{jobId}` | 生成ステータスを確認する |
| `GET /v1/songs` | プライベートソングライブラリを一覧表示する |
| `GET /v1/songs/{id}` | 自分の曲を1つ読み込む |

https://mcp.wordsintomusic.com/v1

[OpenAPI仕様をダウンロードする](https://wordsintomusic.com/openapi.json)

## 連携アプリ向けOAuth API

Zapierなどの連携アプリは、APIキーの代わりにOAuth 2.0を使います。ユーザーがWords into Musicにサインインし、各権限を承認します。その後、アプリは1つのHTTPSエンドポイントにJSONリクエストを送信します。

```http
Authorization URL  GET   https://mcp.wordsintomusic.com/authorize
Token URL          POST  https://mcp.wordsintomusic.com/token
API endpoint       POST  https://mcp.wordsintomusic.com/mcp
Discovery          GET   https://mcp.wordsintomusic.com/.well-known/oauth-authorization-server
Scopes             account:read songs:read songs:create offline_access
```

S256 PKCEを使った認可コードフローを利用してください。アクセストークンの有効期限は15分です。更新するには、grant_type=refresh_token、リフレッシュトークン、client_idをトークンURLに送信します。更新するたびに、30日間有効な新しいリフレッシュトークンが返されます。

アクセストークンはAuthorization: Bearerヘッダーで送信し、Content-Type: application/jsonとAccept: application/json, text/event-streamを指定します。各リクエストは、1つの操作とその引数を指定するJSON-RPC 2.0のtools/callメッセージです。

```http
POST https://mcp.wordsintomusic.com/mcp
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
Accept: application/json, text/event-stream

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_account_usage",
    "arguments": {}
  }
}

HTTP/1.1 200 OK
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"accountReference\":\"WIM-3F9A1C07B2D4\",\"availableSongs\":4,\"reservedSongs\":0,\"songCreditCost\":1,\"accountUrl\":\"https://wordsintomusic.com/app/songs/\",\"supportedLanguages\":[\"en\",\"es\",\"de\",\"fr\",\"pt-BR\",\"it\",\"nl\",\"pl\",\"sv\",\"ja\",\"ko\"]}"
      }
    ],
    "structuredContent": {
      "accountReference": "WIM-3F9A1C07B2D4",
      "availableSongs": 4,
      "reservedSongs": 0,
      "songCreditCost": 1,
      "accountUrl": "https://wordsintomusic.com/app/songs/",
      "supportedLanguages": ["en", "es", "de", "fr", "pt-BR", "it", "nl", "pl", "sv", "ja", "ko"]
    }
  }
}
```

データはresult.structuredContentに入ります。フィールドは、OpenAPI仕様にある同じ操作のRESTレスポンスと同じです。失敗した操作はresult.isError: trueとエラーコードを返します。アクセストークンがない場合や期限切れの場合はHTTP 401を返します。

```http
POST https://mcp.wordsintomusic.com/mcp
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
Accept: application/json, text/event-stream

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "list_songs",
    "arguments": {
      "limit": 20
    }
  }
}

HTTP/1.1 200 OK
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"songs\":[{\"id\":\"sample-song-a1b2c3\",\"title\":\"Sample Song\",\"language\":\"en\",\"duration\":120,\"createdAt\":1792488600000,\"favorite\":false,\"url\":\"https://wordsintomusic.com/app/songs/sample-song-a1b2c3/\"}],\"cursor\":null}"
      }
    ],
    "structuredContent": {
      "songs": [
        {
          "id": "sample-song-a1b2c3",
          "title": "Sample Song",
          "language": "en",
          "duration": 120,
          "createdAt": 1792488600000,
          "favorite": false,
          "url": "https://wordsintomusic.com/app/songs/sample-song-a1b2c3/"
        }
      ],
      "cursor": null
    }
  }
}
```

list_songsは1回のリクエストで最大20曲を新しい順に返します。返されたcursorを渡すと次のページを読み込めます。cursorがnullの場合、それ以上の曲はありません。createdAtはUnixミリ秒です。urlは曲の非公開ライブラリページを開き、閲覧には所有者のサインインが必要です。

| 操作 | 権限 | アクション |
| --- | --- | --- |
| `get_account_usage` | `account:read` | 利用可能なソングクレジットを確認する |
| `list_songs` | `songs:read` | プライベートソングライブラリを一覧表示する |
| `get_song` | `songs:read` | 自分の曲を1つ読み込む |
| `get_song_job` | `songs:read` | 生成ステータスを確認する |
| `prepare_song` | `songs:create` | クレジットを消費せずに曲を準備する |
| `start_song` | `songs:create` | 既存のクレジットを1つ使用して準備済みの曲を生成する |
| `create_checkout_link` | `songs:create` | Stripeのチェックアウトリンクを作成する |

Zapier連携では2つの操作を使います。接続テストはget_account_usageを呼び出し、accountReferenceで接続にラベルを付けます。これはメールアドレスやアカウントIDを明かさない固定のコードです。New Songトリガーはlimit 20でlist_songsを呼び出し、cursorをたどって最大5ページまで読み込みます。

OAuthリクエストは、APIキーと同じ1分あたり120リクエストのアカウント制限に含まれます。アカウントの利用状況や曲ライブラリの読み取りではクレジットを消費しません。

## コマンドラインを使用する

Node.js 22以降を使用してください。標準入力でログインキーを渡すか、シークレットマネージャーからWIM_API_KEYを提供してください。コマンド引数やシェル履歴に入れないでください。詳細については `wim --help` を実行してください。

```bash
npm install -g words-into-music-cli
wim login --key-stdin
wim account
wim prepare --file brief.json
wim start PREPARED_REQUEST_ID --confirm
wim job JOB_ID
wim songs --limit 10
```

## クレジット、制限、プライバシー

ソングクレジットが必要な場合、APIはHTTP 402を返します。GET /v1/accountからオファーを選択し、確認済みの選択肢でPOST /v1/billing/checkoutを実行してください。別のウェブサイトにログインすることなくStripeで支払えます。支払いが確認された後、残高を確認し、元のpreparedRequestIdを再試行してください。

APIアクセスとCLIには個別のサブスクリプションはありません。レコーディングの生成には、既存のソングアローワンスが使用され、アプリと同じアカウント制限が適用されます。APIが自動的に課金することはありません。

キー所有者の曲のみ読み取ることができます。歌詞はリクエストされた場合にのみ返されます。キーを失効させると新しいAPI呼び出しは停止しますが、すでに受け付けられた曲は処理を続行します。

ゲートウェイは、IPアドレスごとに1分あたり最大30件のAPIリクエストを許可します。APIおよびMCP呼び出しは、1分あたり120リクエストのアカウント制限も共有します。429レスポンスではRetry-Afterヘッダーを尊重してください。成功した準備IDは、期限切れ後30日間、再試行保護のために利用可能です。

アシスタント接続には、弊社の [MCPセットアップガイド](https://wordsintomusic.com/ja/mcp/). アカウントの許容量については、以下を参照してください [料金](https://wordsintomusic.com/ja/pricing/).
