antworkDOCS

Crear publicaciones

Una petición crea una publicación por cada cuenta de destino. Cada una es independiente, con su propia programación y su propio resultado; solo comparten un id de campaña.

POSThttps://antwork.io/api/v1/postsPermisowrite · publish

Petición

curl https://antwork.io/api/v1/posts \
  -H "Authorization: Bearer $ANTWORK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "accounts": ["acc_linkedin", "acc_x"],
    "text": "Shipped the API today.",
    "scheduledFor": "2026-10-01T09:00:00Z"
  }'

Respuesta

La respuesta es 202 Accepted, nunca 200. Nada se publica dentro de la petición: la publicación se encola y un worker la envía, así que la respuesta dice qué se ha aceptado, no qué se ha publicado.

202 Accepted
{
  "object": "post_batch",
  "campaignId": "b3f1...",
  "posts": [
    {
      "object": "post_result",
      "id": "pQ7x...",
      "accountId": "acc_linkedin",
      "platform": "linkedin",
      "status": "accepted",
      "reason": null,
      "message": null
    },
    {
      "object": "post_result",
      "id": null,
      "accountId": "acc_x",
      "platform": "x",
      "status": "rejected",
      "reason": "text_too_long",
      "message": "@antwork: Text exceeds x character limit"
    }
  ]
}
Un destino falla solo. Una cuenta que se pasa del límite de caracteres no cancela las demás, así que un 202 puede contener rechazos. Lee todas las entradas de posts, no solo el código de estado. Solo cuando no se acepta ninguna la respuesta es un 400, y el array viaja igualmente con ella.

Qué significa cada estado

  • accepted — creada y programada (o guardada, si es un borrador). Consulta el id para ver qué pasa.
  • rejected — rechazada antes de escribir nada. No existe; corrige reason y vuelve a enviar.
  • failed — se creó pero no se pudo programar. Existe y no va a salir.

Programación

Omite scheduledFor para publicar de inmediato. Indica una hora ISO 8601 para programar, como máximo a 30 días. La cola que hay detrás no acepta tareas más lejanas, y el error indica la última hora que admite. Una hora en el pasado se rechaza con scheduled_for_in_past.

Cuerpo de la petición

accountsstring[]obligatorio
Obligatorio. Ids de cuenta de GET /api/v1/accounts, como máximo 25. Se crea una publicación por cuenta.
textstring
El texto de la publicación, usado en cada cuenta que no tenga entrada en texts.
textsobject
Texto por cuenta, indexado por id de cuenta. Sustituye a text para esa cuenta. Úsalo cuando una plataforma necesite una versión más corta.
mediastring[]
URLs de medios de Antwork, no cualquiera. Un archivo tiene que estar en tu biblioteca antes de adjuntarlo; una URL externa se rechaza con media_not_hosted en lugar de aceptarse y fallar al publicar. Todavía no se pueden subir archivos por la API.
scheduledForISO 8601
Hora ISO 8601 de publicación, como máximo a 30 días. Omítela para publicar de inmediato.
draftboolean
true crea un borrador y no envía nada, y solo necesita el permiso write. Cualquier otro valor crea una publicación que se enviará, lo que necesita publish.
optionsobject
Ajustes específicos de cada plataforma, indexados por plataforma. Consulta Opciones por plataforma.
workspaceIdstring
El espacio de trabajo desde el que publicar. Solo es obligatorio si tienes más de un espacio de trabajo: sin él la petición se rechaza con workspace_required. Todas las cuentas deben pertenecer a él.
campaignIdstring
Agrupa las publicaciones bajo un id. Se asigna solo cuando se acepta más de una cuenta; pasa un id existente para añadir estas publicaciones a ese grupo.
La API publica en cuentas de LinkedIn y X (Twitter). Una cuenta de cualquier otra plataforma se rechaza por separado con platform_not_available, y el resto de la petición sigue adelante. GET /api/v1/accounts lista todas las cuentas conectadas, así que comprueba platform antes de enviar.

Opciones por plataforma

Todo lo específico de una plataforma va en options, indexado por plataforma y aplicado a todas las cuentas de esa plataforma en la petición. Solo las plataformas de esta tabla aceptan opciones por la API.

PlataformaAcepta
linkedinno acepta opciones
xcommunityId, shareWithFollowers
options
{
  "accounts": ["acc_x"],
  "text": "Shipped the API today.",
  "options": {
    "x": { "communityId": "1493446837214", "shareWithFollowers": true }
  }
}
Las claves desconocidas se rechazan, no se ignoran. Una errata es un 400 que nombra el campo, no una publicación que sale sin el ajuste que pediste.

Idempotencia

Envía una cabecera Idempotency-Key en cada creación, para que un reintento no publique dos veces. Cómo se comporta la clave está en la página de Idempotencia. Idempotencia →