API d'upload YouTube Planifiez vidéos et Shorts

Mettez en ligne des vidéos sur YouTube de façon planifiée avec vos propres titre, description et visibilité, depuis un script, un job CI ou un agent IA. Connectez la chaîne une fois avec la connexion Google.

URL de base https://api.so-me.studio/v1 · Authentification X-API-Key · socialMedia: YOUTUBE

Ce que vous pouvez publier sur YouTube

Envoyez l'une de ces valeurs comme postType. Chaque post a besoin de texte, et les photos ou vidéos sont jointes par fileId depuis votre bibliothèque de médias.

VIDEO

Un fichier vidéo. YouTube traite une vidéo verticale de 3 minutes maximum comme un Short : il n'existe donc pas de type Shorts distinct.

Planifier un post YouTube

Importez le média, puis créez le post. Omettez scheduledAt pour publier immédiatement.

  1. Réserver une URL d'envoi

    POST /v1/media/presign-upload ajoute le fichier à votre bibliothèque de médias et renvoie un fileId et un uploadUrl présigné.

    Réserver une URL d'envoi
    curl -X POST https://api.so-me.studio/v1/media/presign-upload \
      -H "X-API-Key: $SOME_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"files":[{"filename":"build-time.mp4","mimetype":"video/mp4","size":209715200}]}'
    
    # → [{ "fileId": "…", "uploadUrl": "https://…", "fileSrc": "…", "s3Key": "…" }]
  2. Envoyer le fichier

    Envoyez les octets en PUT vers uploadUrl avec exactement le Content-Type que vous avez déclaré. L'URL est valable une heure.

    Envoyer le fichier
    curl -X PUT "$UPLOAD_URL" \
      -H "Content-Type: video/mp4" \
      --upload-file ./build-time.mp4
  3. Créer le post

    POST /v1/posts avec le fileId. La réponse est le post avec le statut SCHEDULED, et il est publié à l'heure scheduledAt via une file d'attente qui relance en cas d'échec.

    Créer le post
    curl -X POST https://api.so-me.studio/v1/posts \
      -H "X-API-Key: $SOME_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "socialMedia": "YOUTUBE",
        "postType": "VIDEO",
        "text": "Comment nous avons divisé par deux notre temps de build",
        "fileIds": ["<fileId>"],
        "scheduledAt": "2026-11-08T16:00:00Z",
        "metaData": {
          "title": "Comment nous avons divisé par deux notre temps de build",
          "description": "Cache, tâches parallèles et une option surprenante.",
          "visibility": "public"
        }
      }'

accountId est facultatif lorsque l'espace de travail a un seul compte YouTube. Sinon, passez un ID obtenu avec GET /v1/accounts.

Les fichiers joints avec fileIds sont vérifiés par rapport aux limites YouTube ci-dessous avant toute mise en file. Un fichier qui enfreint une règle renvoie une erreur 400 avec un rapport par fichier.

Options YouTube

Les champs qui modifient la façon dont un post est publié sur YouTube.

ChampCe qu'il fait
metaData.titleLe titre de la vidéo. YouTube autorise 100 caractères : les titres plus longs sont tronqués. Se rabat sur text.
metaData.descriptionLa description de la vidéo. Se rabat sur text.
metaData.visibilityprivate, unlisted ou public (privacyStatus fonctionne comme alias). Définissez-la explicitement : une valeur invalide ou en conflit échoue avant tout envoi.
firstCommentUn commentaire publié sous la vidéo une fois en ligne, jusqu'à 10 000 caractères.

Limites médias YouTube

Social media studio vérifie chaque fichier par rapport à ces limites avant de publier. Ce sont nos limites configurées, pas une garantie donnée par YouTube : GET /v1/media/rules renvoie le tableau à jour, et POST /v1/media/validate vérifie un fichier sans le publier.

Type de post VIDEO

Formats
MP4, MOV
Taille max. du fichier
350 MB
Fichiers par post
1
Durée max.
12 h
Dimensions
≤ 7680 × 4320 px
Codecs vidéo
H.264, H.265, VP9, AV1
Fréquence d'images
≤ 60 fps

