API TikTok
L'API TikTok permet de consulter les profils utilisateurs, lister les vidéos, lire les commentaires et réponses, rechercher des vidéos et des utilisateurs, explorer les hashtags et parcourir le graphe social (abonnés / abonnements). Onze endpoints, tous à 1 crédit par requête.
Endpoints
| Endpoint | Description |
|---|---|
POST /api/v1/tiktok/profile | Obtenir un profil utilisateur par nom d'utilisateur ou sec_user_id |
POST /api/v1/tiktok/user/posts | Lister les vidéos d'un utilisateur (paginées, triables) |
POST /api/v1/tiktok/video | Obtenir les détails complets d'une vidéo |
POST /api/v1/tiktok/video/comments | Lister les commentaires d'une vidéo |
POST /api/v1/tiktok/video/comments/replies | Lister les réponses à un commentaire spécifique |
POST /api/v1/tiktok/search/videos | Rechercher des vidéos TikTok par mot-clé |
POST /api/v1/tiktok/search/users | Rechercher des utilisateurs TikTok par mot-clé |
POST /api/v1/tiktok/hashtag | Obtenir les détails et statistiques d'un hashtag |
POST /api/v1/tiktok/hashtag/videos | Lister les vidéos pour un hashtag |
POST /api/v1/tiktok/user/followers | Lister les abonnés d'un utilisateur |
POST /api/v1/tiktok/user/followings | Lister les comptes suivis par un utilisateur |
Authentification
| En-tête | Valeur | Requis |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Oui |
Content-Type | application/json | Oui |
Chaque réponse réussie inclut des champs de suivi des crédits : credits_used, credits_remaining et response_time (ms).
Obtenir un sec_user_id
La plupart des endpoints nécessitent un sec_user_id plutôt qu'un nom d'utilisateur. Appelez d'abord l'endpoint Profil avec un nom d'utilisateur, puis utilisez data.user.sec_uid pour les requêtes suivantes.
Profil Utilisateur
POST https://api.scavio.dev/api/v1/tiktok/profileObtenir un profil utilisateur TikTok. Passez soit username ou sec_user_id.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
username | string | -- | Pseudo TikTok (sans @). Un de username ou sec_user_id requis. |
sec_user_id | string | -- | ID utilisateur sécurisé. Un de username ou sec_user_id requis. |
Exemple
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/profile' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"username": "tiktok"}'Champs de réponse (data.user)
| Champ | Type | Description |
|---|---|---|
unique_id | string | Nom d'utilisateur (pseudo) |
nickname | string | Nom d'affichage |
sec_uid | string | ID utilisateur sécurisé (utiliser pour les autres endpoints) |
uid | string | ID utilisateur numérique |
signature | string | Texte de la bio |
bio_url | string | Lien dans la bio |
follower_count | number | Abonnés |
following_count | number | Abonnements |
aweme_count | number | Total des vidéos postées |
total_favorited | number | Total des likes reçus |
avatar_larger | object | Image de l'avatar (.url_list[0] pour l'URL) |
Exemple de réponse
{
"data": {
"user": {
"unique_id": "tiktok",
"nickname": "TikTok",
"sec_uid": "MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM",
"uid": "107955",
"signature": "Un seul TikTok peut avoir un grand impact",
"bio_url": "linktr.ee/tiktok",
"follower_count": 94015018,
"following_count": 1,
"aweme_count": 1510,
"total_favorited": 457945663
}
},
"response_time": 1245,
"credits_used": 1,
"credits_remaining": 11753
}Publications de l'utilisateur
POST https://api.scavio.dev/api/v1/tiktok/user/postsLister les vidéos d'un utilisateur. Nécessite sec_user_id (obtenu depuis l'endpoint de profil).
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
sec_user_id | string | -- | Requis. ID utilisateur sécurisé depuis l'endpoint de profil. |
cursor | string | "0" | Curseur de pagination. Utiliser data.max_cursor de la réponse précédente. |
count | number | 20 | Résultats par page (1-30). |
sort_type | string | "0" | "0" = plus récent, "1" = populaire. |
Pagination
Utiliser data.max_cursor comme cursor dans la requête suivante. Arrêter quand data.has_more est 0.
Champs vidéo (data.aweme_list[])
| Champ | Type | Description |
|---|---|---|
aweme_id | string | ID de la vidéo |
desc | string | Légende de la vidéo |
create_time | number | Timestamp Unix (secondes) |
statistics.digg_count | number | Likes |
statistics.comment_count | number | Commentaires |
statistics.play_count | number | Vues |
statistics.share_count | number | Partages |
statistics.collect_count | number | Favoris |
author | object | Infos de l'auteur (sous-ensemble du profil) |
music | object | Son utilisé |
video | object | URLs vidéo, dimensions, durée |
Détail de la vidéo
POST https://api.scavio.dev/api/v1/tiktok/videoObtenir les détails complets d'une vidéo.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
video_id | string | -- | Requis. ID de la vidéo TikTok. |
Exemple
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/video' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"video_id": "7350810998023949599"}'Champs supplémentaires (data.aweme_detail)
Inclut tous les champs vidéo listés ci-dessus, plus :
| Champ | Type | Description |
|---|---|---|
video.play_addr | object | URL de lecture vidéo (.url_list[0]) |
video.download_addr | object | URL de téléchargement (sans filigrane) |
video.cover | object | Image de couverture |
video.duration | number | Durée en ms |
cha_list | array | Hashtags utilisés |
text_extra | array | Mentions et hashtags dans la légende |
Exemple de réponse
{
"data": {
"aweme_detail": {
"aweme_id": "7350810998023949599",
"desc": "j'en ai marre d'être fatiguée, je suis fatiguée d'être malade",
"create_time": 1711494099,
"statistics": {
"digg_count": 2002382,
"comment_count": 8119,
"play_count": 12171757,
"share_count": 274978,
"collect_count": 211332
}
}
},
"response_time": 1605,
"credits_used": 1,
"credits_remaining": 11752
}Commentaires de la vidéo
POST https://api.scavio.dev/api/v1/tiktok/video/commentsObtenir les commentaires d'une vidéo.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
video_id | string | -- | Requis. ID de la vidéo. |
cursor | string | "0" | Curseur de pagination. |
count | number | 20 | Résultats par page (1-50). |
Pagination
Utiliser data.cursor comme prochain curseur. Arrêter quand data.has_more est 0.
Champs des commentaires (data.comments[])
| Champ | Type | Description |
|---|---|---|
cid | string | ID du commentaire (utiliser pour l'endpoint de réponses) |
text | string | Texte du commentaire |
create_time | number | Timestamp Unix (secondes) |
digg_count | number | Likes sur ce commentaire |
reply_comment_total | number | Nombre de réponses |
user | object | Infos du commentateur (nickname, avatar, etc.) |
is_author_digged | number | 1 si l'auteur de la vidéo a liké ce commentaire |
Réponses aux commentaires
POST https://api.scavio.dev/api/v1/tiktok/video/comments/repliesObtenir les réponses à un commentaire spécifique.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
video_id | string | -- | Requis. ID de la vidéo. |
comment_id | string | -- | Requis. ID du commentaire (cid de l'endpoint de commentaires). |
cursor | string | "0" | Curseur de pagination. |
count | number | 20 | Résultats par page (1-50). |
Pagination
Identique aux commentaires : utiliser data.cursor, arrêter quand data.has_more est 0. Chaque réponse a les mêmes champs qu'un objet commentaire.
Recherche de vidéos
POST https://api.scavio.dev/api/v1/tiktok/search/videosRechercher des vidéos TikTok par mot-clé.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
keyword | string | -- | Requis. Requête de recherche (1-500 caractères). |
cursor | string | "0" | Décalage de pagination. |
count | number | 20 | Résultats par page (1-30). |
sort_type | string | "0" | "0" = pertinence, "1" = plus de likes. |
publish_time | string | "0" | "0" = tout temps, "1" = dernier jour, "7" = semaine, "30" = mois, "90" = 3 mois, "180" = 6 mois. |
Exemple
curl -X POST 'https://api.scavio.dev/api/v1/tiktok/search/videos' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"keyword": "recette de cuisine", "count": 10, "publish_time": "7"}'Pagination
Utiliser data.cursor comme prochain cursor. Arrêter quand data.has_more est 0. Chaque élément dans data.aweme_list a la même structure qu'un détail de vidéo.
Recherche d'utilisateurs
POST https://api.scavio.dev/api/v1/tiktok/search/usersRechercher des utilisateurs TikTok par mot-clé.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
keyword | string | -- | Requis. Requête de recherche (1-500 caractères). |
cursor | string | "0" | Décalage de pagination. |
count | number | 20 | Résultats par page (1-30). |
Champs de réponse (data.user_list[].user_info)
| Champ | Type | Description |
|---|---|---|
uid | string | ID de l'utilisateur |
unique_id | string | Nom d'utilisateur |
nickname | string | Nom d'affichage |
sec_uid | string | ID utilisateur sécurisé |
follower_count | number | Abonnés |
signature | string | Bio |
Infos du hashtag
POST https://api.scavio.dev/api/v1/tiktok/hashtagObtenir les détails et statistiques d'un hashtag. Passez soit hashtag_name ou hashtag_id.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
hashtag_name | string | -- | Texte du hashtag (sans #). Un de hashtag_name ou hashtag_id requis. |
hashtag_id | string | -- | ID numérique du hashtag. Un de hashtag_name ou hashtag_id requis. |
Champs de réponse
| Champ | Type | Description |
|---|---|---|
data.challengeInfo.challenge.id | string | ID du hashtag (utiliser pour les vidéos de hashtag) |
data.challengeInfo.challenge.title | string | Nom du hashtag |
data.challengeInfo.challenge.desc | string | Description |
data.challengeInfo.stats.videoCount | number | Nombre de vidéos |
data.challengeInfo.stats.viewCount | number | Total des vues |
Exemple de réponse
{
"data": {
"challengeInfo": {
"challenge": {
"id": "229207",
"title": "fyp",
"desc": "",
"stats": {
"videoCount": 0,
"viewCount": 118798000000000
}
}
}
},
"response_time": 892,
"credits_used": 1,
"credits_remaining": 11751
}Vidéos d'un hashtag
POST https://api.scavio.dev/api/v1/tiktok/hashtag/videosLister les vidéos pour un hashtag. Nécessite hashtag_id (obtenu depuis l'endpoint d'infos du hashtag).
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
hashtag_id | string | -- | Requis. Depuis l'endpoint d'infos du hashtag. |
cursor | string | "0" | Curseur de pagination. |
count | number | 20 | Résultats par page (1-30). |
Pagination
Utiliser data.cursor comme prochain curseur. Arrêter quand data.has_more est 0. La réponse contient data.aweme_list[] avec la même structure vidéo que la recherche et les publications utilisateur.
Abonnés d'un utilisateur
POST https://api.scavio.dev/api/v1/tiktok/user/followersObtenir la liste des abonnés d'un utilisateur.
Corps de la requête
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
sec_user_id | string | -- | Requis. Depuis l'endpoint de profil. |
count | number | 20 | Résultats par page (1-20). |
page_token | string | -- | Depuis la réponse précédente data.next_page_token. |
min_time | number | -- | Depuis la réponse précédente data.min_time. |
Pagination
Passer à la fois page_token et min_time de la réponse précédente. Arrêter quand data.has_more est false.
Champs des abonnés (data.followers[])
| Champ | Type | Description |
|---|---|---|
unique_id | string | Nom d'utilisateur |
nickname | string | Nom d'affichage |
sec_uid | string | ID utilisateur sécurisé |
uid | string | ID de l'utilisateur |
follower_count | number | Leur nombre d'abonnés |
aweme_count | number | Leur nombre de vidéos |
signature | string | Leur bio |
avatar_thumb | object | Avatar (.url_list[0]) |
Abonnements d'un utilisateur
POST https://api.scavio.dev/api/v1/tiktok/user/followingsObtenir les comptes suivis par un utilisateur. Mêmes forme de requête et paramètres que les abonnés. La réponse utilise data.followings[] au lieu de data.followers[].
Référence de pagination
| Style | Endpoints | Page suivante | Condition d'arrêt |
|---|---|---|---|
| Curseur (string) | user/posts | cursor = data.max_cursor | data.has_more === 0 |
| Décalage (number) | search/*, hashtag/videos, video/comments, video/comments/replies | cursor = data.cursor | data.has_more === 0 |
| Jeton + temps | user/followers, user/followings | page_token + min_time | data.has_more === false |
Notes
- Tous les champs
create_timesont des timestamps Unix en secondes. Multipliez par 1000 pour JavaScriptDate. - Les champs d'avatar et d'image renvoient un objet avec un tableau
url_list. Utilisez.url_list[0]pour l'URL. - Voir Erreurs pour la gestion des
401,429et502.