Skip to content
out·box
For teamsFor youHow it worksExamplesPrivacyGuidesPricing
out·box

An outbox for your agents. The artifacts they create land in your library: their own URL, versioned, shareable. Private by default, presentable when you decide.

·

Product

  • How it works
  • Versions
  • Pricing
  • Start free

Guides

  • All guides
  • Outbox vs Claude Artifacts
  • Outbox vs ChatGPT Sites
  • Outbox vs Stacktree
  • Outbox vs DocSend
  • Outbox vs Qwilr
  • Outbox vs Derive
  • Outbox vs Display.dev

For agents

  • Design system
  • API status
  • CLI (npm)
  • AI agent skill

Company

  • Manifesto
  • Contact
  • Support
  • Status
Legal
  • Terms
  • Privacy
  • Acceptable use
  • Refunds
  • Security
  • Report content
  • Right of withdrawal
  • Cancel subscription
  • All legal
@out-box/cli on npmout-box-skills starsoutbox-publish on skills.sh
© 2026 Outbox · an outbox for your agents.v0.2.0 · agents-first · privacy-first
Docs · Publish templates

publish-from-template · an endpoint for agents that don't write HTML

When an agent doesn't want to (or can't) generate HTML, it sends Outbox structured JSON plus a template ID, and Outbox renders the HTML server-side. The result is stored like any other page: a real URL, versions, visibility, folders, everything.

Useful for agents running in Custom GPT Actions, n8n, Zapier, cron scripts, or any integration without an HTML rendering library.

The endpoint

POST https://api.out-box.dev/api/publish-from-template
Authorization: Bearer <YOUR_OUTBOX_AGENT_KEY>
Content-Type: application/json

{
  "template": "status-report",
  "model": "claude-opus-4-8",
  "slug": "acme-q2-status",
  "title": "Acme · Q2 status · week 21",
  "visibility": "private",
  "tags": ["acme", "status", "2026-Q2"],
  "data": {
    "client": "Acme",
    "date": "2026-05-24",
    "highlights": ["Tickets DLV-340/341 closed."],
    "blockers": ["DEV token pending."],
    "nextSteps": "Module 4 demo in week 22."
  }
}

Returns 200 OK with the new page's URL, its slug and the resolved visibility (it may inherit it from the parent folder). It counts toward your publish quota (just like POST /publish) and uses the same publish:<user> scope (no new scope needed).

Errors

  • invalid_template — the template id is not in the catalog.
  • missing_model — the model field is missing (required, e.g. claude-opus-4-8).
  • missing_field +field — a required schema field is missing.
  • invalid_field +field — a field has the wrong format (e.g. a bad date, or an empty array where items are expected).
  • data_too_large — the data JSON is over 64 KB.
  • slug_not_under_allowed_folder — your key is folder-scoped and the slug is outside that folder. Change the slug or use a broader key.

Default templates (v1)

5 templates built in server-side. Custom per-user templates are not supported yet; for output that doesn't fit, custom sends raw HTML and is stored the same way.

PM

Status report

Status report para PMs que comparten progreso con clientes.

status-report

Schema

CampoTipoReqDescripción
clientstring●Nombre del cliente o proyecto.
dateiso-date●Fecha del status (YYYY-MM-DD).
highlightsstring[]●Lista de wins de la semana.
blockersstring[]●Issues que necesitan atención (puede ir vacío).
nextStepsstring●Próximos pasos del equipo.
periodstring○string
risksstring○string[]

Ejemplo de invocación

{
  "template": "status-report",
  "slug": "status-report-{date}",
  "title": "Status report · {date}",
  "visibility": "private",
  "data": {
    "client": "Solera",
    "date": "2026-05-24",
    "highlights": [
      "Tickets DLV-340/341 cerrados, demo OK.",
      "ERP integración firmada."
    ],
    "blockers": [
      "Token DEV pendiente del partner."
    ],
    "nextSteps": "Revisión contrato Volta, jueves con Marina."
  }
}
gerente

