URL de renderización firmadas
Renderizar sobre la marcha desde una URL simple — perfecto para etiquetas <img>, imágenes de Open Graph y correo electrónico. Ninguna clave de API viaja al navegador: el propietario pre-firma la URL, por lo que siempre funciona (nunca se bloquea en cuota como lo hace la API), y los accesos repetidos se cachean en CDN y se deduplican del medidor.
GET https://api.mostlyrender.com/v1/templates/{id}/render.{ext}?<modifications>&sig=<signature>
# Ejemplo
<img src="https://api.mostlyrender.com/v1/templates/tpl_abc/render.png?title=Hello&theme=dusk&sig=8f3c…" />
{ext}espng,jpg/jpeg,webp, opdf.- Cada parámetro de consulta que no sea los reservados
sig,scale, yqse pasa a la plantilla como una modificación. scale(1–3) establece el factor de escala del dispositivo;q(0–100) establece la calidad de JPEG/WebP.
# Firma
La forma más fácil: abre una plantilla en la aplicación y copia su URL de incrustación firmada — está pre-firmada y lista para pegar en una etiqueta <img>.
Para crear URLs tú mismo, el sig es un HMAC-SHA256 sobre el id de plantilla, la extensión y la cadena de consulta canonicalizada (params ordenados, sig excluido), utilizando tu secreto de firma:
import crypto from 'node:crypto';
function signRenderUrl(base, secret, id, ext, params) {
const query = Object.keys(params).sort()
.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`).join('&');
const sig = crypto.createHmac('sha256', secret).update(`${id}:${ext}:${query}`).digest('hex');
return `${base}/v1/templates/${id}/render.${ext}?${query}&sig=${sig}`;
}
Una solicitud con un sig faltante o incorrecto devuelve 403. La firma solo cubre los parámetros que firmaste, por lo que una URL manipulada (un parámetro adicional o cambiado) es rechazada.
# Cuándo usar cuál
| Caso de uso | Solución |
|---|---|
| Generación en el servidor, almacenar la URL | POST /v1/renders |
| Muchas a la vez | Batch |
Incrustar en <img>/OG/correo electrónico, sin clave en el cliente |
URL de renderización firmadas |