A template is a normal JsonCut project with a deliberately small public contract. The best contract describes what the operator wants to change, not how the editor stores it.
Name the outcome
Prefer Headline, Product image and Offer over internal layer IDs. Include an example and mark an input required only when the design truly cannot work without it.
Keep types intentionally small
Use text, number, boolean, color, image, video or audio. A compact type system makes forms, CSV mapping, API validation and agent authoring easier to understand.
Inspect before filling
Retrieve the template input contract before sending values. This keeps an integration current as optional fields are added to a later template version.
GET /api/v2/templates/{templateId}/inputs
POST /api/v2/templates/{templateId}/renders