---
title: "Analyser un fichier audio, un lien Spotify, un lien audio direct ou un ISRC"
method: POST
path: "/ai-music/jobs"
tags: ["ai-music"]
---

# Analyser un fichier audio, un lien Spotify, un lien audio direct ou un ISRC

`POST /ai-music/jobs`

## Request

- Base URL: `https://jam-jam.org/api/v1`
- URL: `https://jam-jam.org/api/v1/ai-music/jobs`
- Auth: one of:
  - none
  - HTTP bearer

Analyse asynchrone. JWT ou clé API personnelle, portée audio:write. Le navigateur peut aussi utiliser X-Jam-Anon-Token, émis puis renvoyé à chaque requête pour retrouver ses scans. Un seul travail non terminé par utilisateur ; un seul calcul sur la machine, priorité Premium. Résultats conservés 90 jours avec compte, 24 heures sans compte. Aucun audio conservé après traitement. Le service principal est prioritaire. Un lien Spotify ou ISRC peut ne fournir qu’un extrait : consulter result.primary.audioSource. YouTube non pris en charge. Si le service principal échoue, le secours peut traiter les fichiers seulement lorsqu’il est disponible ; une URL échoue avec link-unavailable.

## Request body

- union
  - object
    - `url` string, required
  - object
    - `spotifyTrackId` string, required
  - object
    - `isrc` string, required
  - object
    - `audioUrl` string, required

## Response `202`

Déposer un fichier pour Analyse Jam Jam

- AiMusicJob
  - `id` string, uuid, required
  - `state` 'uploading' | 'queued' | 'running' | 'cancelling' | 'done' | 'failed' | 'cancelled', required
  - `progress` number, required
  - `position` integer, nullable, required
  - `createdAt` number, required: Horodatage Unix en millisecondes
  - `result` AiMusicResult, required: Indice agrégé Analyse Jam Jam. Pas une probabilité ni une preuve d’origine.
    - `version` 'jamjam-audio-v1' | 'jamjam-audio-v2' | 'jamjam-audio-v3', required
    - `score` number, required
    - `verdict` 'signals-detected' | 'few-signals' | 'inconclusive', required
    - `agreement` integer, required
    - `analyses` 1 | 3, required
    - `durationSeconds` number, required
    - `analyzedSeconds` number, required
    - `detectors` object[]: Présent en v2. Les trois types couvrent le fichier entier sans trou ni chevauchement. Score normalisé 0–100, pas une probabilité calibrée. Chaque score est pondéré par la durée réelle de ses fenêtres, puis les trois scores sont moyennés à poids égal. v1 conserve son bilan partiel.
      - `kind` 'spectral' | 'spectrogram' | 'temporal', required
      - `score` number, required
      - `windows` object[], required
        - `startSeconds` number, required
        - `endSeconds` number, required
        - `score` number, required
    - `primary` object: Présent en v3. Les deux distributions sont des axes d’un même détecteur, pas deux votes indépendants.
      - `confidence` number, required
      - `classification` 'human' | 'processed-ai' | 'pure-ai', required
      - `audioSource` 'full' | 'preview' | 'provided', required: preview : seul un extrait a été analysé ; provided : audio fourni directement.
      - `spectral` object, required
        - `human` number, required
        - `processedAi` number, required
        - `pureAi` number, required
      - `temporal` object, required
        - `human` number, required
        - `processedAi` number, required
        - `pureAi` number, required
      - `stems` object
        - `vocal` number, nullable, required
        - `instrumental` number, nullable, required
  - `error` 'invalid-audio' | 'too-long' | 'failed' | 'interrupted' | 'link-unavailable' | 'null', nullable, required
  - `finishedAt` number, nullable
  - `expiresAt` number
  - `source` object
    - `type` 'file' | 'link', required
    - `label` string, required

## Other responses

- `401`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).
- `403`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).
- `404`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).
- `409`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).
- `413`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).
- `415`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).
- `429`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).
- `503`: Toute erreur de cette API, quel que soit le code HTTP, est un `application/problem+json` (RFC 9457) avec ce meme schema : `code` est la valeur stable a tester par un client (le `status` HTTP peut varier legerement selon le contexte, `code` non). `quota` est renseigne pour les erreurs liees au quota (`quota-exhausted`, `anon-quota-exhausted`, `client-quota`).

---

[API](https://skmtc.dev/jam-jam/apis/jam-jam-convert-api.md) · [All operations](https://skmtc.dev/jam-jam/apis/jam-jam-convert-api/llms.txt) · [OpenAPI document](https://skmtc.dev/jam-jam/apis/jam-jam-convert-api/revisions/64cd41a46e4e?raw)
