🌐 Référence REST – SwipeZ API
Cette page documente les principaux endpoints HTTP exposés par l’API SwipeZ, à partir du contrat OpenAPI 3.0.
L’API est organisée autour de plusieurs domaines :
- API : endpoints techniques (santé du service).
- Spotify : authentification, playlists, préférences.
- Playlist : opérations détaillées sur les pistes d’une playlist.
Tous les exemples de réponses sont basés sur les modèles JSON définis dans le contrat (components.schemas).
🔐 1. Authentification & sessions (tag Spotify)
Ces endpoints gèrent le flux OAuth2 PKCE avec Spotify ainsi que le cycle de vie des sessions.
1.1 POST /api/spotify/auth/start
Démarre le flux OAuth2 PKCE côté serveur et renvoie l’URL d’autorisation Spotify ainsi que l’état associé.
Requête
- Méthode :
POST - URL :
/api/spotify/auth/start - Headers :
Content-Type: application/json
- Body (
AuthStartRequestDto) :
{
"scopes": [
"playlist-read-private",
"playlist-modify-private"
]
}
Réponses
200 OK
Corps :AuthStartResponseDto
{
"authorizationUrl": "https://accounts.spotify.com/authorize?...",
"state": "a1b2c3d4"
}
400 Bad Request
Corps :ProblemDetails(erreur de validation ou de configuration).
1.2 GET /api/spotify/callback
Endpoint de callback utilisé par Spotify après validation de l’utilisateur. Gère l’échange code ↔ tokens et la création de session.
Requête
Méthode :
GETURL :
/api/spotify/callbackQuery params :
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
code |
string | non | Code d’autorisation retourné par Spotify |
state |
string | non | Valeur de protection contre les attaques CSRF |
device |
string | non | Identifiant ou type de device (par défaut "") |
Réponses
200 OK
Corps :string(par ex. message ou redirection server-side selon implémentation).400 Bad Request
Corps :ProblemDetails(code invalide, état incohérent, etc.).
1.3 POST /api/spotify/logout
Met fin à la session utilisateur, invalide les tokens associés (denylist) et nettoie les données liées à la session.
Requête
Méthode :
POSTURL :
/api/spotify/logoutQuery params :
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
sessionId |
string | non | Identifiant de session à invalider |
Réponses
204 No Content
Déconnexion réussie, aucune charge utile.400 Bad Request
Corps :ProblemDetails(session introuvable, paramètre manquant ou invalide).
🎧 2. Playlists & préférences (tags Spotify & Playlist)
Ces endpoints permettent de lister les playlists de l’utilisateur, gérer ses préférences et manipuler les pistes d’une playlist.
2.1 GET /api/spotify/playlists
Récupère les playlists de l’utilisateur, avec pagination.
Requête
Méthode :
GETURL :
/api/spotify/playlistsHeaders :
| Header | Type | Obligatoire | Description |
|---|---|---|---|
X-Session-Id |
string | non | Identifiant de session applicatif |
X-Page-Token |
string | non | Jeton de pagination (page suivante à récupérer) |
Réponses
200 OK
Corps :PlaylistPageDto
{
"items": [
{
"playlistId": "37i9dQZF1DXcBWIGoYBM5M",
"name": "Today's Top Hits",
"imageUrl": "https://i.scdn.co/image/...",
"owner": "Spotify",
"trackCount": 50,
"selected": false,
"snapshot_id": "abc123"
}
],
"nextPageToken": "page-2"
}
2.2 GET /api/spotify/playlist-preferences
Retourne la liste actuelle des playlists sélectionnées par l’utilisateur.
Requête
Méthode :
GETURL :
/api/spotify/playlist-preferencesHeaders :
| Header | Type | Obligatoire |
|---|---|---|
X-Session-Id |
string | non |
Réponses
200 OK
Corps :PlaylistPreferencesDto
{
"playlistIds": [
"37i9dQZF1DXcBWIGoYBM5M"
]
}
2.3 PUT /api/spotify/playlist-preferences
Remplace complètement la sélection de playlists.
Requête
Méthode :
PUTURL :
/api/spotify/playlist-preferencesHeaders :
| Header | Type | Obligatoire |
|---|---|---|
X-Session-Id |
string | non |
- Body (
PlaylistPreferencesDto) :
{
"playlistIds": [
"37i9dQZF1DXcBWIGoYBM5M",
"6rqhFgbbKwnb9MLmUQDhG6"
]
}
Réponses
200 OK
Sélection enregistrée.
2.4 DELETE /api/spotify/playlist-preferences
Supprime toutes les préférences de playlists de l’utilisateur.
Requête
Méthode :
DELETEURL :
/api/spotify/playlist-preferencesHeaders :
| Header | Type | Obligatoire |
|---|---|---|
X-Session-Id |
string | non |
Réponses
200 OK
Aucune charge utile.
2.5 PATCH /api/spotify/playlist-preferences/add
Ajoute des playlists à la sélection existante.
Requête
Méthode :
PATCHURL :
/api/spotify/playlist-preferences/addHeaders :
| Header | Type | Obligatoire |
|---|---|---|
X-Session-Id |
string | non |
- Body (
PlaylistPreferencesDto) :
{
"playlistIds": [
"37i9dQZF1DXcBWIGoYBM5M"
]
}
Réponses
200 OK
2.6 PATCH /api/spotify/playlist-preferences/remove
Retire des playlists de la sélection.
Requête
Méthode :
PATCHURL :
/api/spotify/playlist-preferences/removeHeaders :
| Header | Type | Obligatoire |
|---|---|---|
X-Session-Id |
string | non |
- Body (
PlaylistPreferencesDto) :
{
"playlistIds": [
"37i9dQZF1DXcBWIGoYBM5M"
]
}
Réponses
200 OK
2.7 GET /playlists/{playlistId}/tracks
Récupère les pistes d’une playlist spécifique, avec pagination par offset.
Requête
Méthode :
GETURL :
/playlists/{playlistId}/tracksPath params :
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
playlistId |
string | oui | Identifiant de playlist |
- Headers :
| Header | Type | Obligatoire |
|---|---|---|
X-Session-Id |
string | non |
- Query params :
| Nom | Type | Obligatoire | Description |
|---|---|---|---|
offset |
int32 | non | Index de départ (0, n) |
Réponses
200 OK
Corps :PlaylistTracksDto
{
"playlistId": "37i9dQZF1DXcBWIGoYBM5M",
"limit": 50,
"offset": 0,
"nextOffset": 50,
"tracks": [
{
"id": "6rqhFgbbKwnb9MLmUQDhG6",
"name": "Track name",
"artists": [
{ "id": "123", "name": "Artist" }
],
"album": {
"id": "456",
"images": [
{ "url": "https://...", "width": 640, "height": 640 }
]
},
"uri": "spotify:track:6rqhFgbbKwnb9MLmUQDhG6"
}
]
}
401 Unauthorized/403 Forbidden/429 Too Many Requests
Corps :ProblemDetails
2.8 DELETE /playlists/{playlistId}/tracks
Supprime une sélection de pistes d’une playlist Spotify.
Requête
Méthode :
DELETEURL :
/playlists/{playlistId}/tracksPath params :
| Nom | Type | Obligatoire |
|---|---|---|
playlistId |
string | oui |
- Headers :
| Header | Type | Obligatoire |
|---|---|---|
X-Session-Id |
string | non |
- Body (
PlaylistTracksRemoveBody) :
{
"tracks": [
{ "uri": "spotify:track:6rqhFgbbKwnb9MLmUQDhG6" }
]
}
Réponses
200 OK
Corps :SnapshotResponse
{
"snapshot_id": "snapshot-xyz"
}
401 Unauthorized/403 Forbidden/429 Too Many Requests
Corps :ProblemDetails.
🩺 3. Endpoint technique (tag API)
3.1 GET /health
Permet de vérifier rapidement que l’API est joignable.
Requête
Méthode :
GETURL :
/health
Réponses
200 OK
Aucune charge utile spécifique (OK technique).
📦 4. Modèles JSON (schemas principaux)
4.1 AuthStartRequestDto
{
"scopes": ["string", "..."]
}
scopes(string[], optionnel) : scopes Spotify demandés.
4.2 AuthStartResponseDto
{
"authorizationUrl": "string",
"state": "string"
}
authorizationUrl(string) : URL d’autorisation Spotify.state(string) : valeur d’état pour sécuriser le flux.
4.3 PlaylistItemDto
{
"playlistId": "string",
"name": "string",
"imageUrl": "string",
"owner": "string",
"trackCount": 50,
"selected": true,
"snapshot_id": "string"
}
4.4 PlaylistPageDto
{
"items": [ /* PlaylistItemDto */ ],
"nextPageToken": "string"
}
4.5 PlaylistPreferencesDto
{
"playlistIds": ["string", "..."]
}
- Représente la sélection actuelle de playlists par l’utilisateur.
4.6 PlaylistTracksDto
{
"playlistId": "string",
"limit": 50,
"offset": 0,
"nextOffset": 50,
"tracks": [ /* SpotifyTrack */ ]
}
4.7 PlaylistTracksRemoveBody
{
"tracks": [
{ "uri": "string" }
]
}
4.8 SpotifyTrack
{
"id": "string",
"name": "string",
"artists": [ /* ArtistDto */ ],
"album": {
"id": "string",
"images": [ /* SpotifyImage */ ]
},
"uri": "string"
}
4.9 ArtistDto
{
"id": "string",
"name": "string"
}
4.10 AlbumDto
{
"id": "string",
"images": [ /* SpotifyImage */ ]
}
4.11 SpotifyImage
{
"url": "string",
"height": 640,
"width": 640
}
4.12 SpotifyTracksUri
{
"uri": "string"
}
4.13 SnapshotResponse
{
"snapshot_id": "string"
}
4.14 ProblemDetails
Schéma générique de description d’erreur.
{
"type": "string",
"title": "string",
"status": 400,
"detail": "string",
"instance": "string"
}
🔚 Remarques d’usage
Les endpoints qui manipulent des données utilisateur exigent en pratique un contexte de session valide (header
X-Session-Idou paramètresessionIdselon le cas).Les codes
401,403et429renvoient tous unProblemDetailsstructuré, ce qui permet un traitement homogène côté client.Le contrat OpenAPI complet incluant tous les schémas doit rester la source de vérité pour la génération de clients automatiques.