Se connecter
Caractéristiques IA vidéo Tarifs Comparer Blog Commencez maintenant
DOCUMENTATION POUR LES DÉVELOPPEURS

Referência da API

Référence complète pour l'API REST InMedia. Tous les points de terminaison nécessitent une authentification via clé API.

URL de base : https://useinmedia.com

Autenticação

Every request must include your API key as a Bearer token and your Workspace ID. You can create API keys from Dashboard → Settings → API Keys (Growth plan required).

En-têtes obligatoires

Authorization: Bearer sk_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcd
Content-Type: application/json

L'espace de travail est déterminé automatiquement à partir de la clé API. Aucun en-tête X-Workspace-Id n'est requis. La clé n'est affichée qu'une seule fois lors de la création ; conservez-la en toute sécurité.

Exemple rapide. Créer un post

curl https://useinmedia.com/api/v1/posts \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{"title":"My post","prompt":"Bold product post for Instagram"}'
import requests

response = requests.post(
    "https://useinmedia.com/api/v1/posts",
    headers={"Authorization": "Bearer sk_..."},
    json={
        "title": "My post",
        "prompt": "Bold product post for Instagram",
    }
)
post = response.json()
const response = await fetch("https://useinmedia.com/api/v1/posts", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk_...",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    title: "My post",
    prompt: "Bold product post for Instagram",
  }),
});
const post = await response.json();
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer sk_...");

var payload = new {
    title = "My post",
    prompt = "Bold product post for Instagram"
};
var response = await client.PostAsJsonAsync(
    "https://useinmedia.com/api/v1/posts", payload);
var post = await response.Content.ReadFromJsonAsync<JsonDocument>();
<?php
$ch = curl_init("https://useinmedia.com/api/v1/posts");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        "Authorization: Bearer sk_...",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        "title"  => "My post",
        "prompt" => "Bold product post for Instagram",
    ]),
]);
$post = json_decode(curl_exec($ch), true);

Codes d'erreur

CodeSignification
400Requête invalide. Paramètres incorrects
401Non autorisé. Clé API manquante ou invalide
403Interdit. Ressource non disponible sur votre plan
404Non trouvé. La ressource n'existe pas
429Limite de débit dépassée. Réduisez la fréquence

Événements de Webhook

Passez une liste d'événements séparés par des virgules au champ events lors de la création d'un webhook.

post.generated
Déclenché lorsque l'IA termine la génération d'un post
post.published
Déclenché lorsqu'un post est publié avec succès
post.scheduled
Déclenché lorsqu'un post est programmé pour une publication future
post.failed
Déclenché lorsque la génération ou la publication d'un post échoue
video.completed
Déclenché lorsqu'un travail de rendu vidéo est terminé
video.failed
Déclenché lorsqu'un travail de rendu vidéo échoue

Format du payload

Chaque livraison de webhook est une requête POST avec le corps JSON suivant :

{
  "event": "post.published",
  "workspaceId": "a1b2c3d4-...",
  "timestamp": "2026-04-14T15:30:00Z",
  "data": {
    "id": "3f7a1b2c-...",
    "title": "Air Jordan launch",
    "status": "published",
    "imageUrl": "https://...",
    "publishedAt": "2026-04-14T15:30:00Z"
  }
}

Segurança do Webhook

Si vous fournissez un secret lors de la création d'un webhook, InMedia signera chaque livraison avec HMAC-SHA256. Vérifiez la signature pour vous assurer que la requête provient d'InMedia.

En-tête de signature

X-InMedia-Signature: sha256=abc123...

La valeur est le digest hexadécimal HMAC-SHA256 du corps brut de la requête en utilisant votre secret webhook comme clé.

Vérification de signature

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = 'sha256=' +
    crypto.createHmac('sha256', secret)
          .update(payload, 'utf8')
          .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}
import hmac, hashlib

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = 'sha256=' + hmac.new(
        secret.encode(), payload, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)
using System.Security.Cryptography;
using System.Text;

bool VerifySignature(byte[] payload, string signature, string secret)
{
    using var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
    var hash     = hmac.ComputeHash(payload);
    var expected = "sha256=" + Convert.ToHexString(hash).ToLower();
    return CryptographicOperations.FixedTimeEquals(
        Encoding.UTF8.GetBytes(signature),
        Encoding.UTF8.GetBytes(expected)
    );
}
<?php
function verify_signature(
    string $payload,
    string $signature,
    string $secret
): bool {
    $expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);
    return hash_equals($expected, $signature);
}

