Publish the draft as the next version
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://reputecast.example.com/api/v1/workspaces/acme-newsletter/transactional/templates/password-reset/publish"
payload := strings.NewReader("{ \"baseRevision\": 1, \"makeOptional\": [ { \"default\": \"example\", \"name\": \"example\" } ], \"note\": \"example\", \"publishAnyway\": true }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}const url = 'https://reputecast.example.com/api/v1/workspaces/acme-newsletter/transactional/templates/password-reset/publish';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"baseRevision":1,"makeOptional":[{"default":"example","name":"example"}],"note":"example","publishAnyway":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://reputecast.example.com/api/v1/workspaces/acme-newsletter/transactional/templates/password-reset/publish \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "baseRevision": 1, "makeOptional": [ { "default": "example", "name": "example" } ], "note": "example", "publishAnyway": true }'Permission: transactional:publish (sensitive)
Fails with 409 breaking_change when a newly required variable is missing from recent calls (fix it with makeOptional, or send publishAnyway), 409 approval_required when the workspace’s rule applies, 409 version_conflict when the draft changed since baseRevision, and 409 template_does_not_render when a check blocks.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Workspace slug
Workspace slug
The template’s ID, such as password-reset, or its UUID
The template’s ID, such as password-reset, or its UUID
Request Bodyrequired
Section titled “Request Bodyrequired”object
object
Shown in the version history instead of the generated summary
Example generated
{ "baseRevision": 1, "makeOptional": [ { "default": "example", "name": "example" } ], "note": "example", "publishAnyway": true}Responses
Section titled “Responses”OK
object
The version that was live before (Undo publishes it again)
object
object
object
The ID the API sends, fixed after the first publish
object
object
object
object
object
Never stored: logs and stored content show ••••••
Example
{ "template": { "category": { "kind": "essential" }, "editorMode": "visual", "testData": [ { "name": "New user" } ], "variables": [ { "name": "reset_url", "type": "text" } ] }}default
Section titled “default”Error
object
Stable error code, e.g. permission_denied
A human-readable explanation specific to this occurrence of the problem.
Optional list of individual error details
object
Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’
Error message text
The value at the given location
Members who hold the missing permission
A URI reference that identifies the specific occurrence of the problem.
object
The missing permission key
HTTP status code
A short, human-readable summary of the problem type. This value should not change between occurrences of the error.
A URI reference to human-readable documentation for the error.
Example
{ "detail": "Property foo is required but is missing.", "instance": "https://example.com/error-log/abc123", "status": 400, "title": "Bad Request", "type": "about:blank"}