REST APIPOST

Criar publicação via API

Publique ou agende uma publicação em várias plataformas com uma única chamada de API, incluindo conteúdo e mídia.

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

Crie uma nova publicação nas redes sociais. As publicações podem ser publicadas imediatamente, agendadas para mais tarde ou salvas como rascunho.

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

posts.draft basta quando saveAsDraft é true. Um scheduledAt futuro exige posts.schedule. Sem scheduledAt, ou com um horário já passado, a publicação sai agora e exige posts.publish. Uma chave de Colaborador, portanto, só consegue salvar rascunhos.

Parâmetros do Corpo

ParâmetroTipoDescrição
platformsOBRIGATÓRIOPlatformType[]Plataformas alvo (ex.: TWITTER, LINKEDIN, INSTAGRAM). Cada uma também precisa dos seus IDs de conexão
contentTypeOBRIGATÓRIOContentTypeTEXT, IMAGE, VIDEO, CAROUSEL ou DOCUMENT. DOCUMENT é só para o LinkedIn: exatamente um arquivo PDF, PPT, PPTX, DOC ou DOCX em mediaUrls, exibido como documento deslizável
textstringConteúdo de texto da publicação. No LinkedIn, mencione uma página de empresa com @[Nome da página](urn:li:organization:<id>), escrevendo o nome exatamente como o LinkedIn o mostra. O LinkedIn só permite mencionar páginas de empresa, não pessoas
platformTextsPlatformText[]Textos personalizados por plataforma
mediaUrlsstring[]URLs dos arquivos de mídia enviados
mediaAltTextsstring[]Texto alternativo de cada imagem, na mesma ordem que mediaUrls. Máximo de 1000 caracteres cada; use uma string vazia para ignorar uma imagem. Enviado para X, Bluesky, Mastodon, LinkedIn, Facebook, Instagram e Threads. O Pinterest usa o primeiro, cortado a 500 caracteres. TikTok, YouTube, o Perfil da Empresa no Google e vídeos o ignoram.
thumbnailUrlstringURL da miniatura para publicações de vídeo
thumbnailTimestampMsnumberQuadro do vídeo a usar como miniatura, em milissegundos desde o início
platformThumbnailsPlatformThumbnail[]Uma miniatura diferente para uma plataforma de uma publicação de vídeo, como { platform, thumbnailUrl?, thumbnailTimestampMs? }. YOUTUBE, FACEBOOK, LINKEDIN e TELEGRAM aceitam uma imagem, INSTAGRAM e PINTEREST uma imagem ou um quadro, TIKTOK só um quadro. Plataformas sem entrada usam thumbnailUrl e thumbnailTimestampMs
platformAspectRatiosPlatformAspectRatio[]Ajusta todas as imagens de uma publicação IMAGE ou CAROUSEL a um formato em uma plataforma, como { platform, aspectRatio, fit? }. Uma entrada por plataforma. aspectRatio é SQUARE (1:1), PORTRAIT (4:5), VERTICAL (9:16) ou LANDSCAPE (1.91:1): INSTAGRAM aceita SQUARE, PORTRAIT ou LANDSCAPE, TIKTOK os quatro. fit é CROP (padrão, corta a partir do centro) ou PAD (mantém a imagem inteira e preenche o resto com uma cópia desfocada). Outras plataformas, publicações de vídeo, stories do Instagram e uma segunda entrada para a mesma plataforma retornam um 400. Plataformas sem entrada mantêm as imagens como você enviou
firstCommentsPlatformFirstComment[]Um comentário publicado abaixo da publicação pela mesma conta, como { platform, text }. Uma entrada por plataforma. LINKEDIN aceita até 1250 caracteres, TWITTER 280, THREADS 500, BLUESKY 300, MASTODON 500, YOUTUBE 10000 (não em vídeos privados ou feitos para crianças), FACEBOOK 8000 e INSTAGRAM 2200 (não em stories). Outras plataformas retornam um 400. Uma página do Facebook ou conta do Instagram conectada antes da chegada dos primeiros comentários precisa ser reconectada uma vez; até lá, o comentário falha com firstCommentError
threadRepliesPlatformThreadReplies[]Transforma a publicação num fio, como { platform, texts }: a publicação abre-o e cada texto sai como resposta ao anterior, da mesma conta. Uma entrada por plataforma, até 25 textos. TWITTER aceita 280 caracteres por resposta (mais com X Premium), THREADS 500, BLUESKY 300 e MASTODON 500 (ou o limite da instância). Outras plataformas, uma resposta vazia ou longa demais e uma plataforma que também tem primeiro comentário devolvem um 400
scheduledAtstringData em ISO 8601 para agendamento. Omita para publicar imediatamente.
timezoneOBRIGATÓRIOstringFuso horário IANA (ex.: America/New_York)
saveAsDraftbooleanSalvar como rascunho em vez de publicar
recurrenceRecurrenceRepete a publicação em uma agenda. Exige um scheduledAt futuro. Veja Publicações recorrentes abaixo
twitterConnectionIdsstring[]IDs de conexão da conta do Twitter
twitterKeepLinksbooleanMantém clicáveis os links do texto do X. Por padrão, cada link no texto do X é quebrado (example.com vira example. com), porque o X cobra mais de 10 vezes mais por um post com link. Só contas com lifetime deal da AppSumo podem ativar isso: um link mantido custa 20 créditos em vez de 2, também em um primeiro comentário no X, e sem créditos suficientes o post no X falha. true retorna 400 em qualquer outro plano. Ignorado quando o texto do X não tem link
linkedinConnectionIdsstring[]IDs de conexão da conta do LinkedIn
instagramConnectionIdsstring[]IDs de conexão da conta do Instagram
tiktokConnectionIdsstring[]IDs de conexão da conta do TikTok
youtubeConnectionIdsstring[]IDs de conexão do canal do YouTube
pinterestConnectionIdsstring[]IDs de conexão da conta do Pinterest
blueskyConnectionIdsstring[]IDs de conexão da conta do Bluesky
mastodonConnectionIdsstring[]IDs de conexão da conta do Mastodon
googleBusinessConnectionIdsstring[]IDs de conexão dos locais do Perfil da Empresa no Google
googleBusinessConfigsGoogleBusinessConfig[]Configurações de post do Perfil da Empresa no Google por local: tipo de post (novidade, evento ou oferta), botão, datas do evento e detalhes da oferta. Consulte Configurações de Plataforma para o esquema
tumblrConnectionIdsstring[]IDs de conexão dos blogs do Tumblr
telegramConnectionIdsstring[]IDs de conexão dos canais e grupos do Telegram
tumblrConfigsTumblrConfig[]Configurações do Tumblr por blog: tags, título e link de origem. Veja Configurações de plataforma para o esquema
threadsConnectionIdsstring[]IDs de conexão da conta do Threads
pageIdsstring[]Páginas do Facebook onde publicar. Aceita o id da conta ou o pageId de /social-accounts
pinterestConfigsPinterestConfig[]Configurações desta plataforma, um objeto por conta, cada um com o connectionId a que se aplica (pageId no Facebook). Consulte Configurações de Plataforma
tiktokConfigsTikTokConfig[]Configurações desta plataforma, um objeto por conta, cada um com o connectionId a que se aplica (pageId no Facebook). Consulte Configurações de Plataforma
instagramConfigsInstagramConfig[]Configurações desta plataforma, um objeto por conta, cada um com o connectionId a que se aplica (pageId no Facebook). Consulte Configurações de Plataforma
facebookConfigsFacebookConfig[]Configurações desta plataforma, um objeto por conta, cada um com o connectionId a que se aplica (pageId no Facebook). Consulte Configurações de Plataforma
youtubeConfigsYouTubeConfig[]Configurações desta plataforma, um objeto por conta, cada um com o connectionId a que se aplica (pageId no Facebook). Consulte Configurações de Plataforma
linkedinConfigsLinkedInConfig[]Configurações desta plataforma, um objeto por conta, cada um com o connectionId a que se aplica (pageId no Facebook). Consulte Configurações de Plataforma