Posts

Créer et gérer des publications. Appelez POST /{id}/generate après avoir créé une publication pour produire du contenu AI.

GET /api/v1/posts Lister tous les posts
Parâmetros de Query
NomTypeObrigatórioDescrição
status string optional Filtrer par statut : brouillon | programmé | publié | échoué
page integer optional Numéro de page (défaut : 1)
pageSize integer optional Éléments par page, max 100 (défaut : 20)
cURL
curl https://useinmedia.com/api/v1/posts \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "id": "3f7a1b2c-...",
    "workspaceId": "a1b2c3d4-...",
    "projectId": "e5f6g7h8-...",
    "title": "Air Jordan launch",
    "prompt": "Bold Instagram post for sneaker drop",
    "status": "published",
    "imageUrl": "https://...",
    "hasVideo": false,
    "format": "instagram_square",
    "createdAt": "2026-04-14T12:00:00Z"
  }
]
POST /api/v1/posts Créer un post
Paramètres du Body
NomTypeObrigatórioDescrição
title string required Titre du post (max 200 caractères)
prompt string required Invite de génération (max 5000 caractères)
projectId guid required Projet à associer au post
brandKitId guid optional Brand Kit à appliquer lors de la génération
Body de la requête
{
  "title": "Air Jordan launch",
  "prompt": "Bold Instagram post for a sneaker drop. Black and gold palette.",
  "projectId": "e5f6g7h8-...",
  "brandKitId": "k1l2m3n4-..."
}
cURL
curl https://useinmedia.com/api/v1/posts \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "title": "Air Jordan launch", "prompt": "Bold Instagram post for a sneaker drop. Black and gold palette.", "projectId": "e5f6g7h8-...", "brandKitId": "k1l2m3n4-..." }'
Réponse
{
  "id": "3f7a1b2c-...",
  "title": "Air Jordan launch",
  "status": "draft",
  "imageUrl": "https://...",
  "hasVideo": false,
  "createdAt": "2026-04-14T12:00:00Z"
}
GET /api/v1/posts/ {id} Récupérer le post par ID
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -H "Authorization: Bearer sk_..."
Réponse
{
  "id": "3f7a1b2c-...",
  "workspaceId": "a1b2c3d4-...",
  "projectId": "e5f6g7h8-...",
  "title": "Air Jordan launch",
  "prompt": "Bold Instagram post for sneaker drop",
  "status": "published",
  "imageUrl": "https://...",
  "hasVideo": false,
  "format": "instagram_square",
  "brandKitId": null,
  "scheduledAt": null,
  "publishedAt": "2026-04-14T15:30:00Z",
  "createdAt": "2026-04-14T12:00:00Z",
  "updatedAt": "2026-04-14T15:30:00Z"
}
GET /api/v1/posts/project/ {projectId} Lister les posts d'un projet
cURL
curl https://useinmedia.com/api/v1/posts/project/<projectId> \
  -H "Authorization: Bearer sk_..."
Réponse
[ { "id": "...", "title": "..." } ]
PUT /api/v1/posts/ {id} Mettre à jour un post
Paramètres du Body
NomTypeObrigatórioDescrição
title string optional Nouveau titre (max 200 caractères)
prompt string optional Nouveau prompt (max 5000 caractères)
status string optional draft | scheduled | published | failed
scheduledAt datetime optional Date/heure programmée ISO 8601
brandKitId guid optional Brand Kit à appliquer
Body de la requête
{ "title": "Updated title", "status": "draft" }
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "title": "Updated title", "status": "draft" }'
Réponse
{
  "id": "3f7a1b2c-...",
  "title": "Updated title",
  "status": "draft",
  "updatedAt": "2026-04-14T13:00:00Z"
}
DELETE /api/v1/posts/ {id} Supprimer un post
cURL
curl https://useinmedia.com/api/v1/posts/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Réponse
204 No Content
POST /api/v1/posts/ {id} /generate Générer (ou régénérer) du contenu AI pour un post
Paramètres du Body
NomTypeObrigatórioDescrição
prompt string optional Nouveau prompt ; omettre pour régénérer avec le prompt existant
format string optional Proporção: 1:1 | 9:16 | 16:9 (padrão: 1:1)
Body de la requête
{ "prompt": "Make it more energetic", "format": "1:1" }
cURL
curl https://useinmedia.com/api/v1/posts/<id>/generate \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "prompt": "Make it more energetic", "format": "1:1" }'
Réponse
{
  "post": {
    "id": "3f7a1b2c-...",
    "status": "draft",
    "imageUrl": "https://...",
    "hasVideo": false,
    "updatedAt": "2026-04-14T13:00:00Z"
  },
  "respond": "Updated the design with more vibrant colors."
}
POST /api/v1/posts/ {id} /render Rendre la version actuelle du post en image (PNG/JPEG)
cURL
curl https://useinmedia.com/api/v1/posts/<id>/render \
  -X POST \
  -H "Authorization: Bearer sk_..."
