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.
https://post.adaptlypost.com/post/api/v1/social-postsCrie uma nova publicação nas redes sociais. As publicações podem ser publicadas imediatamente, agendadas para mais tarde ou salvas como rascunho.
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âmetro | Tipo | Descrição |
|---|---|---|
platformsOBRIGATÓRIO | PlatformType[] | Plataformas alvo (ex.: TWITTER, LINKEDIN, INSTAGRAM). Cada uma também precisa dos seus IDs de conexão |
contentTypeOBRIGATÓRIO | ContentType | TEXT, 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 |
text | string | Conteú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 |
platformTexts | PlatformText[] | Textos personalizados por plataforma |
mediaUrls | string[] | URLs dos arquivos de mídia enviados |
mediaAltTexts | string[] | 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. |
thumbnailUrl | string | URL da miniatura para publicações de vídeo |
thumbnailTimestampMs | number | Quadro do vídeo a usar como miniatura, em milissegundos desde o início |
platformThumbnails | PlatformThumbnail[] | 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 |
platformAspectRatios | PlatformAspectRatio[] | 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 |
firstComments | PlatformFirstComment[] | 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 |
threadReplies | PlatformThreadReplies[] | 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 |
scheduledAt | string | Data em ISO 8601 para agendamento. Omita para publicar imediatamente. |
timezoneOBRIGATÓRIO | string | Fuso horário IANA (ex.: America/New_York) |
saveAsDraft | boolean | Salvar como rascunho em vez de publicar |
recurrence | Recurrence | Repete a publicação em uma agenda. Exige um scheduledAt futuro. Veja Publicações recorrentes abaixo |
twitterConnectionIds | string[] | IDs de conexão da conta do Twitter |
twitterKeepLinks | boolean | Manté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 |
linkedinConnectionIds | string[] | IDs de conexão da conta do LinkedIn |
instagramConnectionIds | string[] | IDs de conexão da conta do Instagram |
tiktokConnectionIds | string[] | IDs de conexão da conta do TikTok |
youtubeConnectionIds | string[] | IDs de conexão do canal do YouTube |
pinterestConnectionIds | string[] | IDs de conexão da conta do Pinterest |
blueskyConnectionIds | string[] | IDs de conexão da conta do Bluesky |
mastodonConnectionIds | string[] | IDs de conexão da conta do Mastodon |
googleBusinessConnectionIds | string[] | IDs de conexão dos locais do Perfil da Empresa no Google |
googleBusinessConfigs | GoogleBusinessConfig[] | 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 |
tumblrConnectionIds | string[] | IDs de conexão dos blogs do Tumblr |
telegramConnectionIds | string[] | IDs de conexão dos canais e grupos do Telegram |
tumblrConfigs | TumblrConfig[] | Configurações do Tumblr por blog: tags, título e link de origem. Veja Configurações de plataforma para o esquema |
threadsConnectionIds | string[] | IDs de conexão da conta do Threads |
pageIds | string[] | Páginas do Facebook onde publicar. Aceita o id da conta ou o pageId de /social-accounts |
pinterestConfigs | PinterestConfig[] | 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 |
tiktokConfigs | TikTokConfig[] | 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 |
instagramConfigs | InstagramConfig[] | 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 |
facebookConfigs | FacebookConfig[] | 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 |
youtubeConfigs | YouTubeConfig[] | 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 |
linkedinConfigs | LinkedInConfig[] | 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.
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âmetro | Tipo | Descrição |
|---|---|---|
frequencyOBRIGATÓRIO | RecurrenceFrequency | DAILY, 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 |
interval | number | Repetir a cada N dias, semanas, meses ou anos (1-30, padrão: 1) |
weekdays | Weekday[] | Só WEEKLY. Os dias de publicação, de MONDAY a SUNDAY. O dia da semana de scheduledAt sempre é incluído |
endsOn | string | Ú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 |
maxOccurrences | number | Nú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 |
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"
}
]
}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"]
}'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
}
}'{
"postId": "post_xyz789",
"queuedPlatforms": ["TWITTER", "LINKEDIN"],
"skippedPlatforms": [],
"isScheduled": false,
"scheduledAt": null
}