Static Ads Lab
API ReferenceDesign templatesV1Design templatesId

Update a design template

Updates the JSON tree of a design template. Creates a version snapshot before applying the update.

PATCH
/v1/design-templates/{id}
X-API-Key<token>

API key for authentication. Include in the X-API-Key header.

In: header

Path Parameters

idstring

The design template ID

Length1 <= length
current_json_treeobject

Updated JSON tree for the design template. A JSON tree is a schema-v2 document: { schemaVersion: 2, colorProfile: "SRGB", root }, where root is a FRAME in Figma Plugin API node shape (relativeTransform + width/height, images as IMAGE paints with sal.url, text as characters + styledTextSegments). A TEXT segment whose font we do not ship (an unknown family, or a style the family does not have) renders in Inter at the closest weight and slant; the stored tree keeps its fontName. Schema-v2 trees are returned exactly as stored. Trees written before schema v2 (no schemaVersion) are returned as stored except that VECTOR icon nodes (iconId, iconWeight) get vectorPaths and viewBox filled from the icon registry, as before; they are rejected on write, so regenerate them to edit.

Empty Object

change_summary?string

Brief description of what was changed

Lengthlength <= 500

Response Body

curl -X PATCH "https://api.staticadslab.com/v1/design-templates/dt_a1b2c3d4e5f67890" \
  -H "Content-Type: application/json" \
  -d '{
    "current_json_tree": {
      "property1": null,
      "property2": null
    }
  }'
{
  "data": {
    "id": "dt_a1b2c3d4e5f67890",
    "reference_image_url": "string",
    "status": "completed",
    "current_json_tree": {
      "property1": null,
      "property2": null
    },
    "preview_url": "string",
    "width": 0,
    "height": 0,
    "aspect_ratio": "1:1",
    "industry": "Apparel & Accessories",
    "ad_format": "Sale",
    "json_tree_version": 1,
    "duration_ms": 0,
    "error": "Maximum call stack size exceeded",
    "created_at": "2026-03-27T12:00:00.000Z",
    "updated_at": "2026-03-27T12:00:00.000Z"
  },
  "meta": {
    "request_id": "req_a1b2c3d4e5f67890",
    "timestamp": "2026-03-27T12:00:00.000Z"
  }
}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request body",
    "details": [
      {
        "field": "string",
        "message": "string"
      }
    ]
  },
  "meta": {
    "request_id": "req_a1b2c3d4e5f67890",
    "timestamp": "2026-03-27T12:00:00.000Z"
  }
}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request body",
    "details": [
      {
        "field": "string",
        "message": "string"
      }
    ]
  },
  "meta": {
    "request_id": "req_a1b2c3d4e5f67890",
    "timestamp": "2026-03-27T12:00:00.000Z"
  }
}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request body",
    "details": [
      {
        "field": "string",
        "message": "string"
      }
    ]
  },
  "meta": {
    "request_id": "req_a1b2c3d4e5f67890",
    "timestamp": "2026-03-27T12:00:00.000Z"
  }
}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request body",
    "details": [
      {
        "field": "string",
        "message": "string"
      }
    ]
  },
  "meta": {
    "request_id": "req_a1b2c3d4e5f67890",
    "timestamp": "2026-03-27T12:00:00.000Z"
  }
}