Réponse
{ "id": "...", "imageUrl": "https://...", "status": "draft" }
POST /api/v1/posts/ {id} /publish Marquer un post comme publié
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish \
  -X POST \
  -H "Authorization: Bearer sk_..."
Réponse
{ "id": "...", "status": "published", "publishedAt": "2026-04-14T15:30:00Z" }
POST /api/v1/posts/ {id} /schedule Planifier un post pour une publication future
Paramètres du Body
NomTypeObrigatórioDescrição
scheduledAt datetime required Date/heure de publication ISO 8601 (UTC)
Body de la requête
{ "scheduledAt": "2026-04-15T09:00:00Z" }
cURL
curl https://useinmedia.com/api/v1/posts/<id>/schedule \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "scheduledAt": "2026-04-15T09:00:00Z" }'
Réponse
{ "id": "...", "status": "scheduled", "scheduledAt": "2026-04-15T09:00:00Z" }
POST /api/v1/posts/ {id} /publish-social Publier (ou planifier) un post sur les réseaux sociaux connectés
Paramètres du Body
NomTypeObrigatórioDescrição
connectionIds guid[] required Liste des ID de connexion sociale à publier
scheduledAt datetime optional Si renseigné, planifier au lieu de publier immédiatement
Body de la requête
{
  "connectionIds": ["conn-uuid-1", "conn-uuid-2"],
  "scheduledAt": null
}
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish-social \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "connectionIds": ["conn-uuid-1", "conn-uuid-2"], "scheduledAt": null }'
Réponse
[
  {
    "connectionId": "conn-uuid-1",
    "platform": "Instagram",
    "status": "Published",
    "externalPostId": "ext-123",
    "errorMessage": null
  }
]
GET /api/v1/posts/ {id} /publish-targets Interroger les destinations de publication sociale et le statut d'un post
cURL
curl https://useinmedia.com/api/v1/posts/<id>/publish-targets \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "connectionId": "conn-uuid-1",
    "platform": "Instagram",
    "status": "Published",
    "externalPostId": "ext-123",
    "errorMessage": null
  }
]
GET /api/v1/posts/ {id} /download Télécharger l'image du post en fichier
Parâmetros de Query
NomTypeObrigatórioDescrição
format string optional png (padrão) ou jpg
cURL
curl https://useinmedia.com/api/v1/posts/<id>/download \
  -H "Authorization: Bearer sk_..."
Réponse
Fichier binaire (image/png ou image/jpeg)
GET /api/v1/posts/ {id} /versions Lister les versions sauvegardées d'un post
cURL
curl https://useinmedia.com/api/v1/posts/<id>/versions \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "id": "ver-uuid-...",
    "versionNumber": 3,
    "label": "Dark theme variant",
    "createdAt": "2026-04-14T12:00:00Z"
  }
]
POST /api/v1/posts/ {id} /versions/ {versionId} /restore Restaurer un post à une version précédente
cURL
curl https://useinmedia.com/api/v1/posts/<id>/versions/<versionId>/restore \
  -X POST \
  -H "Authorization: Bearer sk_..."
Réponse
{ "id": "...", "status": "draft", "imageUrl": "https://...", "updatedAt": "2026-04-14T13:00:00Z" }

Projects

Organisez les publications sous des projets. Le plan Starter est limité à 3 projets actifs.

