# Automatiza el recorte de imágenes con Make
> Monta un escenario de Make que reciba una imagen y genere todas sus medidas con SocialCutter: Create JSON, cabecera X-API-Key y uso de las salidas.
- URL: https://socialcutter.theboomer.dev/guias/make/
- Idioma: es
- Familia: ia
- Actualizado: 2026-09-24
- Palabras clave: Make, Integromat, no-code, automatización, módulo HTTP, SocialCutter, API key
## Por qué automatizar el recorte en Make

Una imagen maestra alimenta Instagram, LinkedIn, X y la portada del blog, y cada hueco pide una proporción distinta. Hacerlo a mano no escala cuando publicas a diario o el catálogo tiene cientos de productos.

Make encaja porque ya vigila dónde aparecen imágenes nuevas y porque sus módulos HTTP y JSON permiten hablar con cualquier API REST sin escribir código. SocialCutter recorta la imagen de forma **centrada** a las medidas exactas de cada destino y devuelve una URL por salida; el escenario de Make mueve esa URL al sitio que toca. El encuadre es centrado y predecible.

## Cómo funciona la API

La API REST vive en `https://api.socialcutter.theboomer.dev` y la autenticación va en la cabecera `X-API-Key` (también vale `Authorization: Bearer sc_tu_clave`).

- `POST /api/v1/images/process` — recibe una imagen y devuelve una salida por destino.
- `POST /api/v1/images/upload` — acepta la imagen como cadena base64 en el cuerpo JSON.
- `POST /api/v1/images/process/upload` — multipart con el fichero en `file` y `destinations` como campo de formulario.
- `POST /api/v1/images/batch` — varias imágenes en una sola llamada.
- `GET /api/v1/history`, `GET /api/v1/wallet`, `GET /api/v1/platforms` — historial, cuota y catálogo real de destinos.

La referencia completa está en https://docs.socialcutter.theboomer.dev.

## Make y el binario: la diferencia con el multipart

El módulo **HTTP → Make a request** puede enviar `multipart/form-data`, pero necesita el fichero como binario real de un módulo anterior (por ejemplo **Google Drive → Download a file**) y el campo `destinations` como cadena JSON. Depende entonces de dos cosas frágiles: que el binario llegue íntegro y que el JSON vaya bien escapado. La vía que funciona siempre es no enviar binario:

1. **Pasar la URL pública del fichero** en el campo `source` del cuerpo JSON. Es la recomendada y la que usa esta guía.
2. **Usar base64** con `POST /api/v1/images/upload`, cuando el origen no expone una URL accesible.

Si de verdad necesitas subir el fichero, usa `POST /api/v1/images/process/upload` con el tipo de cuerpo `multipart/form-data`, el campo `file` alimentado por el binario del módulo de origen y `destinations` como texto JSON. Prueba ese camino aparte antes de ponerlo en producción.

## Crear la API key

Entra en https://dash.socialcutter.theboomer.dev, abre **Perfil → API keys**, crea una clave con un nombre reconocible (por ejemplo `make-produccion`) y cópiala: empieza por `sc_` y solo se muestra una vez. En Make guárdala como variable de entorno del escenario o como conexión, no pegada en el texto de un módulo.

## Componer el cuerpo con Create JSON

El cuerpo real de una petición es este:

```json
{
  "source": { "type": "url", "value": "https://example.com/foto.jpg" },
  "destinations": [
    { "platform": "instagram", "format": "post" },
    { "platform": "linkedin", "format": "post" },
    { "platform": "twitter", "format": "post" }
  ],
  "options": { "fit_mode": "cover" }
}
```

En Make, el módulo **JSON → Create JSON** evita escribir el texto a mano y escapa las comillas: añade `source` (objeto con `type` y `value`) y `destinations` (array con un objeto `platform` + `format` por destino). Si prefieres pegar el JSON, usa el tipo de cuerpo `Raw` en el módulo HTTP con `Content-Type: application/json`, pero revisa las comillas: una sin escapar devuelve `422`.

`source` acepta `url` o base64 y `destinations` es la lista de plataforma y formato. `fit_mode: cover` escala y recorta el exceso de forma centrada (el valor por defecto); para encajar la imagen completa, usa `contain` con `background_color`.

### Destinos que acepta la API