Texto Específico por Plataforma

Use platformTexts para personalizar o conteúdo por plataforma enquanto compartilha a mesma publicação.

Quando uma plataforma não tem entrada em platformTexts, o campo text padrão é usado.

Uma conta por plataforma

Apenas uma conta por plataforma é permitida por publicação. Por exemplo, você não pode incluir dois IDs de conexão do Twitter na mesma requisição. Esta restrição é aplicada para cumprir os Termos de Serviço das plataformas. Violar esta regra retornará um erro 400.

Publicações recorrentes

Adicione um objeto recurrence para repetir a publicação. A publicação em scheduledAt é a primeira da série e define o horário, no timezone que você enviar. Só a próxima publicação da série existe. O AdaptlyPost a cria cerca de 24 horas antes de ela sair.

Objeto recurrence

ParâmetroTipoDescrição
frequencyOBRIGATÓRIORecurrenceFrequencyDAILY, WEEKLY, MONTHLY ou YEARLY. YEARLY publica todo ano na mesma data; uma série iniciada em 29 de fevereiro publica em 28 de fevereiro nos outros anos
intervalnumberRepetir a cada N dias, semanas, meses ou anos (1-30, padrão: 1)
weekdaysWeekday[]Só WEEKLY. Os dias de publicação, de MONDAY a SUNDAY. O dia da semana de scheduledAt sempre é incluído
endsOnstringÚltimo dia em que uma publicação pode sair, no formato YYYY-MM-DD. Deve ser no dia da primeira publicação ou depois. Não pode ser combinado com maxOccurrences
maxOccurrencesnumberNúmero total de publicações da série (2-365). Não pode ser combinado com endsOn. Sem nenhum dos dois, a série se repete até você pausá-la ou excluí-la
A resposta inclui recurringPostId, e postId é a primeira publicação da série. Use recurringPostId com os endpoints de publicações recorrentes para pausar, retomar ou excluir a série.

