Move forms and reusable email templates between environments — dev → staging → production — as a single JSON package. Subscriber import is a separate, CSV-based flow; see Importing subscribers.
What is included
| Included | Not included |
|---|---|
| Forms (schema, settings and workflows) and reusable marketing email templates | Submissions, subscribers, campaigns, themes and mailing-list definitions (planned for a later pass) |
Exporting
GET /campaigncanvas/package/export returns a PackageExport document:
{
"version": 1,
"exportedUtc": "2026-04-21T10:30:00Z",
"forms": [ ... ],
"emailTemplates": [ ... ]
}Importing
POST /campaigncanvas/package/import takes the package plus a conflict strategy that decides what happens when an incoming alias already exists:
| Strategy | Behaviour |
|---|---|
| Fail on conflict | Reject the entire import if any alias collides — nothing is written (no partial imports) |
| Overwrite on conflict | Replace matching rows with the incoming version |
| Only missing | Insert new items only; skip anything that already exists |
Email-template ids are remapped on import, and any workflow that references a template by id is rewritten to the destination id — so a form’s Email Notification / Autoresponder keep working after the move.
Result
The response reports per-type counts so you can confirm the outcome:
{
"success": true,
"formsCreated": 5, "formsUpdated": 2, "formsSkipped": 1,
"templatesCreated": 3, "templatesUpdated": 0, "templatesSkipped": 0,
"conflicts": []
}