| Plataforma | Formato | Medidas | Relación |
|---|---|---|---|
| instagram | post | 1080x1080 | 1:1 |
| instagram | story | 1080x1920 | 9:16 |
| instagram | landscape | 1080x566 | 1.91:1 |
| facebook | post | 1200x630 | 1.91:1 |
| facebook | story | 1080x1920 | 9:16 |
| facebook | cover | 820x312 | 2.63:1 |
| twitter | post | 1200x675 | 16:9 |
| twitter | header | 1500x500 | 3:1 |
| linkedin | post | 1200x627 | 1.91:1 |
| linkedin | cover | 1128x191 | 5.9:1 |
| youtube | thumbnail | 1280x720 | 16:9 |
| youtube | banner | 2560x1440 | 16:9 |
| tiktok | cover | 1080x1920 | 9:16 |

Estos datos salen de `GET /api/v1/platforms`, que es público. El catálogo no incluye un formato 4:5.

## La llamada con el módulo HTTP

En el módulo **HTTP → Make a request**:

- **URL**: `https://api.socialcutter.theboomer.dev/api/v1/images/process`
- **Method**: `POST`
- **Headers**: `X-API-Key` = `sc_tu_clave`, y `Content-Type` = `application/json` si envías el JSON como Raw. Añade `Idempotency-Key` con un id estable del fichero para que un reintento no duplique trabajo.
- **Body type**: `Raw` (o `application/json`), con el JSON del módulo Create JSON. Con `multipart/form-data`, el campo `file` lleva el binario y `destinations` va como texto.

Comprueba la respuesta en crudo antes de montar el escenario:

```bash
curl -s -X POST "https://api.socialcutter.theboomer.dev/api/v1/images/process" \
  -H "X-API-Key: sc_tu_clave" \
  -H "Content-Type: application/json" \
  -d '{"source":{"type":"url","value":"https://example.com/foto.jpg"},"destinations":[{"platform":"instagram","format":"post"}]}' \
  | jq '.image_id, (.outputs[] | {url, platform, format, width, height})'
```

## Leer la respuesta y usarla después

La respuesta trae `image_id` y un array `outputs`, una entrada por destino, con la URL, la plataforma, el formato y las medidas. Para usarla después:

1. **JSON → Parse JSON** sobre el cuerpo de la respuesta convierte `image_id` y `outputs` en campos enlazables.
2. **Flow Control → Iterator** sobre `outputs` recorre una salida por ciclo.
3. En cada ciclo, una **HTTP → Get a file** descarga la URL si necesitas el binario, o pasa la URL al módulo de destino.

## Encadenar a un CMS o a un almacenamiento

- **WordPress**: sube la salida a la biblioteca de medios (`POST /wp-json/wp/v2/media`) y asigna el id del adjunto a `featured_media` del post.
- **Shopify**: usa el campo `image` del producto con la URL de la salida.
- **Almacenamiento**: el módulo de subida necesita binario; descarga la salida primero con un paso HTTP `GET` y luego súbela. Si no acepta el binario, deja que el CMS descargue la URL.

## Límites del plan

- Máximo **5 MB** por imagen; por encima la API responde `413`.
- **1 uso por destino** (plataforma y formato) por petición. Los destinos repetidos no se cobran dos veces y los procesamientos fallidos se devuelven.
- Cuota diaria por plan: Free (0 €) 3 usos/día, Basic (3 €) 10/día, Pro (9 €) 30/día, Agency (29 €) 100/día. Todos incluyen API y MCP.
- En Make, cada módulo consume una operación de tu plan: un Iterator gasta una por elemento.

## Errores típicos

| Código | Significado |
|---|---|
| 401 | Falta la cabecera `X-API-Key` o la clave es incorrecta |
| 429 | Cuota agotada: superaste los usos diarios de tu plan |
| 413 | La imagen supera 5 MB |
| 422 | Error de validación: `source` o `destinations` mal formados, o JSON roto |
| 400 | Payload inválido: plataforma o formato desconocido |

## Coste por petición

1 uso por destino. Un escenario que pida Instagram post, LinkedIn post y X post consume 3 usos por imagen. Si el disparador recibe ráfagas, agrupa antes de llamar o usa `POST /api/v1/images/batch`. Consulta `GET /api/v1/wallet` para ver la cuota diaria.

## Siguientes pasos

- Guía de n8n: [Automatiza el recorte con n8n](/guias/n8n/)
- Guía de la API con curl: [Procesa imágenes desde la terminal](/guias/curl/)
- Guía de Python: [Automatiza SocialCutter con Python](/guias/python/)
- Guía de WordPress: [Integra SocialCutter con WordPress y WooCommerce](/guias/wordpress/)
- Documentación de la API: https://docs.socialcutter.theboomer.dev