---
title: SDKs | RunAPI
description: Installez un SDK RunAPI typé, authentifiez-le avec une clé API et choisissez
  le cycle de vie de tâche adapté à votre application.
url: https://runapi.ai/fr/docs/resources/sdks.md
canonical: https://runapi.ai/fr/docs/resources/sdks
locale: fr
---

> Version HTML: https://runapi.ai/fr/docs/resources/sdks
> Index du site pour les agents: https://runapi.ai/llms.txt

# SDKs

Les SDKs RunAPI fournissent des clients typés pour les familles de modèles supportées en
JavaScript, Python, PHP, Java, Ruby et Go. Choisissez le package de langage
correspondant à la famille de modèles que votre application appelle.

## Installer un SDK de modèle

Installez le paquet correspondant à votre langage et à votre famille de modèles. Par exemple, installez le SDK JavaScript de Suno :

```shell
npm install @runapi.ai/suno@0.6.0
```

La même famille de modèles est disponible via le gestionnaire de paquets pour chaque
runtime pris en charge :

```shell
pip install runapi-suno==0.6.0
composer require runapi-ai/suno:0.4.0
gem install runapi-suno --version 0.6.0
go get github.com/runapi-ai/suno-sdk/go@v0.6.0
```

Pour Java, ajoutez le module Suno avec Gradle ou Maven :

```kotlin
dependencies {
  implementation("ai.runapi:runapi-suno:0.5.0")
}
```

```xml
<dependency>
  <groupId>ai.runapi</groupId>
  <artifactId>runapi-suno</artifactId>
  <version>0.5.0</version>
</dependency>
```

## Authentifier le client

Définissez `RUNAPI_API_KEY` dans l'environnement avant de créer un client. Le
SDK utilise une clé API RunAPI pour le même contexte de compte que vos requêtes REST
et votre workflow CLI.

```shell
export RUNAPI_API_KEY="runapi_..."
```

