Límites de Plataforma
Obtén los límites y restricciones de publicación específicos de cada plataforma, incluyendo límites por formato de post (feed, story, reel, YouTube short, etc.).
Obtén los límites y restricciones de publicación específicos de cada plataforma, incluyendo límites por formato de post (feed, story, reel, YouTube short, etc.).
/api/v1/social/limits/{platform}Obtén las restricciones de publicación de una plataforma específica.
Reemplaza {platform} con el nombre de la plataforma (no distingue mayúsculas/minúsculas).
curl -H "x-api-key: <apiKey>" \
https://dopost.co/api/v1/social/limits/youtubecurl -H "x-api-key: <apiKey>" \
https://dopost.co/api/v1/social/limits/youtubeLa respuesta siempre tiene la misma estructura: un string platform y un objeto limits. El objeto limits contiene:
| Clave | Descripción |
|---|---|
text | Restricciones de texto/caption (maxLength, required) |
title | Restricciones del título — solo presente en plataformas que requieren título separado (YouTube) |
image | Restricciones de imagen (formats, fileSize, dimensions) |
video | Restricciones de vídeo generales compartidas entre todos los tipos de post de la plataforma |
postTypes | Límites por formato. Cada clave es el nombre de un formato de post — ver más abajo |
postTypespostTypes contiene una entrada por cada formato de post soportado. Los nombres de las claves son específicos de la plataforma y se corresponden directamente con el campo postType / videoType que se pasa en el endpoint de publicación:
| Plataforma | Claves de postTypes | Campo en publicación |
|---|---|---|
| Instagram, Instagram Direct | feed, story, reel, carousel | platformOptions.postType |
| YouTube | video, short | platformOptions.videoType |
feed, reel, story | platformOptions.postType | |
| TikTok | post | (tipo único) |
| X, Bluesky, Mastodon, Threads | tweet / post | (tipo único) |
| LinkedIn, LinkedIn Organization | feed | (tipo único) |
pin | (tipo único) | |
| Telegram | post | (tipo único) |
| Google Business Profile | standard, event, offer, media | platformOptions.postType |
Cada entrada de postTypes incluye su propio video.duration, maxMediaCount, supportedTypes, aspectRatio y restrictions. Usa siempre los límites del tipo específico cuando difieran de los generales. Los vídeos únicos de Instagram usan el mismo contrato Reel tanto si se seleccionan como Reel como si se comparten en el Feed.
YouTube es el ejemplo más claro de cómo funciona postTypes — video y short tienen límites de duración distintos:
{
"platform": "YOUTUBE",
"limits": {
"text": {
"maxLength": 5000,
"required": false,
"field": "description"
},
"title": {
"maxLength": 100,
"required": true
},
"image": {
"formats": ["image/jpeg", "image/png"],
"fileSize": { "max": 2097152 }
},
"video": {
"duration": { "min": 1, "max": 43200 },
"fileSize": { "max": 274877906944, "recommended": 10737418240 },
"frameRate": { "min": 24, "recommended": 30, "max": 60 },
"bitrate": { "min": 1, "recommended": 8 },
"resolution": {
"min": { "width": 256, "height": 144 },
"recommended": { "width": 1920, "height": 1080 }
},
"codecs": { "video": ["h264", "vp9", "hevc"], "audio": ["aac", "opus"] }
},
"postTypes": {
"video": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": { "min": 1.33, "max": 1.78 },
"restrictions": [
"video-only",
"max-file-size-256gb",
"duration-max-12h"
],
"supportedTypes": { "videos": ["video/mp4", "video/mov", "video/avi"] },
"thumbnail": {
"maxCount": 1,
"required": false,
"supportedTypes": { "images": ["image/jpeg", "image/png"] }
},
"video": { "duration": { "min": 1, "max": 43200 } }
},
"short": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": { "min": 0.5625, "max": 0.5625 },
"restrictions": ["video-only", "duration-max-60s", "vertical-required"],
"supportedTypes": { "videos": ["video/mp4"] },
"video": { "duration": { "min": 1, "max": 60 } }
}
}
}
}{
"platform": "YOUTUBE",
"limits": {
"text": {
"maxLength": 5000,
"required": false,
"field": "description"
},
"title": {
"maxLength": 100,
"required": true
},
"image": {
"formats": ["image/jpeg", "image/png"],
"fileSize": { "max": 2097152 }
},
"video": {
"duration": { "min": 1, "max": 43200 },
"fileSize": { "max": 274877906944, "recommended": 10737418240 },
"frameRate": { "min": 24, "recommended": 30, "max": 60 },
"bitrate": { "min": 1, "recommended": 8 },
"resolution": {
"min": { "width": 256, "height": 144 },
"recommended": { "width": 1920, "height": 1080 }
},
"codecs": { "video": ["h264", "vp9", "hevc"], "audio": ["aac", "opus"] }
},
"postTypes": {
"video": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": { "min": 1.33, "max": 1.78 },
"restrictions": [
"video-only",
"max-file-size-256gb",
"duration-max-12h"
],
"supportedTypes": { "videos": ["video/mp4", "video/mov", "video/avi"] },
"thumbnail": {
"maxCount": 1,
"required": false,
"supportedTypes": { "images": ["image/jpeg", "image/png"] }
},
"video": { "duration": { "min": 1, "max": 43200 } }
},
"short": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": { "min": 0.5625, "max": 0.5625 },
"restrictions": ["video-only", "duration-max-60s", "vertical-required"],
"supportedTypes": { "videos": ["video/mp4"] },
"video": { "duration": { "min": 1, "max": 60 } }
}
}
}
}Para publicar un YouTube Short, pasa "videoType": "short" en platformOptions y asegúrate de que la duración del vídeo sea ≤ 60 segundos.
Los postTypes de Instagram muestran cómo los límites varían entre feed, story, reel y carousel:
{
"platform": "INSTAGRAM",
"limits": {
"text": { "maxLength": 2200, "required": false },
"image": {
"formats": ["image/jpeg"],
"fileSize": { "max": 8388608 },
"dimensions": {
"min": { "width": 320, "height": 168 },
"max": { "width": 1440, "height": 1800 },
"heightDependsOnAspectRatio": true,
"autoScalesWidth": true
}
},
"video": {
"duration": { "min": 3, "max": 900 },
"fileSize": { "max": 1000000000, "unit": "bytes" },
"frameRate": { "min": 23, "recommended": 30, "max": 60 },
"bitrate": { "max": 25, "unit": "mbps" },
"resolution": {
"maxHorizontalPixels": 1920,
"recommended": { "width": 1080, "height": 1920 }
},
"codecs": {
"video": ["h264", "hevc"],
"audio": ["aac"],
"audioSampleRateHz": 48000
}
},
"postTypes": {
"feed": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": { "min": 0.8, "max": 1.91 },
"supportedTypes": {
"images": ["image/jpeg"],
"videos": ["video/mp4", "video/quicktime"]
},
"video": { "duration": { "min": 3, "max": 900 } }
},
"story": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": 0.5625,
"supportedTypes": { "images": ["image/jpeg"], "videos": ["video/mp4"] },
"video": { "duration": { "min": 3, "max": 60 } }
},
"reel": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": 0.5625,
"supportedTypes": { "videos": ["video/mp4", "video/quicktime"] },
"video": {
"duration": { "min": 3, "max": 900 },
"fileSize": { "max": 1000000000, "unit": "bytes" }
}
},
"carousel": {
"maxMediaCount": 10,
"requiresMedia": true,
"aspectRatio": { "min": 0.8, "max": 1.91 },
"supportedTypes": { "images": ["image/jpeg"], "videos": ["video/mp4"] },
"video": { "duration": { "min": 3, "max": 180 } }
}
}
}
}{
"platform": "INSTAGRAM",
"limits": {
"text": { "maxLength": 2200, "required": false },
"image": {
"formats": ["image/jpeg"],
"fileSize": { "max": 8388608 },
"dimensions": {
"min": { "width": 320, "height": 168 },
"max": { "width": 1440, "height": 1800 },
"heightDependsOnAspectRatio": true,
"autoScalesWidth": true
}
},
"video": {
"duration": { "min": 3, "max": 900 },
"fileSize": { "max": 1000000000, "unit": "bytes" },
"frameRate": { "min": 23, "recommended": 30, "max": 60 },
"bitrate": { "max": 25, "unit": "mbps" },
"resolution": {
"maxHorizontalPixels": 1920,
"recommended": { "width": 1080, "height": 1920 }
},
"codecs": {
"video": ["h264", "hevc"],
"audio": ["aac"],
"audioSampleRateHz": 48000
}
},
"postTypes": {
"feed": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": { "min": 0.8, "max": 1.91 },
"supportedTypes": {
"images": ["image/jpeg"],
"videos": ["video/mp4", "video/quicktime"]
},
"video": { "duration": { "min": 3, "max": 900 } }
},
"story": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": 0.5625,
"supportedTypes": { "images": ["image/jpeg"], "videos": ["video/mp4"] },
"video": { "duration": { "min": 3, "max": 60 } }
},
"reel": {
"maxMediaCount": 1,
"requiresMedia": true,
"aspectRatio": 0.5625,
"supportedTypes": { "videos": ["video/mp4", "video/quicktime"] },
"video": {
"duration": { "min": 3, "max": 900 },
"fileSize": { "max": 1000000000, "unit": "bytes" }
}
},
"carousel": {
"maxMediaCount": 10,
"requiresMedia": true,
"aspectRatio": { "min": 0.8, "max": 1.91 },
"supportedTypes": { "images": ["image/jpeg"], "videos": ["video/mp4"] },
"video": { "duration": { "min": 3, "max": 180 } }
}
}
}
}Para publicar imágenes mediante la API de Instagram, JPEG es el único formato admitido y el tamaño máximo es 8 MB. Las imágenes de feed y carrusel deben tener una relación de aspecto entre 4:5 (0,8) y 1,91:1. Meta amplía automáticamente anchuras inferiores a 320 px y reduce las superiores a 1440 px, por lo que 1080x1350 no es un límite estricto de subida y la altura depende de la anchura y la relación de aspecto. En un carrusel, Meta recorta todos los elementos según la relación de aspecto de la primera imagen. Consulta las especificaciones de imagen de IG User Media y la documentación de publicación de carruseles de Meta.
El tipo carousel de Instagram lo establece dopost automáticamente cuando pasas múltiples elementos de media — no necesitas especificar postType: "carousel" explícitamente. Usa "feed", "story" o "reel" para posts con un único elemento multimedia.
Un vídeo de Feed se publica como REELS con share_to_feed=true. Un Reel explícito puede usar shareToFeed para decidir si también aparece en el Feed. Los límites Reel de 3–900 segundos y 1 GB no se aplican a los vídeos child de carrusel; los valores de carrusel que devuelve este endpoint son límites internos de compatibilidad de DuPost porque Meta no publica una tabla técnica completa y accesible para esos children.
Pasa cualquiera de estos como el parámetro {platform} (no distingue mayúsculas/minúsculas):
| Valor del parámetro | Plataforma |
|---|---|
x | X (Twitter) |
instagram | Instagram (conectado vía Meta Business) |
instagram_direct | Instagram (conectado directamente vía OAuth de Instagram) |
facebook | |
linkedin | LinkedIn (perfil personal) |
linkedin_organization | LinkedIn (página de empresa) |
tiktok | TikTok |
youtube | YouTube |
threads | Threads |
bluesky | Bluesky |
mastodon | Mastodon |
pinterest | |
telegram | Canal o grupo de Telegram |
google-business | Ubicación de Google Business Profile |
Instagram tiene dos tipos de conexión: instagram se conecta a través de Meta Business (Página de Facebook vinculada), mientras que instagram_direct se conecta directamente vía OAuth de Instagram. LinkedIn también tiene dos: linkedin para perfiles personales y linkedin_organization para páginas de empresa. Usa el valor que coincida con cómo está conectada tu cuenta — compruébalo con el endpoint Listar Cuentas.
Usa este endpoint antes de publicar para validar que tu contenido cumple los requisitos de la plataforma.
| Estado | Error | Causa |
|---|---|---|
400 | Unknown platform: xyz | Nombre de plataforma no reconocido. La respuesta incluye el array validPlatforms |
401 | Invalid or missing API key | Cabecera x-api-key incorrecta o ausente |
403 | API key does not have permission for this action | La API key no tiene el scope necesario para este endpoint |
404 | No configuration found for xyz | La plataforma existe pero no tiene configuración de límites |
429 | Rate limit exceeded | Demasiadas peticiones. Revisa las cabeceras X-RateLimit-* y reintenta tras el tiempo indicado |
GET /api/v1/social/limits/google-business devuelve reglas por tipo y categoría. image.minShortEdge y image.fileSize.min tienen excepciones en minimumExceptions para PROFILE/COVER/LOGO. video.minShortEdge es el lado corto, también en vídeo vertical. postTypes describe los campos requeridos, las categorías solo foto, los CTA y el texto permitido. cta enumera las acciones y protocolos de URL admitidos.
integrationLimits identifica nuestro subconjunto admitido: un adjunto, MP4 en galería, foto en Local Posts y los topes de compatibilidad de 1.500 caracteres de texto, 58 de título, 100 de cupón y 5.000 de condiciones. No todos estos topes numéricos están publicados en la referencia REST de Google. Las recomendaciones de conversión de fps, bitrate y codecs no se presentan como límites obligatorios.