GET /api/v1/projects Lister les projets
Parâmetros de Query
NomTypeObrigatórioDescrição
status string optional Filtrer : actif | archivé
cURL
curl https://useinmedia.com/api/v1/projects \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "id": "e5f6g7h8-...",
    "name": "Nike Campaign",
    "description": "Q2 2026 drop",
    "icon": "👟",
    "color": "#00f2ff",
    "status": "active",
    "createdAt": "2026-01-10T09:00:00Z"
  }
]
POST /api/v1/projects Créer un projet
Paramètres du Body
NomTypeObrigatórioDescrição
name string required Nom du projet
description string optional Description optionnelle
icon string optional Emoji icône
color string optional Couleur hex ex : #00f2ff
Body de la requête
{
  "name": "Nike Campaign",
  "description": "Q2 2026 drop",
  "icon": "👟",
  "color": "#00f2ff"
}
cURL
curl https://useinmedia.com/api/v1/projects \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Nike Campaign", "description": "Q2 2026 drop", "icon": "👟", "color": "#00f2ff" }'
Réponse
{
  "id": "e5f6g7h8-...",
  "name": "Nike Campaign",
  "status": "active",
  "createdAt": "2026-04-14T12:00:00Z"
}
PUT /api/v1/projects/ {id} Mettre à jour un projet
Paramètres du Body
NomTypeObrigatórioDescrição
name string optional Nouveau nom
description string optional Nouvelle description
status string optional actif | archivé
Body de la requête
{ "name": "Nike Campaign v2", "status": "archived" }
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Nike Campaign v2", "status": "archived" }'
Réponse
{ "id": "...", "name": "Nike Campaign v2", "status": "archived" }
GET /api/v1/projects/ {id} Trouver un projet par ID
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -H "Authorization: Bearer sk_..."
Réponse
{
  "id": "e5f6g7h8-...",
  "name": "Nike Campaign",
  "description": "Q2 2026 drop",
  "icon": "👟",
  "color": "#00f2ff",
  "status": "active",
  "coverUrl": "https://...",
  "createdAt": "2026-01-10T09:00:00Z"
}
POST /api/v1/projects/ {id} /cover Téléverser une image de couverture sur un projet (multipart/form-data)
Paramètres du Body
NomTypeObrigatórioDescrição
file file required JPEG, PNG ou WebP. Max 10 Mo
cURL
curl https://useinmedia.com/api/v1/projects/<id>/cover \
  -X POST \
  -H "Authorization: Bearer sk_..."
Réponse
{ "id": "...", "coverUrl": "https://...", "name": "Nike Campaign" }
DELETE /api/v1/projects/ {id} /cover Supprimer l'image de couverture d'un projet
cURL
curl https://useinmedia.com/api/v1/projects/<id>/cover \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Réponse
204 No Content
DELETE /api/v1/projects/ {id} Supprimer un projet
cURL
curl https://useinmedia.com/api/v1/projects/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Réponse
204 No Content

Brand Kits

Enregistrez les couleurs, polices et logos de la marque. Le plan Starter est limité à 1 Brand Kit.

GET /api/v1/brandkits Lister les Brand Kits
cURL
curl https://useinmedia.com/api/v1/brandkits \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "id": "k1l2m3n4-...",
    "name": "Main Brand",
    "colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
    "fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
    "logoUrl": "https://..."
  }
]
POST /api/v1/brandkits Créer un Brand Kit
Paramètres du Body
NomTypeObrigatórioDescrição
name string required Nom du Brand Kit
colors.primary string optional Couleur principale hex
colors.secondary string optional Couleur secondaire hex
colors.accent string optional Couleur de mise en évidence hex
colors.neutral string optional Couleur neutre hex
fonts.heading string optional Police de titre
fonts.body string optional Police du corps
logoUrl string optional URL publique de l'image du logo
Body de la requête
{
  "name": "Main Brand",
  "colors": {
    "primary": "#00f2ff",
    "secondary": "#020408",
    "accent": "#ffffff",
    "neutral": "#888888"
  },
  "fonts": {
    "heading": "Plus Jakarta Sans",
    "body": "Inter"
  },
  "logoUrl": "https://example.com/logo.png"
}
cURL
curl https://useinmedia.com/api/v1/brandkits \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Main Brand", "colors": { "primary": "#00f2ff", "secondary": "#020408", "accent": "#ffffff", "neutral": "#888888" }, "fonts": { "heading": "Plus Jakarta Sans", "body": "Inter" }, "logoUrl": "https://example.com/logo.png" }'
Réponse
{ "id": "k1l2m3n4-...", "name": "Main Brand", ... }
PUT /api/v1/brandkits/ {id} Mettre à jour un Brand Kit
Paramètres du Body
NomTypeObrigatórioDescrição
name string optional Nouveau nom
colors object optional Couleurs à mettre à jour (même format que la création)
fonts object optional Polices à mettre à jour
Body de la requête
{ "colors": { "primary": "#ff5733" } }
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "colors": { "primary": "#ff5733" } }'
Réponse
{ "id": "...", "name": "Main Brand", ... }
GET /api/v1/brandkits/ {id} Trouver un Brand Kit par ID
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -H "Authorization: Bearer sk_..."
Réponse
{
  "id": "k1l2m3n4-...",
  "name": "Main Brand",
  "colorsJson": "{\"primary\":\"#00f2ff\",\"secondary\":\"#020408\"}",
  "fontsJson": "{\"heading\":\"Plus Jakarta Sans\",\"body\":\"Inter\"}",
  "logoUrl": "https://..."
}
DELETE /api/v1/brandkits/ {id} Supprimer un Brand Kit
cURL
curl https://useinmedia.com/api/v1/brandkits/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Réponse
204 No Content

