# Musik-API och CLI

> Förvandla en idé eller dina texter till en låt från dina egna skript. Använd samma konto, krediter och privata bibliotek som appen.

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

## Anslut ditt konto

[Skapa ett konto](https://wordsintomusic.com/create/) och verifiera din e-post.

Öppna Inställningar och skapa en API-nyckel. [API-nycklar](https://wordsintomusic.com/app/settings/)

Förvara nyckeln på din server eller i en hemlig hanterare. Skicka den som en Authorization-header, aldrig i en URL eller frontend-kod.

Nycklar upphör att gälla efter 90 dagar. Du kan ha fem aktiva nycklar och återkalla vilken nyckel som helst omedelbart i Inställningar. Skrivskyddade nycklar kan inte generera låtar.

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

## Förbered, starta och kontrollera din låt

Förbered först en brief utan att spendera en kredit. Att starta den förberedelsen använder en befintlig låtkredit. Behåll samma förfrågnings-ID vid omförsök. En timeout får inte starta en annan låt.

Skicka denna JSON till POST /v1/songs/prepare. Skicka sedan dess preparedRequestId till POST /v1/songs/start. Kontrollera GET /v1/jobs/{jobId} med minst 15 sekunders mellanrum. När den är klar, öppna den returnerade länken till det privata biblioteket för att lyssna eller ladda ner.

Låtspråk som stöds är engelska, spanska, tyska, franska, brasiliansk portugisiska, italienska, nederländska, polska, svenska, japanska och koreanska. Begär 60 till 180 sekunder. Använd textläget för din egen låttext eller instrumental: true för musik utan sång.

```json
{
  "requestId": "my-first-song-20261021",
  "input": {
    "mode": "idea",
    "idea": "En hoppfull låt om att börja om i en ny stad",
    "direction": "Varm akustisk pop, stadiga trummor, mjuk sång",
    "language": "sv",
    "duration": 120
  },
  "uiLocale": "sv"
}
```

## API-slutpunkter

API:ets bas-URL är `https://mcp.wordsintomusic.com/v1`. [Ladda ner OpenAPI-specifikationen](https://wordsintomusic.com/sv/openapi.json) för förfrågningsfält, gränser, behörigheter och svarsformat.

| Metod och sökväg | Åtgärd |
| --- | --- |
| `GET /v1/account` | Kontrollera dina tillgängliga låtkrediter |
| `POST /v1/billing/checkout` | Skapa en Stripe-kassalänk |
| `POST /v1/songs/prepare` | Förbered en låt utan att spendera en kredit |
| `POST /v1/songs/start` | Generera den förberedda låten med en befintlig kredit |
| `GET /v1/jobs/{jobId}` | Kontrollera genereringsstatus |
| `GET /v1/songs` | Lista ditt privata låtbibliotek |
| `GET /v1/songs/{id}` | Läs en av dina låtar |

https://mcp.wordsintomusic.com/v1

[Ladda ner OpenAPI-specifikationen](https://wordsintomusic.com/openapi.json)

## OAuth-API för anslutna appar

Zapier och andra anslutna appar använder OAuth 2.0 i stället för en API-nyckel. Användaren loggar in på Words into Music och godkänner varje behörighet. Sedan skickar appen JSON-förfrågningar till en enda HTTPS-slutpunkt.

```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
```

Använd flödet med auktoriseringskod och S256 PKCE. Åtkomsttoken går ut efter 15 minuter. För att förnya en token skickar du grant_type=refresh_token, förnyelsetoken och ditt client_id till token-URL:en. Varje förnyelse returnerar en ny förnyelsetoken som gäller i 30 dagar.

Skicka åtkomsttoken i headern Authorization: Bearer, tillsammans med Content-Type: application/json och Accept: application/json, text/event-stream. Varje förfrågan är ett JSON-RPC 2.0-meddelande tools/call som anger en åtgärd och dess argument.

```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"]
    }
  }
}
```

Datan finns i result.structuredContent. Fälten motsvarar REST-svaret för samma åtgärd i OpenAPI-specifikationen. En misslyckad åtgärd returnerar result.isError: true med en felkod. En saknad eller utgången åtkomsttoken returnerar 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 returnerar upp till 20 låtar per förfrågan, nyaste först. Skicka med den returnerade cursor för att läsa nästa sida. En cursor med värdet null betyder att det inte finns fler låtar. createdAt anges i Unix-millisekunder. url öppnar låtens privata bibliotekssida, där ägaren måste logga in.

| Åtgärd | Behörighet | Åtgärd |
| --- | --- | --- |
| `get_account_usage` | `account:read` | Kontrollera dina tillgängliga låtkrediter |
| `list_songs` | `songs:read` | Lista ditt privata låtbibliotek |
| `get_song` | `songs:read` | Läs en av dina låtar |
| `get_song_job` | `songs:read` | Kontrollera genereringsstatus |
| `prepare_song` | `songs:create` | Förbered en låt utan att spendera en kredit |
| `start_song` | `songs:create` | Generera den förberedda låten med en befintlig kredit |
| `create_checkout_link` | `songs:create` | Skapa en Stripe-kassalänk |

Zapier-integrationen använder två åtgärder. Anslutningstestet anropar get_account_usage och märker anslutningen med accountReference, en stabil kod som inte avslöjar e-postadressen eller konto-ID:t. Utlösaren New Song anropar list_songs med limit 20 och följer cursor genom högst fem sidor.

OAuth-förfrågningar räknas mot samma kontogräns på 120 förfrågningar per minut som API-nycklar. Att läsa kontoanvändningen eller låtbiblioteket kostar inga krediter.

## Använd kommandoraden

Använd Node.js 22 eller senare. Skicka nyckeln för inloggning via standardinmatning, eller ange WIM_API_KEY från din hemlighetshanterare. Placera den inte i kommandoradsargument eller shell-historik. Kör wim --help för detaljer.

```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
```

## Krediter, gränser och integritet

Om du behöver låtkrediter returnerar API:et HTTP 402. Välj ett erbjudande från GET /v1/account, skicka sedan POST /v1/billing/checkout med ditt bekräftade val. Betala på Stripe utan att logga in på en annan webbplats. Kontrollera ditt saldo och försök igen med det ursprungliga preparedRequestId efter att betalningen har bekräftats.

API-åtkomst och CLI har ingen separat prenumeration. Att generera en inspelning använder din befintliga låtkvot, med samma kontogränser som appen. API:et debiterar dig aldrig automatiskt.

Endast nyckelägarens låtar kan läsas. Texter returneras endast när de begärs. Att återkalla en nyckel stoppar nya API-anrop, medan en redan accepterad låt fortsätter att bearbetas.

Gatewayen tillåter upp till 30 API-förfrågningar per minut per IP. API- och MCP-anrop delar också en kontogräns på 120 förfrågningar per minut. Respektera Retry-After vid ett 429-svar. Lyckade förberedelse-ID:n förblir tillgängliga för omförsöksskydd i 30 dagar efter utgången.

För assistentanslutningar, använd vår [MCP installationsguide](https://wordsintomusic.com/sv/mcp/). För kontokvoter, se [Prissättning](https://wordsintomusic.com/sv/pricing/).
