> ## Documentation Index
> Fetch the complete documentation index at: https://docs.youka.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Authentification

> Configurer le YoukaClient avec votre clé API

Le SDK authentifie chaque requête avec une clé API bearer. Vous créez un `YoukaClient` une seule fois et le réutilisez pendant toute la durée de vie de votre processus.

## `new YoukaClient(options)`

```ts theme={null}
import { YoukaClient } from "@youka/fr/sdk";

const client = new YoukaClient({
  apiKey: process.env.YOUKA_API_KEY!,
});
```

### Options

<ParamField path="apiKey" type="string" required>
  Votre clé API Youka. Créez-en une sur
  [online.youka.io/account](https://online.youka.io/account) sous **API keys**.
</ParamField>

<ParamField path="fetch" type="typeof fetch">
  Implémentation `fetch` personnalisée. Par défaut, utilise le `fetch` global. Utilisez ceci pour
  injecter de la journalisation, des proxys ou un middleware de nouvelle tentative personnalisé.
</ParamField>

## Stocker la clé API

<Warning>
  Les clés API donnent accès à votre facturation. Ne les versionnez jamais dans le contrôle de source.
</Warning>

Modèles recommandés :

<Tabs>
  <Tab title="Environment variable">
    ```ts theme={null}
    const client = new YoukaClient({
      apiKey: process.env.YOUKA_API_KEY!,
    });
    ```
  </Tab>

  <Tab title="Secret manager">
    ```ts theme={null}
    import { getSecret } from "./my-secret-manager";

    const client = new YoukaClient({
      apiKey: await getSecret("youka-api-key"),
    });
    ```
  </Tab>
</Tabs>

## Injecter un fetch personnalisé

Chaque méthode du SDK utilise le `fetch` que vous passez au constructeur. Cela facilite l’ajout de journalisation ou de middleware :

```ts theme={null}
import { YoukaClient } from "@youka/fr/sdk";

const instrumentedFetch: typeof fetch = async (input, init) => {
  const start = Date.now();
  const response = await fetch(input, init);
  console.log(
    `${init?.method ?? "GET"} ${input} ${response.status} in ${Date.now() - start}ms`,
  );
  return response;
};

const client = new YoukaClient({
  apiKey: process.env.YOUKA_API_KEY!,
  fetch: instrumentedFetch,
});
```

## Options par requête

Chaque méthode accepte un deuxième ou troisième argument optionnel contenant des options au niveau de la requête :

```ts theme={null}
await client.projects.create(body, {
  idempotencyKey: "import-2026-04-08-song-001",
  signal: abortController.signal,
});
```

<ParamField path="idempotencyKey" type="string">
  Transmis en tant qu’en-tête `Idempotency-Key`. Réutiliser la même clé avec le même
  payload renvoie le résultat d’origine au lieu de créer un doublon. Voir [API
  idempotency](/fr/api/idempotency).
</ParamField>

<ParamField path="signal" type="AbortSignal">
  Signal d’annulation standard. Annule les requêtes en cours et les sondages de longue durée
  `client.tasks.wait(...)`, `client.projects.wait(...)` et
  `client.exports.wait(...)`.
</ParamField>

## Et ensuite

* [Projects](/fr/sdk/projects) — créez votre premier projet
* [Errors](/fr/sdk/errors) — gérer les échecs d’authentification
* [API authentication](/fr/api/authentication) — détails bruts des en-têtes HTTP
