A template's save history
Authorization
ApiKeyAuth API key from Settings → API Keys.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/api/v1/templates/string/versions"{ "count": 3, "versions": [ { "version": 3, "summary": "restored from v1", "current": true, "created_at": "2026-08-31T10:20:00.000Z" }, { "version": 2, "summary": "14 layers", "current": false, "created_at": "2026-08-30T18:02:00.000Z" } ]}Finish a file upload POST
Stores a file that was posted to the URL from `POST /v1/uploads`. This is where the work happens. A `.docx` is parsed before it is kept, so a file the renderer cannot read is refused rather than becoming a template that fails at render time, and only now does it get a version. For a Word body the response names the fields the upload `added` and `removed`. Every upload is checked against its own first bytes, so a truncated image or a PNG sent as a font is refused here rather than stored and discovered at render time. For a Brand Kit image the response carries `key`, which is what a canvas image `src` takes; for a Brand Kit font it carries `family`, read out of the file and often not the filename, which is what `fontFamily` takes. Both say plainly that the file is team-wide. A font declaring a family this product already ships is refused: the built-in face wins when the renderer resolves the name, so the upload would be stored, listed and never drawn. Idempotent: a second call returns the first result rather than storing a second version.
Restore a previous version POST
Put the template back to how it was at a given version. Restoring appends rather than rewrites: the old content becomes a NEW version at the top of the history, so going back never destroys anything and undoing a restore is just another restore.