Programmes

Automatisez la génération de contenu récurrente avec des horaires cron. Nécessite le plan Growth.

Plan requis Growth+
GET /api/v1/schedules Lister les plannings
cURL
curl https://useinmedia.com/api/v1/schedules \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "id": "s1s2s3s4-...",
    "name": "Daily Instagram Post",
    "cronExpression": "0 9 * * *",
    "isActive": true,
    "promptTemplate": "Generate a motivational post for today.",
    "nextRunAt": "2026-04-15T09:00:00Z"
  }
]
POST /api/v1/schedules Créer un planning Growth+
Paramètres du Body
NomTypeObrigatórioDescrição
name string required Nom du planning
cronExpression string required Expression cron à 5 champs, ex: "0 9 * * 1"
promptTemplate string optional Invite utilisée à chaque exécution (max 5000 caractères)
projectId guid optional Projet des publications générées
brandKitId guid optional Brand Kit à appliquer
Body de la requête
{
  "name": "Daily Instagram Post",
  "cronExpression": "0 9 * * *",
  "promptTemplate": "Generate a motivational post for today.",
  "projectId": "e5f6g7h8-...",
  "brandKitId": "k1l2m3n4-..."
}
cURL
curl https://useinmedia.com/api/v1/schedules \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Daily Instagram Post", "cronExpression": "0 9 * * *", "promptTemplate": "Generate a motivational post for today.", "projectId": "e5f6g7h8-...", "brandKitId": "k1l2m3n4-..." }'
Réponse
{
  "id": "s1s2s3s4-...",
  "name": "Daily Instagram Post",
  "cronExpression": "0 9 * * *",
  "isActive": true,
  "nextRunAt": "2026-04-15T09:00:00Z"
}
PUT /api/v1/schedules/ {id} Mettre à jour un planning
Paramètres du Body
NomTypeObrigatórioDescrição
name string optional Nouveau nom
cronExpression string optional Nouvelle expression cron
isActive boolean optional Activer ou désactiver le planning
promptTemplate string optional Nouveau modèle de prompt
Body de la requête
{ "isActive": false }
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "isActive": false }'
Réponse
{ "id": "...", "isActive": false, ... }
GET /api/v1/schedules/ {id} Trouver un planning par ID
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -H "Authorization: Bearer sk_..."
Réponse
{
  "id": "s1s2s3s4-...",
  "name": "Daily Instagram Post",
  "cronExpression": "0 9 * * *",
  "isActive": true,
  "promptTemplate": "Generate a motivational post for today.",
  "lastRunAt": "2026-04-13T09:00:00Z",
  "nextRunAt": "2026-04-15T09:00:00Z"
}
DELETE /api/v1/schedules/ {id} Supprimer un planning
cURL
curl https://useinmedia.com/api/v1/schedules/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Réponse
204 No Content

Webhooks

Recevez des notifications HTTP en temps réel lorsque des événements se produisent dans votre espace de travail. Nécessite le plan Growth.

Plan requis Growth+
GET /api/v1/webhooks Lister les webhooks
cURL
curl https://useinmedia.com/api/v1/webhooks \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "id": "w1w2w3w4-...",
    "url": "https://yourapp.com/hooks/inmedia",
    "events": "post.published,post.failed",
    "isActive": true,
    "lastTriggeredAt": "2026-04-14T10:00:00Z"
  }
]
POST /api/v1/webhooks Enregistrer un webhook Growth+
Paramètres du Body
NomTypeObrigatórioDescrição
url string required Point de terminaison HTTPS pour recevoir des événements
events string required Noms d'événements séparés par des virgules (voir section Événements)
secret string optional Secret optionnel pour la vérification de signature HMAC-SHA256
Body de la requête
{
  "url": "https://yourapp.com/hooks/inmedia",
  "events": "post.published,post.failed",
  "secret": "my-webhook-secret"
}
cURL
curl https://useinmedia.com/api/v1/webhooks \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://yourapp.com/hooks/inmedia", "events": "post.published,post.failed", "secret": "my-webhook-secret" }'
Réponse
{
  "id": "w1w2w3w4-...",
  "url": "https://yourapp.com/hooks/inmedia",
  "events": "post.published,post.failed",
  "isActive": true,
  "createdAt": "2026-04-14T12:00:00Z"
}
PUT /api/v1/webhooks/ {id} Mettre à jour un webhook
Paramètres du Body
NomTypeObrigatórioDescrição
url string optional Nouvelle URL du point de terminaison
events string optional Nouvelle liste d'événements
isActive boolean optional Activer ou désactiver
Body de la requête
{ "isActive": false }
cURL
curl https://useinmedia.com/api/v1/webhooks/<id> \
  -X PUT \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "isActive": false }'