Daily briefing

Briefing del día para gerentes — summary + prioridades + meetings + metrics.

daily-briefing

Schema

CampoTipoReqDescripción
dateiso-date●Fecha del briefing.
summarystring●Resumen ejecutivo de 2-3 oraciones.
prioritiesstring[]●Lista priorizada de la mañana.
meetingsstring○Array<{ time, title, with? }>
metricsstring○Array<{ name, value, delta? }>

Ejemplo de invocación

{
  "template": "daily-briefing",
  "slug": "daily-briefing-{date}",
  "title": "Daily briefing · {date}",
  "visibility": "private",
  "data": {
    "date": "2026-05-24",
    "summary": "Día tranquilo después del cierre de DLV-340. Revisión contrato Volta + demo a Solera son el foco.",
    "priorities": [
      "06:42 · Mate + status Solera.",
      "11:00 · Reunión cliente nuevo, Carla confirmó.",
      "15:00 · QA review DLV-340."
    ]
  }
}
dev

Repo diff

Diff de repo en un período — files + notable changes para devs.

repo-diff

Schema

CampoTipoReqDescripción
repostring●Nombre del repo (org/repo).
periodstring●Periodo cubierto, ej 'semana 20'.
filesobject[]●Archivos tocados: path, additions, deletions y summary opcional.
notableChangesstring○string[]

Ejemplo de invocación

{
  "template": "repo-diff",
  "slug": "repo-diff-{date}",
  "title": "Repo diff · {date}",
  "visibility": "private",
  "data": {
    "repo": "jonathanleiva15/out-box",
    "period": "semana 20",
    "files": [
      {
        "path": "worker/src/handlers/share.ts",
        "additions": 12,
        "deletions": 4
      },
      {
        "path": "tests/security.test.ts",
        "additions": 8,
        "deletions": 0
      }
    ]
  }
}
gerente

KPIs snapshot

Snapshot de KPIs en un período con grid de métricas + comentario editorial.

kpis-snapshot

Schema

CampoTipoReqDescripción
periodstring●Periodo cubierto, ej 'semana 21'.
metricsobject[]●Lista de KPIs con name + value y deltaVsPrev opcional.
commentarystring○string

Ejemplo de invocación

{
  "template": "kpis-snapshot",
  "slug": "kpis-snapshot-{date}",
  "title": "KPIs snapshot · {date}",
  "visibility": "private",
  "data": {
    "period": "mayo · semana 21",
    "metrics": [
      {
        "name": "MRR",
        "value": "$14.8K",
        "deltaVsPrev": "↑ +6.2%"
      },
      {
        "name": "Active users",
        "value": "312",
        "deltaVsPrev": "↑ +14 nuevos · churn 3"
      },
      {
        "name": "NPS Q2",
        "value": "54",
        "deltaVsPrev": "→ estable (n=78)"
      }
    ]
  }
}
universal

Custom

Escape hatch para devs — HTML raw del body, wrappeado con el _template.html del user. NO sanitiza.

custom

Schema

CampoTipoReqDescripción
htmlstring●HTML del cuerpo (slug y título van fuera de data).

Ejemplo de invocación

{
  "template": "custom",
  "slug": "custom-{date}",
  "title": "Custom · {date}",
  "visibility": "private",
  "data": {
    "html": "<article><h2>Highlights</h2><ul><li>…</li></ul></article>"
  }
}

Validation

Validation is strict: if your agent sends a date in the wrong format or an array where a string was expected, nothing is published. It gets a 400 with the offending field in body.field.

Folder-scoped keys

If your key is scoped to a folder, the page slug has to be inside that folder. Otherwise you get a 403 with the error slug_not_under_allowed_folder. You set folder scoping when you create the key in Settings → Keys.

Privacy

Pages generated by publish-from-template use your visual template (_template.html) and keep Powered by Outbox off by default. The pages look like yours, not like Outbox.

← More about our privacy principles