Blogs
Un sitio de WordPress, una tienda de Shopify o una web de Wix o Webflow se conecta a un perfil como cualquier otra cuenta (acc_…). La diferencia es lo que recibe: artículos de su blog, no publicaciones. Todo el contenido vive en el sitio; Marsial no guarda copia.
Conectar el sitio
Sección titulada «Conectar el sitio»Wix, Webflow y WordPress.com usan el mismo flujo que las redes (Conectar cuentas): GET /v1/connect/{platform} y mandar al usuario a la URL.
Shopify no tiene selector de tiendas: añade shop con el dominio .myshopify.com de la tienda (o solo su prefijo).
curl "https://api.marsial.dev/v1/connect/shopify?profileId=prf_8f2k4d&redirectUrl=https%3A%2F%2Fapp.acme.com%2Fconectado&shop=acme" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/connect/shopify?profileId=prf_8f2k4d&redirectUrl=https%3A%2F%2Fapp.acme.com%2Fconectado&shop=acme', { headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.marsial.dev/v1/connect/shopify?profileId=prf_8f2k4d&redirectUrl=https%3A%2F%2Fapp.acme.com%2Fconectado&shop=acme", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]WordPress autoalojado no tiene OAuth. El usuario crea una contraseña de aplicación en WordPress (Usuarios → Perfil → Contraseñas de aplicación) y tu servidor la envía con su nombre de usuario. Marsial comprueba que el sitio responde y que ese usuario puede publicar y subir imágenes.
curl -X POST "https://api.marsial.dev/v1/connect/wordpress" \ -H "Authorization: Bearer $MARSIAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "profileId": "prf_8f2k4d", "siteUrl": "https://blog.acme.com", "username": "editor", "applicationPassword": "abcd efgh ijkl mnop qrst uvwx" }'const res = await fetch('https://api.marsial.dev/v1/connect/wordpress', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ "profileId": "prf_8f2k4d", "siteUrl": "https://blog.acme.com", "username": "editor", "applicationPassword": "abcd efgh ijkl mnop qrst uvwx" }),});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/connect/wordpress", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"}, json={ "profileId": "prf_8f2k4d", "siteUrl": "https://blog.acme.com", "username": "editor", "applicationPassword": "abcd efgh ijkl mnop qrst uvwx" },)data = res.json()["data"]Elegir el blog
Sección titulada «Elegir el blog»Cada sitio tiene uno o más blogs. WordPress y Wix tienen uno (1); una tienda Shopify puede tener varios, y en Webflow cada colección del CMS con un campo de texto enriquecido es un blog.
curl "https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs', { headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Escribir un artículo
Sección titulada «Escribir un artículo»Sin isPublished, el artículo queda en borrador. Con isPublished: true se publica al momento, o en la fecha de publishDate si es futura.
curl -X POST "https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs/1/articles" \ -H "Authorization: Bearer $MARSIAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "Llega la colección de otoño", "bodyHtml": "<p>Las primeras piezas llegan el mes que viene.</p>", "excerpt": "Un adelanto de lo que llega.", "tags": [ "otoño", "novedades" ], "image": { "url": "https://cdn.acme.com/otono.jpg", "altText": "Abrigos de lana" }, "isPublished": true, "publishDate": "2026-11-03T09:00:00+01:00" }'const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs/1/articles', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ "title": "Llega la colección de otoño", "bodyHtml": "<p>Las primeras piezas llegan el mes que viene.</p>", "excerpt": "Un adelanto de lo que llega.", "tags": [ "otoño", "novedades" ], "image": { "url": "https://cdn.acme.com/otono.jpg", "altText": "Abrigos de lana" }, "isPublished": true, "publishDate": "2026-11-03T09:00:00+01:00" }),});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs/1/articles", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"}, json={ "title": "Llega la colección de otoño", "bodyHtml": "<p>Las primeras piezas llegan el mes que viene.</p>", "excerpt": "Un adelanto de lo que llega.", "tags": [ "otoño", "novedades" ], "image": { "url": "https://cdn.acme.com/otono.jpg", "altText": "Abrigos de lana" }, "isPublished": True, "publishDate": "2026-11-03T09:00:00+01:00" },)data = res.json()["data"]| Campo | Qué es |
|---|---|
title |
Obligatorio al crear. |
bodyHtml |
El artículo en HTML. |
handle |
El slug de la URL. Si no lo envías, sale del título. En Shopify no cambia después. |
excerpt |
Resumen para los listados. |
tags |
Sustituye la lista entera. Las que no existan se crean. |
author |
WordPress: id del usuario. Shopify: nombre visible. Webflow: id del elemento autor. |
image |
Imagen destacada desde una URL pública; súbela antes con POST /v1/media/upload-url. |
seo |
Título y descripción para buscadores. Solo Shopify y Wix. |
fields |
Solo Webflow: los campos propios de la colección, por su slug. |
Cambiar, despublicar y borrar
Sección titulada «Cambiar, despublicar y borrar»PATCH cambia solo lo que envíes. isPublished: false devuelve a borrador un artículo publicado o programado.
curl -X PATCH "https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs/1/articles/1842" \ -H "Authorization: Bearer $MARSIAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "isPublished": false }'const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs/1/articles/1842', { method: 'PATCH', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ "isPublished": false }),});const { data } = await res.json();import os, requests
res = requests.patch( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/blogs/1/articles/1842", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"}, json={ "isPublished": False },)data = res.json()["data"]GET /v1/accounts/{id}/blogs/{blogId}/articles lista publicados, programados y borradores (en WordPress, también pendientes y privados), con status y la url en la web. DELETE lo borra también del sitio.
En el panel, la pestaña Blog de Publicaciones hace lo mismo: elegir sitio y blog, escribir, programar y publicar.
© 2026 Marsial by TWOFACES ·marsial.dev ·Panel ·soporte@twofacesco.com