Réponse
{ "id": "...", "isActive": false, ... }
DELETE /api/v1/webhooks/ {id} Supprimer un webhook
cURL
curl https://useinmedia.com/api/v1/webhooks/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Réponse
204 No Content

Video

Interrogez les tâches de génération vidéo et récupérez les URLs pré-signées. La génération vidéo est initiée depuis l'éditeur du tableau de bord.

Plan requis Growth+
GET /api/v1/video/jobs/ {jobId} Consulter le statut d'un job de génération de vidéo Growth+
cURL
curl https://useinmedia.com/api/v1/video/jobs/<jobId> \
  -H "Authorization: Bearer sk_..."
Réponse
{
  "status": "done",
  "postId": "e5f6g7h8-...",
  "videoUrl": "https://presigned-s3-url...",
  "message": "Video generated successfully!",
  "error": null
}
GET /api/v1/video/presign/ {postId} Obtenir l'URL signée mise à jour pour la vidéo d'un post Growth+
cURL
curl https://useinmedia.com/api/v1/video/presign/<postId> \
  -H "Authorization: Bearer sk_..."
Réponse
{ "url": "https://presigned-s3-url..." }

Utilisation

Vérifiez votre quota de plan et l'activité de génération.

GET /api/v1/usage/activity Consulter les activités de génération
Parâmetros de Query
NomTypeObrigatórioDescrição
page integer optional Numéro de page (par défaut : 1)
pageSize integer optional Éléments par page (par défaut : 50)
cURL
curl https://useinmedia.com/api/v1/usage/activity \
  -H "Authorization: Bearer sk_..."
Réponse
{
  "activity": [
    {
      "id": "t1t2t3t4-...",
      "type": "PostGeneration",
      "typeLabel": "Content generation",
      "description": "Air Jordan launch",
      "createdAt": "2026-04-14T12:00:00Z"
    }
  ]
}

API Keys

Créez et gérez des clés API programmatiques. Nécessite le plan Growth.

Plan requis Growth+
GET /api/v1/api-keys Lister les clés API
cURL
curl https://useinmedia.com/api/v1/api-keys \
  -H "Authorization: Bearer sk_..."
Réponse
[
  {
    "id": "key-uuid-...",
    "name": "Production key",
    "keyPrefix": "sk_abcd",
    "isActive": true,
    "lastUsedAt": "2026-04-13T08:00:00Z",
    "expiresAt": null,
    "createdAt": "2026-01-01T00:00:00Z"
  }
]
POST /api/v1/api-keys Créer une clé API Growth+
Paramètres du Body
NomTypeObrigatórioDescrição
name string required Nom descriptif pour la clé
expiresAt datetime optional Expiration optionnelle (ISO 8601)
Body de la requête
{ "name": "Production key" }
cURL
curl https://useinmedia.com/api/v1/api-keys \
  -X POST \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "name": "Production key" }'
Réponse
{
  "id": "key-uuid-...",
  "key": "sk_aBcDeFgHiJkLmNoPqRsTuVwXyZ1234567890abcd",
  "prefix": "sk_aBcDe",
  "name": "Production key"
}
DELETE /api/v1/api-keys/ {id} Révoquer une clé API
cURL
curl https://useinmedia.com/api/v1/api-keys/<id> \
  -X DELETE \
  -H "Authorization: Bearer sk_..."
Réponse
204 No Content
POST /api/v1/api-keys/ {id} /regenerate Régénérer une clé API
cURL
curl https://useinmedia.com/api/v1/api-keys/<id>/regenerate \
  -X POST \
  -H "Authorization: Bearer sk_..."
Réponse
{ "id": "...", "key": "sk_NEW...", "prefix": "sk_NEW" }