Créez et faites tourner des clés dans le [Guide
d'authentification](https://runapi.ai/fr/docs/guides/authentication.md). Conservez les clés dans votre gestionnaire de secrets
plutôt que dans le code source de l'application.

## Travailler avec les fichiers et les téléversements

Chaque client fournisseur expose des ressources `files` persistantes et des ressources `uploads` multipart
depuis son package principal. La méthode existante `files.create`
crée toujours une URL temporaire ; utilisez `files.createFile` en JavaScript,
Java et PHP, `files.create_file` en Python et Ruby, ou
`Files.CreateFile` en Go pour créer un objet File persistant.

```javascript
const file = await client.files.createFile({
  file: new Blob([fileBytes], { type: "application/pdf" }),
  filename: "knowledge.pdf",
  purpose: "user_data",
});

const bytes = await client.files.content(file.id);
await client.files.deleteFile(file.id);
```

Utilisez `uploads.create`, `addPart`, `complete` et `cancel` lorsqu'une requête
est divisée en Parts. Python et Ruby utilisent `add_part` ; Go utilise `AddPart`.
Consultez [Files and Uploads](https://runapi.ai/fr/docs/resources/files.md) pour les limites, les exemples REST
et le cycle de vie complet.

## Transcrire l'audio de manière synchrone

Le SDK de transcription OpenAI téléverse un fichier audio local et retourne la
transcription complétée dans la même requête. Les formats de réponse JSON
retournent un objet natif au langage ; les formats text, SRT et VTT retournent la
chaîne de réponse exacte.

```javascript
import { OpenaiTranscriptionClient } from "@runapi.ai/openai-transcription";

const client = new OpenaiTranscriptionClient();
const transcript = await client.speechToText.run({
  file: new Blob([audioBytes], { type: "audio/mpeg" }),
  filename: "interview.mp3",
  response_format: "json",
});
```

Consultez la [référence API de transcription audio
](https://runapi.ai/fr/docs/api/openai-transcription/speech-to-text.md) pour les formats de fichiers, les champs spécifiques au modèle et les formats de réponse.

## Travailler avec les tâches asynchrones

De nombreuses opérations multimédias sont asynchrones. Utilisez `create` pour soumettre une tâche
et recevoir son identifiant immédiatement, `get` pour récupérer son état actuel, ou
`run` pour soumettre et interroger jusqu'à ce qu'elle atteigne un état terminal. Dans un gestionnaire de requête web, préférez `create` associé à un rappel ou à un `get` différé
afin que la requête ne monopolise pas un worker.

### JavaScript

```javascript
import { SunoClient } from "@runapi.ai/suno";

const client = new SunoClient();
const result = await client.textToMusic.run({
  model: "suno-v5",
  vocal_mode: "auto_lyrics",
  prompt: "A short piano theme",
});

console.log(result.audios[0].audio_url);
```

### Python

```python
from runapi.suno import SunoClient

client = SunoClient()
result = client.text_to_music.run(
    model="suno-v4.5-plus",
    vocal_mode="auto_lyrics",
    prompt="A short piano theme",
)

print(result.audios[0].audio_url)
```

### PHP

```php
<?php

use RunApi\Suno\SunoClient;

$client = new SunoClient();
$result = $client->textToMusic->run([
    'model' => 'suno-v5.5',
    'vocal_mode' => 'auto_lyrics',
    'prompt' => 'A short piano theme',
]);

print_r($result->toArray());
```

### Ruby

```ruby
require "runapi/suno"

client = RunApi::Suno::Client.new
result = client.text_to_music.run(
  model: "suno-v4.5-plus",
  vocal_mode: "auto_lyrics",
  prompt: "A short piano theme"
)

puts result.dig("audios", 0, "audio_url")
```

### Go

```go
package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/runapi-ai/core-sdk/go/option"
    "github.com/runapi-ai/suno-sdk/go/suno"
)

func main() {
    client, err := suno.NewClient(option.WithAPIKey(os.Getenv("RUNAPI_API_KEY")))
    if err != nil {
        log.Fatal(err)
    }

    result, err := client.TextToMusic.Run(context.Background(), suno.TextToMusicParams{
        SunoBaseParams: suno.SunoBaseParams{Model: suno.ModelV45Plus},
        VocalMode: suno.VocalModeAutoLyrics,
        Prompt:    "A short piano theme",
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(result.ID)
}
```

### Java

```java
import ai.runapi.suno.SunoClient;
import ai.runapi.suno.types.CompletedTextToMusicResponse;
import ai.runapi.suno.types.TextToMusicModel;
import ai.runapi.suno.types.TextToMusicParams;

SunoClient client = SunoClient.builder()
    .apiKey(System.getenv("RUNAPI_API_KEY"))
    .build();

CompletedTextToMusicResponse result = client.textToMusic().run(
    TextToMusicParams.builder()
        .model(TextToMusicModel.SUNO_V5)
        .vocalMode("auto_lyrics")
        .prompt("A short piano theme")
        .build()
);
```

## Réutiliser un Style Persona

Créez un Style Persona à partir d'une URL audio publique, puis réutilisez le
`persona.id` renvoyé avec les quatre opérations musicales prises en charge. `persona_type:
"style"` applique des caractéristiques de genre et d'ambiance réutilisables. Cela ne garantit pas
le clonage de la voix de l'enregistrement source, la préservation sans perte de
son style, ni aucune similarité particulière avec l'audio source.

```javascript
import { SunoClient } from "@runapi.ai/suno";

const client = new SunoClient();
const referenceAudioUrl = "https://cdn.runapi.ai/public/samples/music.mp3";

const sampled = await client.addSamples.run({
  model: "suno-v5",
  audio_url: referenceAudioUrl,
  start_seconds: 0,
  end_seconds: 30,
});
const sourceAudioId = sampled.audios?.[0]?.id;
if (!sourceAudioId) throw new Error("The sample Task did not return an audio ID");

const { persona } = await client.generatePersona.run({
  task_id: sampled.id,
  audio_id: sourceAudioId,
  name: "Studio Style",
  description: "A warm and expressive acoustic pop style.",
});
const textToMusic = await client.textToMusic.run({
  model: "suno-v5",
  vocal_mode: "auto_lyrics",
  prompt: "An uplifting acoustic pop song about a rainy city night",
  persona_id: persona.id,
  persona_type: "style",
});

const coverAudio = await client.coverAudio.run({
  model: "suno-v5",
  upload_url: referenceAudioUrl,
  vocal_mode: "auto_lyrics",
  prompt: "Rework the reference track as acoustic pop",
  persona_id: persona.id,
  persona_type: "style",
});

const createMashup = await client.createMashup.run({
  model: "suno-v5",
  upload_url_list: [
    referenceAudioUrl,
    "https://cdn.runapi.ai/public/samples/audio-2.mp3",
  ],
  vocal_mode: "auto_lyrics",
  prompt: "Blend both tracks into an energetic acoustic pop mashup",
  persona_id: persona.id,
  persona_type: "style",
});

const extendMusic = await client.extendMusic.run({
  model: "suno-v5",
  upload_url: referenceAudioUrl,
  parameter_mode: "custom",
  instrumental: false,
  prompt: "Continue the arrangement with a brighter chorus",
  style: "Acoustic pop with warm piano",
  title: "Brighter Chorus",
  continue_at: 60,
  persona_id: persona.id,
  persona_type: "style",
});

console.log({
  textToMusic: textToMusic.audios[0]?.audio_url,
  coverAudio: coverAudio.audios[0]?.audio_url,
  createMashup: createMashup.audios[0]?.audio_url,
  extendMusic: extendMusic.audios[0]?.audio_url,
});
```

## Choisir le prochain flux de travail

Utilisez un SDK lorsque votre application bénéficie de constructeurs de requêtes typés
et d'assistants Task natifs au langage. Utilisez la [CLI RunAPI](https://runapi.ai/fr/docs/resources/cli.md) pour l'automatisation shell, les vérifications locales et
le débogage des callbacks. Pour les champs de requête exacts, les réponses de Task et les
erreurs, utilisez la [Référence API](https://runapi.ai/fr/docs/api/openai/chat-completions.md).

## Vidu Q4

Les packagesVidufournissent des ressources image-vidéo et référence-vidéo avec des assistants de création, de récupération et de tâches asynchrones. Utilisez `vidu-q4-image-to-video` ou `vidu-q4-reference-to-video` pour la ressource correspondante. Les noms de packages sont `@runapi.ai/vidu` pourJavaScript, `runapi-vidu` pourPythonetRuby, `runapi-ai/vidu` pourPHP, `ai.runapi:runapi-vidu` pourJavaet `github.com/runapi-ai/vidu-sdk/go` pourGo.

Consultez les exigences des images de référence et des fichiers MP3 dans le [guide de l’API des tâches](https://runapi.ai/fr/docs/guides/task-api/quickstart.md#generate-vidu-q4-videos)。 Consultez aussi [Tarifs image vers vidéo](https://runapi.ai/fr/models/vidu/q4-image-to-video) · [Tarifs références vers vidéo](https://runapi.ai/fr/models/vidu/q4-reference-to-video)。

---

## Plus de ressources de RunAPI

- [Accueil](https://runapi.ai/fr/.md)
- [Catalogue de modèles](https://runapi.ai/fr/models.md)
- [Tarifs](https://runapi.ai/fr/pricing.md)
- [Fournisseurs](https://runapi.ai/fr/models)
- [Documentation](https://runapi.ai/fr/docs/guides)
- [SDK](https://runapi.ai/fr/sdk.md)
- [CLI](https://runapi.ai/fr/cli.md)
- [Serveur MCP](https://runapi.ai/fr/mcp.md)
- [x402](https://runapi.ai/fr/x402.md)
- [Claude Code vs Cursor](https://runapi.ai/fr/claude-code-vs-cursor.md)
- [Configuration de l’API Cursor](https://runapi.ai/fr/cursor-api-setup.md)
- [RunAPI vs OpenRouter](https://runapi.ai/fr/openrouter-alternative.md)
- [Entreprise](https://runapi.ai/fr/contact.md)
- [Contact](https://runapi.ai/fr/contact.md)
- [Conditions](https://runapi.ai/fr/terms.md)
- [Confidentialité](https://runapi.ai/fr/privacy.md)
- [Index du site pour les agents](https://runapi.ai/llms.txt)

Contact: contact@runapi.ai

## Données structurées

```json
[
  {
    "@context": "https://schema.org",
    "inLanguage": "fr",
    "@type": "WebSite",
    "name": "RunAPI",
    "url": "https://runapi.ai/fr",
    "potentialAction": {
      "@type": "SearchAction",
      "target": {
        "@type": "EntryPoint",
        "urlTemplate": "https://runapi.ai/fr/models?q={search_term_string}"
      },
      "query-input": "required name=search_term_string"
    }
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "fr",
    "@type": "Organization",
    "name": "RunAPI",
    "url": "https://runapi.ai/fr",
    "logo": {
      "@type": "ImageObject",
      "url": "https://runapi.ai/fricon.svg"
    },
    "sameAs": [
      "https://github.com/runapi-ai"
    ]
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "fr",
    "@type": "TechArticle",
    "headline": "SDKs",
    "description": "Installez un SDK RunAPI typé, authentifiez-le avec une clé API et choisissez le cycle de vie de tâche adapté à votre application.",
    "url": "https://runapi.ai/fr/docs/resources/sdks",
    "mainEntityOfPage": "https://runapi.ai/fr/docs/resources/sdks"
  }
]
```
