REST APIPOST

Crear publicación con la API

Publica o programa una publicación en múltiples plataformas con una sola llamada a la API, incluyendo contenido y medios.

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

Cree una nueva publicación en redes sociales. Las publicaciones pueden publicarse inmediatamente, programarse para más tarde o guardarse como borradores.

Clave API (token Bearer)
Permiso:posts.draftRoles y permisos

posts.draft basta cuando saveAsDraft es true. Un scheduledAt futuro necesita posts.schedule. Sin scheduledAt, o con una hora ya pasada, se publica ahora y hace falta posts.publish. Por tanto, una clave de Colaborador solo puede guardar borradores.

Parámetros del cuerpo

ParámetroTipoDescripción
platformsOBLIGATORIOPlatformType[]Plataformas objetivo (ej. TWITTER, LINKEDIN, INSTAGRAM). Cada una necesita también sus IDs de conexión
contentTypeOBLIGATORIOContentTypeTEXT, IMAGE, VIDEO, CAROUSEL o DOCUMENT. DOCUMENT es solo para LinkedIn: exactamente un archivo PDF, PPT, PPTX, DOC o DOCX en mediaUrls, mostrado como documento deslizable
textstringContenido de texto de la publicación. En LinkedIn, menciona una página de empresa con @[Nombre de la página](urn:li:organization:<id>), escribiendo el nombre exactamente como lo muestra LinkedIn. LinkedIn solo permite mencionar páginas de empresa, no personas
platformTextsPlatformText[]Textos personalizados por plataforma
mediaUrlsstring[]URLs de archivos multimedia subidos
mediaAltTextsstring[]Texto alternativo de cada imagen, en el mismo orden que mediaUrls. Máximo 1000 caracteres cada uno; usa una cadena vacía para omitir una imagen. Se envía a X, Bluesky, Mastodon, LinkedIn, Facebook, Instagram y Threads. Pinterest usa el primero, recortado a 500 caracteres. TikTok, YouTube, el Perfil de Empresa de Google y los vídeos lo ignoran.
thumbnailUrlstringURL de miniatura para publicaciones de video
thumbnailTimestampMsnumberFotograma del video que se usa como miniatura, en milisegundos desde el inicio
platformThumbnailsPlatformThumbnail[]Una miniatura distinta para una plataforma de una publicación de video, como { platform, thumbnailUrl?, thumbnailTimestampMs? }. YOUTUBE, FACEBOOK, LINKEDIN y TELEGRAM aceptan una imagen, INSTAGRAM y PINTEREST una imagen o un fotograma, TIKTOK solo un fotograma. Las plataformas sin entrada usan thumbnailUrl y thumbnailTimestampMs
platformAspectRatiosPlatformAspectRatio[]Ajusta todas las imágenes de una publicación IMAGE o CAROUSEL a un formato en una plataforma, como { platform, aspectRatio, fit? }. Una entrada por plataforma. aspectRatio es SQUARE (1:1), PORTRAIT (4:5), VERTICAL (9:16) o LANDSCAPE (1.91:1): INSTAGRAM acepta SQUARE, PORTRAIT o LANDSCAPE, TIKTOK los cuatro. fit es CROP (por defecto, recorta desde el centro) o PAD (conserva la imagen entera y rellena el resto con una copia desenfocada). Otras plataformas, publicaciones de video, historias de Instagram y una segunda entrada para una plataforma devuelven un 400. Las plataformas sin entrada mantienen las imágenes tal como las subiste
firstCommentsPlatformFirstComment[]Un comentario que se publica bajo la publicación ya publicada desde la misma cuenta, como { platform, text }. Una entrada por plataforma. LINKEDIN acepta hasta 1250 caracteres, TWITTER 280, THREADS 500, BLUESKY 300, MASTODON 500, YOUTUBE 10000 (no en videos privados ni creados para niños), FACEBOOK 8000 e INSTAGRAM 2200 (no en historias). Otras plataformas devuelven un 400. Una página de Facebook o una cuenta de Instagram conectada antes de que llegaran los primeros comentarios necesita reconectarse una vez; hasta entonces su comentario falla con firstCommentError
threadRepliesPlatformThreadReplies[]Convierte la publicación en un hilo, como { platform, texts }: la publicación lo abre y cada texto sale como respuesta al anterior, desde la misma cuenta. Una entrada por plataforma, hasta 25 textos. TWITTER admite 280 caracteres por respuesta (más con X Premium), THREADS 500, BLUESKY 300 y MASTODON 500 (o el límite de la instancia). Otras plataformas, una respuesta vacía o demasiado larga y una plataforma que también tiene primer comentario devuelven un 400
scheduledAtstringFecha en formato ISO 8601 para programación. Omita para publicar inmediatamente.
timezoneOBLIGATORIOstringZona horaria IANA (ej. America/New_York)
saveAsDraftbooleanGuardar como borrador en lugar de publicar
recurrenceRecurrenceRepite la publicación según un calendario. Necesita un scheduledAt futuro. Consulta Publicaciones recurrentes más abajo
twitterConnectionIdsstring[]ID de conexión de cuentas de Twitter
twitterKeepLinksbooleanMantiene clicables los enlaces del texto de X. Por defecto se rompe cada enlace del texto de X (example.com pasa a example. com), porque X cobra más de 10 veces más por un post con enlace. Solo las cuentas con lifetime deal de AppSumo pueden activarlo: un enlace mantenido cuesta 20 créditos en vez de 2, también en un primer comentario de X, y sin créditos suficientes el post de X falla. true devuelve un 400 en cualquier otro plan. Se ignora cuando el texto de X no tiene enlaces
linkedinConnectionIdsstring[]ID de conexión de cuentas de LinkedIn
instagramConnectionIdsstring[]ID de conexión de cuentas de Instagram
tiktokConnectionIdsstring[]ID de conexión de cuentas de TikTok
youtubeConnectionIdsstring[]ID de conexión de canales de YouTube
pinterestConnectionIdsstring[]IDs de conexión de la cuenta de Pinterest
blueskyConnectionIdsstring[]IDs de conexión de la cuenta de Bluesky
mastodonConnectionIdsstring[]IDs de conexión de la cuenta de Mastodon
googleBusinessConnectionIdsstring[]IDs de conexión de las ubicaciones del Perfil de Empresa de Google
googleBusinessConfigsGoogleBusinessConfig[]Ajustes de publicación del Perfil de Empresa de Google por ubicación: tipo de publicación (novedad, evento u oferta), botón, fechas del evento y detalles de la oferta. Consulte Configuraciones de plataforma para el esquema
tumblrConnectionIdsstring[]IDs de conexión de blogs de Tumblr
telegramConnectionIdsstring[]IDs de conexión de canales y grupos de Telegram
tumblrConfigsTumblrConfig[]Ajustes de Tumblr por blog: etiquetas, título y enlace de origen. Consulta Configuraciones de plataforma para el esquema
threadsConnectionIdsstring[]IDs de conexión de la cuenta de Threads
pageIdsstring[]Páginas de Facebook en las que publicar. Se acepta el id de la cuenta o el pageId de /social-accounts
pinterestConfigsPinterestConfig[]Configuración de esta plataforma, un objeto por cuenta, cada uno con el connectionId al que se aplica (pageId en Facebook). Consulte Configuraciones de plataforma
tiktokConfigsTikTokConfig[]Configuración de esta plataforma, un objeto por cuenta, cada uno con el connectionId al que se aplica (pageId en Facebook). Consulte Configuraciones de plataforma
instagramConfigsInstagramConfig[]Configuración de esta plataforma, un objeto por cuenta, cada uno con el connectionId al que se aplica (pageId en Facebook). Consulte Configuraciones de plataforma
facebookConfigsFacebookConfig[]Configuración de esta plataforma, un objeto por cuenta, cada uno con el connectionId al que se aplica (pageId en Facebook). Consulte Configuraciones de plataforma
youtubeConfigsYouTubeConfig[]Configuración de esta plataforma, un objeto por cuenta, cada uno con el connectionId al que se aplica (pageId en Facebook). Consulte Configuraciones de plataforma
linkedinConfigsLinkedInConfig[]Configuración de esta plataforma, un objeto por cuenta, cada uno con el connectionId al que se aplica (pageId en Facebook). Consulte Configuraciones de plataforma

