REST APIPOST

Verificar uma Publicação Antes de Criá-la

Faça um teste de uma publicação: envie o mesmo corpo de Criar Publicação e receba cada problema que a impediria, por conta, sem criar nada.

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

Executa todas as verificações de Criar Publicação sem criar nada. Envie o mesmo corpo e veja o que a publicação faria e cada problema que a impediria.

Chave API (Bearer token)
Permissão:posts.draftPapéis e permissões

posts.draft basta para executar a verificação, faça a publicação o que fizer. requiredPermissions na resposta indica o que criar a publicação exigiria, e uma chave sem uma delas recebe um problema PERMISSION_DENIED.

Corpo da requisição

O mesmo corpo de Criar Publicação, campo a campo. Nada é criado, nenhuma mídia é enviada e nada é salvo. Um corpo bem formado sempre responde 200 com um relatório, mesmo quando a publicação seria recusada. Só um corpo malformado responde 400.

Problemas encontrados antes de publicar

Além de todas as verificações de Criar Publicação, o relatório cobre problemas que de outra forma só apareceriam na hora de publicar: os limites de criador do TikTok, o limite diário de envios do YouTube para canais sem envio reserva, o acesso expirado ao Instagram e ao Threads, servidores Mastodon que aceitam menos anexos, pastas do Pinterest que não existem e os créditos do X nos planos vitalícios.

Campos da resposta

CampoDescrição
validfalse quando algum problema tem severidade ERROR, no nível superior ou em uma conta
outcomeO que criar a publicação faria: PUBLISH_NOW, SCHEDULED ou DRAFT
scheduledAtQuando a publicação sairia (ISO 8601). Só aparece quando outcome é SCHEDULED
requiredPermissionsAs permissões que criar a publicação exigiria, como posts.schedule
issuesProblemas que não são de uma conta específica, como uma permissão que falta
accountsUma entrada por conta selecionada, com os campos abaixo
notCheckedO que só a plataforma pode decidir na hora de publicar, como { code, message }. code é PLATFORM_PROCESSING, DUPLICATE_CONTENT, PLATFORM_RATE_LIMITS, LIVE_ACCOUNT_ACCESS ou VIDEO_DURATION

Campos da conta

CampoDescrição
platform, connectionId, accountNameA plataforma da conta, o ID de conexão e o nome, quando conhecido
statusREADY, WARNING (sai com uma ressalva) ou BLOCKED (não sairia)
issuesOs problemas encontrados para esta conta

Campos do problema

CampoDescrição
codeUm motivo estável como TEXT_TOO_LONG, ACCOUNT_DISCONNECTED, TIKTOK_POSTING_BLOCKED ou YOUTUBE_UPLOAD_QUOTA_EXHAUSTED. Novos códigos podem surgir, então mostre message para um código que você não conhece
severityERROR impede a publicação, ou aquela conta, de sair. WARNING deixa passar
messageUma frase legível que você pode mostrar como está
platform, connectionIdA plataforma e a conta a que o problema se refere, quando se refere a uma

valid: true não é uma garantia

Uma plataforma ainda pode recusar uma mídia ao processá-la, recusar uma publicação duplicada ou atingir um limite de frequência na hora de publicar. notChecked lista esses casos. Você nunca precisa executar a verificação antes de Criar Publicação, que refaz as mesmas verificações.
Verificar uma publicação
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"
    }
  ]
}