REST APIPOST

Vérifier une publication avant de la créer

Faites un essai à blanc d'une publication : envoyez le même corps que pour Créer une publication et obtenez chaque problème qui l'arrêterait, par compte, sans rien créer.

POSThttps://post.adaptlypost.com/post/api/v1/social-posts/validate

Lance toutes les vérifications de Créer une publication sans rien créer. Envoyez le même corps et lisez ce que ferait la publication et chaque problème qui l'arrêterait.

Clé API (jeton Bearer)
Permission:posts.draftRôles et permissions

posts.draft suffit pour lancer la vérification, quoi que fasse la publication. requiredPermissions dans la réponse indique ce dont la création aurait besoin, et une clé à laquelle il en manque une reçoit un problème PERMISSION_DENIED.

Corps de la requête

Le même corps que Créer une publication, champ pour champ. Rien n'est créé, aucun média n'est envoyé et rien n'est enregistré. Un corps bien formé répond toujours 200 avec un rapport, même si la publication serait refusée. Seul un corps mal formé répond 400.

Problèmes détectés avant la publication

En plus de toutes les vérifications de Créer une publication, le rapport couvre des problèmes qui n'apparaîtraient sinon qu'au moment de publier : les limites de créateur TikTok, la limite quotidienne d'envois YouTube pour les chaînes sans envoi de secours, l'accès expiré à Instagram et Threads, les serveurs Mastodon qui acceptent moins de pièces jointes, les tableaux Pinterest inexistants et les crédits X des offres à vie.

Champs de la réponse

ChampDescription
validfalse dès qu'un problème a la gravité ERROR, au niveau supérieur ou sous un compte
outcomeCe que ferait la création de la publication : PUBLISH_NOW, SCHEDULED ou DRAFT
scheduledAtQuand la publication partirait (ISO 8601). Présent seulement quand outcome vaut SCHEDULED
requiredPermissionsLes permissions dont la création aurait besoin, comme posts.schedule
issuesLes problèmes qui ne concernent pas un compte précis, comme une permission manquante
accountsUne entrée par compte sélectionné, avec les champs ci-dessous
notCheckedCe que seule la plateforme peut décider au moment de publier, sous la forme { code, message }. code vaut PLATFORM_PROCESSING, DUPLICATE_CONTENT, PLATFORM_RATE_LIMITS, LIVE_ACCOUNT_ACCESS ou VIDEO_DURATION

Champs du compte

ChampDescription
platform, connectionId, accountNameLa plateforme du compte, son ID de connexion et son nom quand il est connu
statusREADY, WARNING (part avec une réserve) ou BLOCKED (ne partirait pas)
issuesLes problèmes trouvés pour ce compte

Champs du problème

ChampDescription
codeUne raison stable comme TEXT_TOO_LONG, ACCOUNT_DISCONNECTED, TIKTOK_POSTING_BLOCKED ou YOUTUBE_UPLOAD_QUOTA_EXHAUSTED. De nouveaux codes peuvent apparaître, affichez donc message pour un code que vous ne connaissez pas
severityERROR empêche la publication, ou ce compte, de partir. WARNING la laisse passer
messageUne phrase lisible que vous pouvez afficher telle quelle
platform, connectionIdLa plateforme et le compte concernés, quand le problème en concerne un

valid: true n'est pas une garantie

Une plateforme peut encore refuser un média pendant son traitement, refuser une publication en double ou atteindre une limite de fréquence au moment de publier. notChecked les liste. Vous n'avez jamais besoin de lancer la vérification avant Créer une publication, qui refait les mêmes vérifications.
Vérifier une publication
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/social-posts/validate \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "platforms": ["TWITTER", "TIKTOK"],
    "contentType": "VIDEO",
    "text": "Behind the scenes of our launch",
    "mediaUrls": ["https://cdn.adaptlypost.com/uploads/launch.mp4"],
    "scheduledAt": "2026-11-03T15:00:00Z",
    "timezone": "America/New_York",
    "twitterConnectionIds": ["conn_abc123"],
    "tiktokConnectionIds": ["conn_tt789"]
  }'
200
{
  "valid": false,
  "outcome": "SCHEDULED",
  "scheduledAt": "2026-11-03T15:00:00.000Z",
  "requiredPermissions": ["posts.schedule"],
  "issues": [],
  "accounts": [
    {
      "platform": "TWITTER",
      "connectionId": "conn_abc123",
      "accountName": "@yourhandle",
      "status": "READY",
      "issues": []
    },
    {
      "platform": "TIKTOK",
      "connectionId": "conn_tt789",
      "accountName": "yourbrand",
      "status": "BLOCKED",
      "issues": [
        {
          "code": "TIKTOK_VIDEO_TOO_LONG",
          "severity": "ERROR",
          "message": "Video duration (185s) exceeds your TikTok account limit of 180 seconds",
          "platform": "TIKTOK",
          "connectionId": "conn_tt789"
        }
      ]
    }
  ],
  "notChecked": [
    {
      "code": "PLATFORM_PROCESSING",
      "message": "The platform processes media after upload and can still reject it then"
    }
  ]
}