https://post.chatclean.com.br/api com uma chave de API do workspace.
1
Liste as contas sociais
Encontre o canal em que vai publicar e veja os limites dele.
2
Confira os tipos de conteúdo
Escolha um formato e preencha as configurações que a rede exige.
3
Crie o post
Um post por canal, ou uma chamada para vários canais.
4
Agende, coloque na fila ou publique
Num horário definido, na fila do canal ou agora.
1. Liste as contas sociais
Listar contas sociais devolve os canais conectados ao workspace. Os canais são conectados e removidos no app; a API só os lê.2. Confira os tipos de conteúdo
Listar tipos de conteúdo descreve cada rede: seus tipos de conteúdo, limites de texto e de hashtags, as configurações obrigatórias e a mídia que cada formato aceita.
Quando você omite
content_type, ele é escolhido como no app: no Pinterest, um vídeo vira pinterest_video_pin e várias imagens viram pinterest_carousel; no TikTok, só imagens viram tiktok_photo; as outras redes usam o formato padrão.
Configurações obrigatórias
O post leva as configurações da rede emmeta. Um rascunho pode ser salvo sem elas; agendar ou publicar exige que estejam preenchidas:
As demais configurações são opcionais: prévias de links, rótulos de conteúdo gerado por IA, privacidade e categoria no YouTube, avisos de conteúdo no Mastodon, tópicos no Threads e outras. A lista completa por rede está em
meta em Criar post. Chaves que o PostClean não conhece são descartadas; configurações de outra rede são aceitas, mas não são usadas.
3. Crie o post
Criar post cria um post em um canal: envie emplatforms uma lista com exatamente um item, com o social_account_id do canal e, ao lado dele, o content_type e o meta. Sem status, o post é salvo como rascunho.
201), com status: "draft" e o canal em platforms: cada item traz id, platform, content_type, meta, status (o andamento na rede, começando em pending) e social_account. A mídia pode vir de uma URL, de um upload anterior ou de outro post; veja Envio de mídia.
Vários canais de uma vez
Para enviar o mesmo post a vários canais, use Criar posts em lote. Ele cria um post independente por destino, todos com o mesmopost_group_id, igual a selecionar vários canais no app. Cada destino pode sobrescrever o content, a media, o content_type e o meta compartilhados. Aqui o status é obrigatório.
{ "posts": [...] }, um post por destino. Um erro de validação interrompe a chamada inteira; os erros indicam o destino, por exemplo destinations.1.meta.privacy_level.
4. Agende, coloque na fila ou publique
Ostatus decide o que acontece com o post. Envie-o na criação ou depois, com Atualizar post:
Num horário definido
Enviestatus: scheduled com scheduled_at, um instante no futuro e antes de 2038-01-19. Informe-o em UTC (Z) ou com fuso.
Na fila do canal
Quando o canal tem horários de publicação (has_posting_schedule: true), envie queue no lugar de scheduled_at:
nextpega o primeiro horário livre do canal.toppega o primeiro horário que não esteja ocupado por um post com horário definido e passa os posts da fila que estão atrás dele para o próximo horário livre.
queue_slot com um instante tirado de Listar horários livres da fila. Isso só funciona em Criar post e falha com 422 quando o horário foi ocupado nesse meio-tempo. queue não pode ser combinado com scheduled_at nem com queue_slot. Quando você envia queue_slot, é ele que define o horário; não envie scheduled_at junto.
Um post na fila mantém o horário dele. Para mudar a ordem, use Reordenar a fila ou Mover post para um horário da fila; para mudar os horários, Atualizar horários de postagem (ele substitui a programação inteira: envie o timezone (obrigatório) e o posting_goal e o posting_schedule atuais para mantê-los, porque os valores omitidos são apagados). Para repetir um post agendado, veja Definir repetição do post.
Outra alteração na mesma fila do canal pode estar rodando quando você chamar. Nesse caso a API responde
409; repita a requisição.Agora
Enviestatus: publishing, na criação ou num rascunho ou post agendado que já existe:
status: "publishing" enquanto a rede recebe o post. Depois ele passa a published ou failed (partially_published em posts antigos com vários destinos, quando só parte deles saiu). O lado da rede fica em platforms[].status (pending, publishing, retrying, pending_review, published, failed ou rejected); platforms[].platform_url leva ao post publicado e platforms[].error_message diz o que deu errado. Consulte Ver post periodicamente ou inscreva um webhook em post.published e post.failed.
Posts criados pela API são publicados direto: as chaves de API pertencem a administradores do workspace, então não há etapa de aprovação (veja Aprovações).
Respostas em fio
Posts no X, no Bluesky e no Mastodon podem levar até 24 respostas, publicadas uma embaixo da outra, abaixo do primeiro post. Envie-as emplatforms[0].meta.thread_replies, cada uma como { "text", "media" }:
- Uma resposta precisa de texto ou de mídia.
- O texto de cada resposta precisa caber no limite da conta: 280 no X (25000 com posts longos), 300 no Bluesky e 500 no Mastodon. No Mastodon, o aviso de conteúdo (
spoiler_text) se repete em cada resposta e entra na contagem. - A mídia de uma resposta pertence só a ela: até 4 itens, informados por
url,idouupload_token, seguindo as regras de mídia da rede. - Em Atualizar post,
thread_repliessubstitui a lista inteira.
Limites de conteúdo
Os limites da rede são conferidos quando um post é agendado ou publicado; rascunhos podem passar deles. O teto de 25000 caracteres vale para todo post, inclusive rascunhos.- Texto por conta. O texto precisa caber no
max_content_lengthda conta, medido no texto que a rede recebe. Uma conta do X com posts longos aceita 25000 caracteres; as outras contas do X aceitam 280. Um emoji conta como um caractere. - Hashtags no Instagram. O Instagram aceita no máximo 5 hashtags por post.
- Stories não têm legenda.
instagram_storyefacebook_storynão enviam texto, então o texto deles não é publicado nem medido, e o limite de hashtags não se aplica. - Mídia. Cada tipo de conteúdo tem suas próprias regras de quantidade, tamanho, duração e proporção de mídia, listadas por Listar tipos de conteúdo e na página de cada rede, por exemplo Instagram, X ou TikTok.
Edição, exclusão e erros
- Atualizar post altera só os campos que você envia. O canal é fixo (
social_account_idé recusado); para publicar em outro lugar, crie um novo post. Envie as configurações comocontent_typeemetano nível de cima, ou emplatforms, com oiddo item deplatformsdo post. Ometaé mesclado com as configurações salvas, chave por chave; envienullnuma chave para apagá-la.thread_repliessubstitui a lista inteira. - Posts em
publishing,published,partially_publishedoufailednão podem ser editados: a API responde422comEste post já foi processado e não pode ser republicado. Duplique-o para tentar de novo. - Excluir post remove o post só do PostClean e nunca apaga nada numa rede. Só posts que ainda não foram enviados podem ser excluídos; os demais respondem
422empostcomPosts enviados não podem ser excluídos. - Os erros de validação vêm com o campo como chave. Em Criar post e Atualizar post, o formato dos campos é conferido em
platforms.0.*(platforms.0.content_type,platforms.0.meta.board_id) e nos campos do nível de cima (content,media); as checagens feitas ao montar o post (configuração obrigatória da rede, formato que não combina com a mídia, falta de texto e de mídia) voltam emdestinations.0.*, por exemplodestinations.0.meta.board_id. Em Criar posts em lote, tudo o que é de um destino vem emdestinations.N.*.