Anuncios
Campañas en Meta, Google, LinkedIn, TikTok, Pinterest, X y Reddit con una conexión de anuncios (plataforma meta-ads, google-ads…): listarlas con gasto y resultados, pausar, reanudar, cambiar presupuestos, promocionar publicaciones, crear campañas y enviar conversiones. Los presupuestos van en unidades enteras de la moneda, nunca en céntimos.
Listar cuentas publicitarias
Sección titulada «Listar cuentas publicitarias»/v1/accounts/{id}/ads/ad-accountsLas cuentas publicitarias a las que llega una conexión de anuncios. Su id es el adAccountId del resto de llamadas.
Parámetros
idstringobligatorio
Respuesta 200
data []
idstringobligatorioEnvíalo como adAccountId (act_… en Meta, el id de cliente en Google…).
namestringobligatoriocurrencystringPresupuestos y pujas van en unidades enteras de ella.
timezonestringusablebooleanobligatorioFalse si la red no deja anunciarse con ella (desactivada, sin método de pago…).
curl "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/ad-accounts" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/ad-accounts', { 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/ads/ad-accounts", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Listar campañas con sus resultados
Sección titulada «Listar campañas con sus resultados»/v1/accounts/{id}/ads/campaignsLas campañas creadas en Marsial y en el administrador de anuncios de la red, con gasto, impresiones y clics del periodo.
Parámetros
idstringobligatorioadAccountIdstringSolo esta cuenta publicitaria (GET …/ads/ad-accounts).
fromstringPrimer día de las métricas (YYYY-MM-DD). Hace 90 días si no lo envías.
tostringÚltimo día de las métricas (YYYY-MM-DD). Hoy si no lo envías.
Respuesta 200
data []
idstringobligatorioEl id de la campaña en la red.
accountIdstringobligatorioLa conexión de anuncios.
networkstringobligatoriofacebook, instagram, google, linkedin, tiktok, pinterest, twitter o reddit.
namestringobligatoriostatusstringobligatorioreviewStatusstringadAccountIdstringobligatorioadAccountNamestringcurrencystringbudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
adCountintegerobligatoriometricsobjectobligatoriometrics
spendnumberobligatorioimpressionsnumberobligatorioclicksnumberobligatorioreachnumberconversionsnumberctrnumbercpcnumbercpmnumber
curl "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns?from=2026-10-01&to=2026-10-31" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns?from=2026-10-01&to=2026-10-31', { 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/ads/campaigns?from=2026-10-01&to=2026-10-31", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Crear una campaña
Sección titulada «Crear una campaña»/v1/accounts/{id}/ads/campaignsCampaña, grupo de anuncios y anuncio en una llamada, en los términos de cada red (adAccountId, goal, budgetAmount, budgetType, la creatividad, la segmentación…): ver la guía de anuncios. Marsial rellena la conexión.
Parámetros
idstringobligatorio
Cuerpo
Respuesta 201
data
campaignIdstring | nullobligatorio
curl -X POST "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Pausar, reanudar o cambiar el presupuesto
Sección titulada «Pausar, reanudar o cambiar el presupuesto»/v1/accounts/{id}/ads/campaigns/{campaignId}Pausar se aplica siempre al momento. Reanudar y cambiar el presupuesto responden 202 cuando el espacio exige aprobación a quien llama.
Parámetros
idstringobligatoriocampaignIdstringobligatorio
Cuerpo
statusstringbudgetobjectbudget
amountnumberobligatorioUnidades enteras de la moneda de la cuenta publicitaria: 50 son 50,00, nunca céntimos.
typestringobligatorio
Respuesta 200
data
idstringobligatorioEl id de la campaña en la red.
accountIdstringobligatorioLa conexión de anuncios.
networkstringobligatoriofacebook, instagram, google, linkedin, tiktok, pinterest, twitter o reddit.
namestringobligatoriostatusstringobligatorioreviewStatusstringadAccountIdstringobligatorioadAccountNamestringcurrencystringbudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
adCountintegerobligatoriometricsobjectobligatoriometrics
spendnumberobligatorioimpressionsnumberobligatorioclicksnumberobligatorioreachnumberconversionsnumberctrnumbercpcnumbercpmnumber
curl -X PATCH "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns/120210000000" \ -H "Authorization: Bearer $MARSIAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "paused" }'const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns/120210000000', { method: 'PATCH', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ "status": "paused" }),});const { data } = await res.json();import os, requests
res = requests.patch( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/campaigns/120210000000", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"}, json={ "status": "paused" },)data = res.json()["data"]Enviar conversiones
Sección titulada «Enviar conversiones»/v1/accounts/{id}/ads/conversionsEventos desde el servidor para la red: la API de conversiones de Meta, las conversiones offline de Google, LinkedIn y TikTok.
Parámetros
idstringobligatorio
Cuerpo
Respuesta 200
data
receivedintegerobligatorio
curl -X POST "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/conversions" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/conversions', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/accounts/acc_3k9x2m/ads/conversions", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Promocionar una publicación
Sección titulada «Promocionar una publicación»/v1/posts/{id}/boostConvierte una copia publicada de la publicación (su accountId) en un anuncio pagado por adAccountId. La red lo revisa antes de mostrarlo.
Parámetros
idstringobligatorio
Cuerpo
accountIdstringobligatorioLa cuenta de la publicación cuya copia publicada promocionar.
adAccountIdstringobligatorioLa cuenta publicitaria que paga (GET /v1/accounts/{id}/ads/ad-accounts en la conexión de anuncios).
namestringobligatoriogoalstringobligatorioLo que optimiza la red. Cada red acepta una parte.
budgetobjectobligatoriobudget
amountnumberobligatorioUnidades enteras de la moneda de la cuenta publicitaria: 50 son 50,00, nunca céntimos.
typestringobligatorio
startDatestring (date-time)endDatestring (date-time)Obligatorio con un presupuesto total.
targetingobjecttargeting
countriesstring[]Códigos de país ISO.
ageMinintegerageMaxinteger
callToActionstringPor ejemplo LEARN_MORE o SHOP_NOW; necesita linkUrl.
linkUrlstring (uri)
Respuesta 201
data
campaignIdstring | nullobligatorio
curl -X POST "https://api.marsial.dev/v1/posts/pst_7q1w0e/boost" \ -H "Authorization: Bearer $MARSIAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "accountId": "acc_3k9x2m", "adAccountId": "act_120210", "name": "Autumn", "goal": "traffic", "budget": { "amount": 40, "type": "daily" } }'const res = await fetch('https://api.marsial.dev/v1/posts/pst_7q1w0e/boost', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ "accountId": "acc_3k9x2m", "adAccountId": "act_120210", "name": "Autumn", "goal": "traffic", "budget": { "amount": 40, "type": "daily" } }),});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/posts/pst_7q1w0e/boost", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"}, json={ "accountId": "acc_3k9x2m", "adAccountId": "act_120210", "name": "Autumn", "goal": "traffic", "budget": { "amount": 40, "type": "daily" } },)data = res.json()["data"]Listar los cambios de anuncios por aprobar
Sección titulada «Listar los cambios de anuncios por aprobar»/v1/ads/requestsCon requireAdsApproval activado, los miembros y los agentes de IA (MCP) piden los cambios de anuncios que gastan dinero en vez de hacerlos. Del más reciente al más antiguo, con lo que pasó con cada uno.
Parámetros
statusstringSolo los cambios en este estado; si no, todos, del más reciente al más antiguo.
Respuesta 200
data []
idstringobligatorioadr_…
changeobject | object | objectobligatorioLo que llega a la red al aprobarlo.
change
kind"update_campaign"obligatorioaccountIdstringobligatoriocampaignIdstringobligatoriocampaignNamestringobligatoriocurrencystringcurrentobjectobligatorioLa campaña cuando se pidió el cambio.
current
statusstringobligatoriobudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
statusstringbudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
statusstringobligatoriofailed: aprobado, pero la red lo rechazó (vererror).requestedBystringEl usuario que lo pidió, o por quien lo pidió un agente de IA.
viastringobligatoriorequestedAtstring (date-time)obligatoriodecidedBystringdecidedAtstring (date-time)notestringcampaignIdstringLa campaña que creó una promoción o campaña aprobada.
errorstring
curl "https://api.marsial.dev/v1/ads/requests?status=pending" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/ads/requests?status=pending', { headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.marsial.dev/v1/ads/requests?status=pending", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Ver un cambio de anuncios pedido
Sección titulada «Ver un cambio de anuncios pedido»/v1/ads/requests/{id}Parámetros
idstringobligatorio
Respuesta 200
data
idstringobligatorioadr_…
changeobject | object | objectobligatorioLo que llega a la red al aprobarlo.
change
kind"update_campaign"obligatorioaccountIdstringobligatoriocampaignIdstringobligatoriocampaignNamestringobligatoriocurrencystringcurrentobjectobligatorioLa campaña cuando se pidió el cambio.
current
statusstringobligatoriobudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
statusstringbudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
statusstringobligatoriofailed: aprobado, pero la red lo rechazó (vererror).requestedBystringEl usuario que lo pidió, o por quien lo pidió un agente de IA.
viastringobligatoriorequestedAtstring (date-time)obligatoriodecidedBystringdecidedAtstring (date-time)notestringcampaignIdstringLa campaña que creó una promoción o campaña aprobada.
errorstring
curl "https://api.marsial.dev/v1/ads/requests/adr_3m8p2q" \ -H "Authorization: Bearer $MARSIAL_API_KEY"const res = await fetch('https://api.marsial.dev/v1/ads/requests/adr_3m8p2q', { headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, },});const { data } = await res.json();import os, requests
res = requests.get( "https://api.marsial.dev/v1/ads/requests/adr_3m8p2q", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"},)data = res.json()["data"]Aprobar o rechazar un cambio de anuncios
Sección titulada «Aprobar o rechazar un cambio de anuncios»/v1/ads/requests/{id}/reviewPropietarios y admins (y claves API). Al aprobar se envía a la red en el momento; si la red lo rechaza, la solicitud queda failed con el motivo. Los agentes de IA no pueden revisar.
Parámetros
idstringobligatorio
Cuerpo
decisionstringobligatorioapproveenvía el cambio a la red en el momento;rejectlo descarta.notestringPor qué, para quien lo pidió.
Respuesta 200
data
idstringobligatorioadr_…
changeobject | object | objectobligatorioLo que llega a la red al aprobarlo.
change
kind"update_campaign"obligatorioaccountIdstringobligatoriocampaignIdstringobligatoriocampaignNamestringobligatoriocurrencystringcurrentobjectobligatorioLa campaña cuando se pidió el cambio.
current
statusstringobligatoriobudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
statusstringbudgetobjectbudget
amountnumberobligatoriotypestringobligatorio
statusstringobligatoriofailed: aprobado, pero la red lo rechazó (vererror).requestedBystringEl usuario que lo pidió, o por quien lo pidió un agente de IA.
viastringobligatoriorequestedAtstring (date-time)obligatoriodecidedBystringdecidedAtstring (date-time)notestringcampaignIdstringLa campaña que creó una promoción o campaña aprobada.
errorstring
curl -X POST "https://api.marsial.dev/v1/ads/requests/adr_3m8p2q/review" \ -H "Authorization: Bearer $MARSIAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "decision": "approve" }'const res = await fetch('https://api.marsial.dev/v1/ads/requests/adr_3m8p2q/review', { method: 'POST', headers: { Authorization: `Bearer ${process.env.MARSIAL_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ "decision": "approve" }),});const { data } = await res.json();import os, requests
res = requests.post( "https://api.marsial.dev/v1/ads/requests/adr_3m8p2q/review", headers={"Authorization": f"Bearer {os.environ['MARSIAL_API_KEY']}"}, json={ "decision": "approve" },)data = res.json()["data"]© 2026 Marsial by TWOFACES ·marsial.dev ·Panel ·soporte@twofacesco.com