Subir medios
Añade una imagen, un vídeo o un PDF a la biblioteca de medios desde un enlace público y ponlo en publicaciones en la misma llamada.
https://antwork.io/api/v1/mediaPermisomediaPetición
POST /api/v1/media con {"url": "https://..."} descarga el archivo y lo guarda en la biblioteca de medios del espacio de trabajo. El enlace debe ser una dirección http(s) pública en el puerto por defecto; cada redirección se vuelve a comprobar. El tipo se lee de los bytes del archivo, nunca de su nombre ni de las cabeceras del servidor: imágenes PNG, JPEG, GIF, WebP y AVIF de hasta 10 MB, y vídeo MP4, MOV y WebM y PDF de hasta 100 MB. Con más de un espacio de trabajo, envía workspaceId. Necesita el permiso media. Envía una Idempotency-Key: una petición repetida no guarda nada dos veces.
curl -X POST https://antwork.io/api/v1/media \
-H "Authorization: Bearer $ANTWORK_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"url": "https://cdn.example.com/launch.png",
"attachToPostIds": [
"pQ7x..."
]
}'attachToPostIds (como mucho 20 de tus publicaciones en ese espacio de trabajo) añade el archivo al final de los medios de cada publicación, como hace la herramienta MCP add_media. Una publicación ya publicada aparece en notAttached y no se toca; una que no es tuya responde 404 antes de descargar nada. PUT /api/v1/posts/{id}/media fija después la lista exacta de una publicación.
Respuesta
{
"object": "media",
"id": "m_8f2...",
"workspaceId": "ws_...",
"url": "https://firebasestorage.googleapis.com/v0/b/.../o/workspaces%2Fws_...%2Fmedia%2Fupload-...png?alt=media&token=...",
"name": "launch.png",
"type": "image",
"size": 482113,
"durationSec": null,
"uploadedAt": "2026-10-22T10:00:00.000Z",
"attached": ["pQ7x..."],
"notAttached": []
}201 con el elemento de la biblioteca. Su url es lo que acepta media en una publicación. El durationSec de un vídeo se rellena cuando su duración se puede leer del archivo, y es null si no; una duración desconocida nunca bloquea una publicación.
400 con el motivo en code, los mismos códigos que da la herramienta MCP add_media: remote_http_error (el servidor respondió algo distinto del archivo), not_a_file (una página web, como un enlace para compartir un chat), unsupported_type, too_large, empty_file, blocked_url (no es una dirección pública), fetch_timeout y fetch_failed. Cada clave puede descargar 20 enlaces cada 10 minutos; a partir de ahí la respuesta es 429 url_ingest_rate_limited con Retry-After.Subir un archivo que tienes
POST /api/v1/media con {"upload": {"filename": "demo.mp4", "mimeType": "video/mp4", "size": 48213044}} responde 201 con un uploadUrl de un solo uso. Envía los bytes del archivo en un único PUT antes de 10 minutos; una subida larga puede terminar después. Esa petición guarda el archivo, lo añade a la biblioteca y lo añade a attachToPostIds, y su respuesta JSON trae el mediaId y la url. Imágenes de hasta 10 MB, vídeo y PDF de hasta 1 GB. La dirección funciona una vez, y los bytes van directos al endpoint de subida que usa la herramienta MCP add_media. Un mimeType no admitido se rechaza con unsupported_type, y un size por encima del límite con too_large.
{
"object": "media_upload",
"uploadUrl": "https://api.antwork.io/uploads/kQ3...",
"method": "PUT",
"expiresAt": "2026-10-22T10:10:00.000Z",
"attachesTo": ["pQ7x..."],
"maxBytes": 1073741824
}curl -sS -X PUT --data-binary @demo.mp4 "$UPLOAD_URL"
# → {"success": true, "mediaId": "m_8f2...", "url": "https://firebasestorage...", "type": "video",
# "attached": ["pQ7x..."], "notAttached": [], ...}