Planifiez photos, carrousels, Reels et Stories Instagram depuis votre backend ou votre agent IA. Importez le média, envoyez un seul POST /v1/posts, et recevez un webhook signé quand c'est en ligne.
URL de base https://api.so-me.studio/v1 · Authentification X-API-Key · socialMedia: INSTAGRAM
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.
IMAGE
Une seule photo dans le feed.
CAROUSEL
De 2 à 10 photos dans un seul post à faire défiler. MULTIPLE_IMAGES est également accepté.
REEL
Une vidéo, publiée en Reel.
VIDEO
Une vidéo, qu'Instagram publie aussi en Reel. Ses règles de taille sont plus souples que celles de REEL.
STORY
Une photo ou une vidéo en Story. Instagram n'affiche aucune légende sur les Stories.
Importez le média, puis créez le post. Omettez scheduledAt pour publier immédiatement.
POST /v1/media/presign-upload ajoute le fichier à votre bibliothèque de médias et renvoie un fileId et un uploadUrl présigné.
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":"launch-reel.mp4","mimetype":"video/mp4","size":48211904}]}'
# → [{ "fileId": "…", "uploadUrl": "https://…", "fileSrc": "…", "s3Key": "…" }]Envoyez les octets en PUT vers uploadUrl avec exactement le Content-Type que vous avez déclaré. L'URL est valable une heure.
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: video/mp4" \
--upload-file ./launch-reel.mp4POST /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.
curl -X POST https://api.so-me.studio/v1/posts \
-H "X-API-Key: $SOME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"socialMedia": "INSTAGRAM",
"postType": "REEL",
"text": "Dans les coulisses de la semaine de lancement",
"fileIds": ["<fileId>"],
"scheduledAt": "2026-11-03T15:00:00Z",
"firstComment": "#semainedelancement #buildinpublic"
}'accountId est facultatif lorsque l'espace de travail a un seul compte Instagram. Sinon, passez un ID obtenu avec GET /v1/accounts.
Les fichiers joints avec fileIds sont vérifiés par rapport aux limites Instagram ci-dessous avant toute mise en file. Un fichier qui enfreint une règle renvoie une erreur 400 avec un rapport par fichier.
Les champs qui modifient la façon dont un post est publié sur Instagram.
| Champ | Ce qu'il fait |
|---|---|
| firstComment | Un commentaire publié sous le post juste après sa mise en ligne, jusqu'à 2 200 caractères. Idéal pour des hashtags ou un lien. |
| metaData.taggedPeople | Un tableau de noms d'utilisateur Instagram publics à identifier sur les photos, les photos de carrousel et les Reels. L'identification se fait au mieux : un nom d'utilisateur erroné ne bloque jamais le post. |
| accountId | Le compte Instagram depuis lequel publier, tel que listé par GET /v1/accounts. Facultatif lorsque l'espace de travail n'en a qu'un. |
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 Instagram : GET /v1/media/rules renvoie le tableau à jour, et POST /v1/media/validate vérifie un fichier sans le publier.
Type de post IMAGE
Type de post CAROUSEL
Type de post REEL
Type de post VIDEO
Type de post STORY
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.
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.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": "INSTAGRAM" }
}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.
La même clé d'API pilote un serveur MCP de plus de 200 outils et une CLI : un agent peut ainsi publier sur Instagram sans appels HTTP écrits à la main.
Ajoutez le serveur à Claude, Cursor ou à n'importe quel client MCP avec votre clé d'API. OAuth fonctionne aussi. Pour Instagram, l'agent appelle ces outils avec les mêmes champs que la requête REST :
{
"mcpServers": {
"so-me-studio": {
"url": "https://api.so-me.studio/mcp",
"headers": { "X-API-Key": "sk_live_…" }
}
}
}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 Instagram en une seule commande.
so-me posts:create --platform INSTAGRAM --post-type REEL \
-m ./launch-reel.mp4 \
-c "Dans les coulisses de la semaine de lancement" \
-s 2026-11-03T15:00:00Z \
--first-comment "#semainedelancement #buildinpublic"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
Un compte professionnel Instagram, Business ou Créateur. Instagram ne permet pas aux applications de publier sur des comptes personnels. Vous connectez le compte une seule fois dans le tableau de bord Social media studio.
Non. Instagram exige une photo ou une vidéo pour chaque post : un post Instagram avec du texte seul échoue. Joignez des médias avec fileIds, et la vérification des médias s'exécute avant la mise en file du post.
Oui. Envoyez postType STORY avec une photo ou une vidéo et une heure scheduledAt. L'API exige toujours du texte, mais Instagram n'affiche pas les légendes sur les Stories.
Non. Vous connectez le compte Instagram une seule fois dans le tableau de bord Social media studio via la connexion Instagram. 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.
Fini la valse des onglets, rédigez, adaptez et publiez sur 20 plateformes depuis un seul calendrier.