BestPost para desarrolladores
Con la API, tus programas y asistentes de IA trabajan en tu cuenta de BestPost: suben archivos multimedia, preparan publicaciones, piden que se creen textos y subtítulos, y programan. Lo que crean aparece al instante en tu Planificador y en tu Calendario.
La API está disponible en los planes Pro y Business.
1. Crear una clave
En BestPost, en Configuración, Cuenta, “API y MCP”. Una clave puede solo preparar publicaciones, o prepararlas y programarlas. Empieza por bp_ y solo se muestra una vez. Cada cuenta puede tener hasta 5 claves. Con una clave no se puede iniciar sesión, ni conectar un canal, ni cambiar la facturación.
curl https://bestpost.app/api/open/v1/me \
-H "Authorization: Bearer $BESTPOST_API_KEY"La respuesta muestra qué puede hacer la clave, cuánto has usado de tu plan y qué normas se aplican a tu cuenta.
2. Con Claude y otros asistentes (MCP)
Un asistente compatible con MCP puede usar BestPost como herramienta. Entonces le dices, por ejemplo: “Sube la carpeta Otoño como carrusel para Instagram y prográmalo para mañana a las 18:00”.
Sin instalar nada
La dirección del servidor MCP es https://bestpost.app/api/mcp. Añádela en tu asistente como servidor MCP (en la app de Claude se llama conector). Al conectarlo, inicias sesión en BestPost y confirmas lo que puede hacer el asistente. Para esto no necesitas ninguna clave.
Los asistentes conectados los ves y los desconectas en BestPost, en Configuración, Cuenta, “API y MCP”.
Si prefieres usar una clave, envíala como encabezado. En Claude Code, por ejemplo:
claude mcp add --transport http bestpost https://bestpost.app/api/mcp \
--header "Authorization: Bearer $BESTPOST_API_KEY"Esta vía no ve los archivos de tu dispositivo. Trabaja con archivos multimedia que ya están en BestPost o con direcciones públicas.
En tu propia computadora, con acceso a carpetas
Descarga el servidor como un único archivo. Necesita Node 20 o posterior.
curl -o bestpost-mcp.mjs https://bestpost.app/api/open/v1/mcp/bestpost-mcp.mjsDespués, añádelo a tu programa, por ejemplo a Claude Desktop o a Claude Code:
{
"mcpServers": {
"bestpost": {
"command": "node",
"args": ["/ruta/a/bestpost-mcp.mjs"],
"env": { "BESTPOST_API_KEY": "bp_live_..." }
}
}
}El servidor solo lee imágenes y videos, nada más de tu computadora.
3. Con tus propios programas (API)
Todas las direcciones empiezan por https://bestpost.app/api/open/v1. La clave va en el encabezado Authorization: Bearer …. Las horas, siempre con zona horaria.
Publicación a partir de un archivo
Un video, una imagen o de 2 a 35 imágenes como carrusel. La publicación se crea como borrador. Con Idempotency-Key, una solicitud repetida no crea nada dos veces. Los textos siguen la configuración fija de la marca: BestPost sustituye los guiones largos y medios, y los hashtags y emojis se eliminan si la marca está configurada en “ninguno”.
curl -X POST https://bestpost.app/api/open/v1/posts \
-H "Authorization: Bearer $BESTPOST_API_KEY" \
-H "Idempotency-Key: reel-2026-10-12" \
-F "media=@video.mp4" \
-F 'data={
"platforms": {
"instagram": { "text": "Nuevo en la tienda #nuevo", "firstComment": "Enlace en la bio" },
"facebook": { "text": "Nuevo en la tienda" }
},
"scheduledAt": "2026-10-12T18:00:00+02:00"
}'Publicación a partir de direcciones, programada al momento
En lugar de archivos, puedes usar direcciones https públicas. BestPost descarga los archivos multimedia por sí mismo. Con schedule, la publicación se programa en la misma llamada si todas sus plataformas lo permiten.
curl -X POST https://bestpost.app/api/open/v1/posts \
-H "Authorization: Bearer $BESTPOST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"mediaUrls": ["https://example.com/imagen-1.jpg", "https://example.com/imagen-2.jpg"],
"platforms": { "instagram": { "text": "Dos imágenes, un carrusel" } },
"scheduledAt": "2026-10-12T18:00:00+02:00",
"schedule": true
}'Textos de BestPost
BestPost escucha y mira el archivo y escribe un texto para cada plataforma, además del título para YouTube y un primer comentario. Igual que en la app, cuenta como un texto de tu plan. Los textos son propuestas: léelos antes de programar.
# 1. solicitar
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/texts -H "Authorization: Bearer $BESTPOST_API_KEY"
# 2. consultar hasta que "status" ya no sea "running"
curl https://bestpost.app/api/open/v1/posts/POST_ID/texts -H "Authorization: Bearer $BESTPOST_API_KEY"
# 3. escribir en el borrador (solo campos vacíos)
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/texts/apply -H "Authorization: Bearer $BESTPOST_API_KEY"Subtítulos
Primero créalos y revísalos; después, incrústalos. La incrustación no se puede deshacer y solo es posible una vez por video. Sin style, se aplica el estilo que guardaste en BestPost como predeterminado.
# 1. crear: la respuesta incluye los subtítulos en SRT
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/subtitles -H "Authorization: Bearer $BESTPOST_API_KEY"
# 2. incrustar en el video, aquí con la palabra resaltada
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/subtitles/burn \
-H "Authorization: Bearer $BESTPOST_API_KEY" -H "Content-Type: application/json" \
-d '{ "style": { "preset": "karaoke" } }'
# 3. consultar hasta que "status" sea "burned"
curl https://bestpost.app/api/open/v1/posts/POST_ID/subtitles -H "Authorization: Bearer $BESTPOST_API_KEY"Programar
curl -X POST https://bestpost.app/api/open/v1/posts/POST_ID/schedule \
-H "Authorization: Bearer $BESTPOST_API_KEY" -H "Content-Type: application/json" \
-d '{ "scheduledAt": "2026-10-12T18:00:00+02:00" }'Todas las direcciones
| GET | /me | Cuenta, permisos de la clave, uso del plan, normas |
| GET | /channels | Marcas y canales conectados |
| GET | /channels/{id} | Lo que la plataforma permite ahora para este canal |
| GET | /posts | Listar publicaciones |
| POST | /posts | Crear una publicación a partir de archivos o direcciones |
| GET | /posts/{id} | Leer una publicación |
| PATCH | /posts/{id} | Cambiar textos, hora, nombre y plataformas |
| DELETE | /posts/{id} | Eliminar una publicación |
| POST | /posts/{id}/schedule | Programar un borrador |
| POST | /posts/{id}/unschedule | Retirar una publicación programada |
| POST | /posts/{id}/texts | Pedir textos a BestPost |
| GET | /posts/{id}/texts | Estado y propuestas |
| POST | /posts/{id}/texts/apply | Escribir las propuestas en el borrador |
| POST | /posts/{id}/subtitles | Crear subtítulos |
| GET | /posts/{id}/subtitles | Estado, texto, progreso |
| PUT | /posts/{id}/subtitles | Guardar los subtítulos corregidos |
| DELETE | /posts/{id}/subtitles | Descartar los subtítulos |
| POST | /posts/{id}/subtitles/burn | Incrustar los subtítulos en el video |
La descripción completa con todos los campos está disponible en formato OpenAPI: https://bestpost.app/api/open/v1/openapi.json
4. Normas
- Nunca de inmediato. La hora más próxima posible es dentro de 10 minutos. Así todavía se puede deshacer un error.
- TikTok y YouTube. Ambas exigen datos tuyos antes de cada publicación. Por eso, una publicación con una de estas plataformas sigue siendo un borrador (
confirmInApp) hasta que la confirmes con un clic en el Planificador. Lo que se aplica a tu cuenta figura enrules, en la respuesta de/me. - Pinterest. Pinterest pide que elijas tú cada pin. Por eso, una publicación con Pinterest siempre sigue siendo un borrador hasta que la confirmes en el Planificador, donde también eliges el tablero. Un pin puede tener título, descripción y enlace (
title,text,link). Pinterest no tiene primer comentario. - Tu plan también se aplica aquí. Los textos, los subtítulos, los borradores y el almacenamiento cuentan igual que en la app.
/medevuelve el estado enusage. - Límite por canal y día. Un programa solo puede programar un número limitado de publicaciones por canal al día. Las cifras figuran en
rules.maxPerChannelPerDay. - Los errores se explican. Cada rechazo incluye una frase y un código fijo:
{ "error": "X: “text” tiene 301 caracteres; se permiten 280.", "code": "TEXT_ZU_LANG" }Se aplican las Condiciones de la API. Respondemos a tus preguntas en info@bestpost.app.