Texto específico por plataforma

Utilice platformTexts para personalizar el contenido por plataforma mientras comparte la misma publicación.

Cuando una plataforma no tiene una entrada en platformTexts, se utiliza el campo text predeterminado.

Una cuenta por plataforma

Solo se permite una cuenta por plataforma por publicación. Por ejemplo, no puede incluir dos IDs de conexión de Twitter en la misma solicitud. Esta restricción se aplica para cumplir con los Términos de Servicio de las plataformas. Violar esta regla devolverá un error 400.

Publicaciones recurrentes

Añade un objeto recurrence para repetir la publicación. La publicación en scheduledAt es la primera de la serie y fija la hora del día, en la timezone que envíes. Solo existe la siguiente publicación de la serie. AdaptlyPost la crea unas 24 horas antes de que salga.

Objeto recurrence

ParámetroTipoDescripción
frequencyOBLIGATORIORecurrenceFrequencyDAILY, WEEKLY, MONTHLY o YEARLY. YEARLY publica cada año en la misma fecha; una serie que empieza el 29 de febrero publica el 28 de febrero en los demás años
intervalnumberRepetir cada N días, semanas, meses o años (1-30, predeterminado: 1)
weekdaysWeekday[]Solo WEEKLY. Los días en que se publica, de MONDAY a SUNDAY. El día de la semana de scheduledAt siempre se incluye
endsOnstringÚltimo día en que puede salir una publicación, en formato YYYY-MM-DD. Debe ser el día de la primera publicación o posterior. No se puede combinar con maxOccurrences
maxOccurrencesnumberNúmero total de publicaciones de la serie (2-365). No se puede combinar con endsOn. Sin ninguno de los dos, se repite hasta que pauses o elimines la serie
La respuesta añade recurringPostId, y postId es la primera publicación de la serie. Usa recurringPostId con los endpoints de publicaciones recurrentes para pausar, reanudar o eliminar la serie.

Reglas de las publicaciones recurrentes

Una publicación recurrente no puede usar saveAsDraft: true ni incluir una cuenta de TikTok. Cualquiera de los dos devuelve 400. Las fechas que pasan mientras la serie está en pausa se omiten y nunca se publican tarde. X y LinkedIn rechazan un texto igual al de una publicación anterior, así que añade spintax como {Hi|Hello} para que cada publicación sea distinta.

Cuando se rechaza una publicación

Una publicación rechazada por su contenido responde 400 con code post_validation_failed e issues, que enumera todos los problemas encontrados a la vez, con la misma forma que los issues de Comprobar publicación. message es el texto del problema cuando hay uno, y una lista de textos cuando hay varios.

{
  "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 estos problemas sin crear nada, envía antes el mismo cuerpo a Comprobar publicación (POST /api/v1/social-posts/validate).
Crear una publicación 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"]
  }'
Crear una publicación recurrente
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
}