Regras das publicações recorrentes

Uma publicação recorrente não pode usar saveAsDraft: true nem incluir uma conta do TikTok. Qualquer um dos dois retorna 400. Datas perdidas enquanto a série está pausada são puladas, nunca publicadas com atraso. X e LinkedIn rejeitam texto igual ao de uma publicação anterior, então adicione spintax como {Hi|Hello} para que cada publicação seja diferente.

Quando uma publicação é recusada

Uma publicação recusada pelo conteúdo responde 400 com code post_validation_failed e issues, que lista todos os problemas encontrados de uma vez, no mesmo formato dos issues de Verificar Publicação. message é o texto do problema quando há um, e uma lista de textos quando há vários.

{
  "statusCode": 400,
  "error": "Bad Request",
  "code": "post_validation_failed",
  "message": [
    "Text exceeds maximum length for Twitter/X. Maximum is 280 characters",
    "Video duration (185s) exceeds your TikTok account limit of 180 seconds"
  ],
  "issues": [
    {
      "code": "TEXT_TOO_LONG",
      "severity": "ERROR",
      "message": "Text exceeds maximum length for Twitter/X. Maximum is 280 characters",
      "platform": "TWITTER",
      "connectionId": "conn_abc123"
    },
    {
      "code": "TIKTOK_VIDEO_TOO_LONG",
      "severity": "ERROR",
      "message": "Video duration (185s) exceeds your TikTok account limit of 180 seconds",
      "platform": "TIKTOK",
      "connectionId": "conn_tt789"
    }
  ]
}
Para ver esses problemas sem criar nada, envie antes o mesmo corpo para Verificar Publicação (POST /api/v1/social-posts/validate).
Criar uma publicação social
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/social-posts \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "platforms": ["TWITTER", "LINKEDIN"],
    "contentType": "TEXT",
    "text": "Exciting product update!",
    "timezone": "America/New_York",
    "twitterConnectionIds": ["conn_abc123"],
    "linkedinConnectionIds": ["conn_def456"]
  }'
Criar uma publicação recorrente
curl --request POST \
  --url https://post.adaptlypost.com/post/api/v1/social-posts \
  --header 'Authorization: Bearer <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
    "platforms": ["LINKEDIN"],
    "contentType": "TEXT",
    "text": "{Hi|Hello} everyone, the weekly product tip is live!",
    "scheduledAt": "2026-10-05T13:00:00Z",
    "timezone": "America/New_York",
    "linkedinConnectionIds": ["conn_def456"],
    "recurrence": {
      "frequency": "WEEKLY",
      "weekdays": ["MONDAY", "THURSDAY"],
      "maxOccurrences": 12
    }
  }'
201
{
  "postId": "post_xyz789",
  "queuedPlatforms": ["TWITTER", "LINKEDIN"],
  "skippedPlatforms": [],
  "isScheduled": false,
  "scheduledAt": null
}