Sachez quand c'est en ligne

La publication est asynchrone. Abonnez-vous à post.published et post.failed, ou interrogez GET /v1/posts/:id jusqu'à ce que postStatus soit POSTED ou FAILED.

S'abonner une seule fois
curl -X POST https://api.so-me.studio/v1/webhooks/subscriptions \
  -H "X-API-Key: $SOME_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/hooks/social",
    "categories": ["post"],
    "events": ["post.published", "post.failed"]
  }'

# The response includes the secret that signs every delivery.
À quoi ressemble chaque envoi
POST /hooks/social
X-Webhook-Event: post.published
X-Webhook-Signature: <hex HMAC-SHA256 of the raw body>

{
  "event": "post.published",
  "category": "post",
  "timestamp": "2026-11-03T15:00:07.412Z",
  "data": { "postId": "…", "platform": "YOUTUBE" }
}

Chaque envoi est signé en HMAC-SHA256 dans X-Webhook-Signature. post.failed est émis après la dernière relance ; corrigez la cause et appelez POST /v1/posts/:id/retry. Un premier commentaire est signalé séparément avec post.first_comment_posted ou post.first_comment_failed.

Vous créez un agent IA ?

La même clé d'API pilote un serveur MCP de plus de 200 outils et une CLI : un agent peut ainsi publier sur YouTube sans appels HTTP écrits à la main.

Serveur MCP

Ajoutez le serveur à Claude, Cursor ou à n'importe quel client MCP avec votre clé d'API. OAuth fonctionne aussi. Pour YouTube, l'agent appelle ces outils avec les mêmes champs que la requête REST :

  • presign_media_upload
  • validate_post_media
  • create_post
mcp.json
{
  "mcpServers": {
    "so-me-studio": {
      "url": "https://api.so-me.studio/mcp",
      "headers": { "X-API-Key": "sk_live_…" }
    }
  }
}

CLI

Installez-la avec npm i -g @social-media-scheduler/cli. Elle importe vos fichiers locaux à votre place et affiche du JSON : un script ou un job CI peut ainsi planifier un post YouTube en une seule commande.

so-me
so-me posts:create --platform YOUTUBE --post-type VIDEO \
  -m ./build-time.mp4 \
  -c "Comment nous avons divisé par deux notre temps de build" \
  -s 2026-11-08T16:00:00Z \
  --metadata '{"title":"Comment nous avons divisé par deux notre temps de build","visibility":"public"}'

L'accès à l'API, à la CLI et au MCP est inclus dans tous les forfaits payants : Lite, Creator, Standard, Advanced et Lifetime. Voir les forfaits et les limites

Pour aller plus loin

Guides des autres plateformes

Oui. Mettez en ligne une vidéo verticale de 3 minutes maximum avec postType VIDEO. YouTube la classe comme Short ; il n'existe pas de réglage Shorts distinct.

Oui. Social media studio accepte des vidéos YouTube de 350 Mo maximum chacune, bien en dessous de la limite de YouTube. Compressez les vidéos longues ou à fort débit avant de les importer.

Oui. Définissez metaData.visibility sur private ou unlisted. La valeur doit être private, unlisted ou public.

Non. Vous connectez le compte YouTube une seule fois dans le tableau de bord Social media studio via la connexion YouTube. Ses jetons sont stockés chiffrés et actualisés de notre côté, et votre code envoie uniquement votre clé d'API Social media studio dans l'en-tête X-API-Key.

Non. Il répond dès que le post est mis en file. La publication s'exécute dans un worker qui relance en cas d'échec : écoutez donc post.published et post.failed, ou interrogez GET /v1/posts/:id.

L'API REST, la CLI et le serveur MCP sont inclus dans tous les forfaits payants : Lite, Creator, Standard, Advanced et Lifetime. Lite, Creator, Standard et Advanced commencent par un essai de 7 jours (carte bancaire requise), et Lifetime est un paiement unique.

Planifiez une fois.
Publiez partout.

Fini la valse des onglets, rédigez, adaptez et publiez sur 20 plateformes depuis un seul calendrier.

API d'upload YouTube : planifiez vidéos et Shorts