# Template

The Confluence REST API template section provides a flexible and dynamic way to interact programmatically with Confluence templates, enabling users to automate and streamline content creation, modification, and management. Through this API, you can:<br>

• **Create templates:** Automate the creation of page templates that can be reused across spaces or within a specific space, ensuring consistency and efficiency in content generation.

• **Retrieve existing templates:** Access detailed information about available templates, including their content, layout, and associated metadata.

• **Update templates:** Modify existing templates programmatically, allowing teams to keep templates up-to-date and aligned with changing documentation standards or guidelines.

• **Delete templates (TODO):** Remove outdated or unused templates, keeping the Confluence environment clean and relevant.

<figure><img src="/files/W1XFVDH7nXLr5iEGqGdj" alt=""><figcaption></figcaption></figure>

Integrate Confluence templates into custom workflows using the Confluence REST API to streamline content management, ensure documentation consistency, and automate tasks.

## Update content template

`PUT /wiki/rest/api/template`

Update modifies a content template. Note that blueprint templates cannot be updated through

{% code fullWidth="true" %}

```go
package main

import (
	"context"
	"fmt"
	"github.com/ctreminiom/go-atlassian/confluence"
	"github.com/ctreminiom/go-atlassian/pkg/infra/models"
	"log"
)

func main() {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := confluence.New(nil, host)
	if err != nil {
		return
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	payload := &models.UpdateTemplateScheme{
		TemplateID:   "272760834",
		Name:         "Template #1 - UPDATED",
		TemplateType: "page",
		Body: &models.ContentTemplateBodyCreateScheme{
			Storage: &models.ContentBodyCreateScheme{
				Value:          "<at:declarations><at:list at:name=\"variable_name\"><at:option at:value=\"\" /></at:list></at:declarations><h1>H1 UPDATED</h1><p /><p><at:var at:name=\"variable_name\" /> </p><p />",
				Representation: "storage",
			},
		},
		Description: "Template description sample",
		Labels: []models.LabelValueScheme{
			{
				Name: "template-tracking",
			},
			{
				Name: "template-tracking-new",
			},
		},
		Space: &models.SpaceScheme{
			Key: "DUMMY",
		},
	}

	templateUpdated, response, err := atlassian.Template.Update(context.Background(), payload)
	if err != nil {
		log.Println(response.Bytes.String())
		log.Println(response.Status, response.Endpoint)
		log.Fatal(err)
	}

	fmt.Println(templateUpdated.TemplateID)
	fmt.Println(templateUpdated.TemplateType)
	fmt.Println(templateUpdated.Description)
	fmt.Println(templateUpdated.Labels)
	fmt.Println(templateUpdated.Name)
	fmt.Println(templateUpdated.ReferencingBlueprint)
	fmt.Println(templateUpdated.TemplateID)
}
```

{% endcode %}

## Create content template

`POST /wiki/rest/api/template`

Create a new content template. Note: Blueprint templates cannot be created using the REST API.

{% code fullWidth="true" %}

```go
package main

import (
	"context"
	"fmt"
	"github.com/ctreminiom/go-atlassian/confluence"
	"github.com/ctreminiom/go-atlassian/pkg/infra/models"
	"log"
)

func main() {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := confluence.New(nil, host)
	if err != nil {
		return
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	payload := &models.CreateTemplateScheme{
		Name:         "Template #1",
		TemplateType: "page",
		Body: &models.ContentTemplateBodyCreateScheme{
			Storage: &models.ContentBodyCreateScheme{
				Value:          "<at:declarations><at:list at:name=\"variable_name\"><at:option at:value=\"\" /></at:list></at:declarations><h1>asdsadsadsa</h1><p /><p><at:var at:name=\"variable_name\" /> </p><p />",
				Representation: "storage",
			},
		},
		Description: "Template description sample",
		Labels: []models.LabelValueScheme{
			{
				Name: "template-tracking",
			},
		},
		Space: &models.SpaceScheme{
			Key: "DUMMY",
		},
	}

	templateCreated, response, err := atlassian.Template.Create(context.Background(), payload)
	if err != nil {
		log.Println(response.Status, response.Endpoint)
		log.Fatal(err)
	}

	fmt.Println(templateCreated.TemplateID)
	fmt.Println(templateCreated.TemplateType)
	fmt.Println(templateCreated.Description)
	fmt.Println(templateCreated.Labels)
	fmt.Println(templateCreated.Name)
	fmt.Println(templateCreated.ReferencingBlueprint)
	fmt.Println(templateCreated.TemplateID)
}

```

{% endcode %}

## Get content template

`GET /wiki/rest/api/template/{contentTemplateId}`

Retrieve a content template with detailed information, including the template's name, the associated space or blueprint, the template body,

{% code fullWidth="true" %}

```go
package main

import (
	"context"
	"fmt"
	"github.com/ctreminiom/go-atlassian/confluence"
	"log"
)

func main() {

	var (
		host  = os.Getenv("HOST")
		mail  = os.Getenv("MAIL")
		token = os.Getenv("TOKEN")
	)

	atlassian, err := confluence.New(nil, host)
	if err != nil {
		return
	}

	atlassian.Auth.SetBasicAuth(mail, token)

	template, response, err := atlassian.Template.Get(context.Background(), "272760834")
	if err != nil {
		log.Println(response.Status, response.Endpoint)
		log.Println(response.Bytes.String())
		log.Fatal(err)
	}

	fmt.Println(template.TemplateID)
	fmt.Println(template.TemplateType)
	fmt.Println(template.Description)
	fmt.Println(template.Labels)
	fmt.Println(template.Name)
	fmt.Println(template.ReferencingBlueprint)
	fmt.Println(template.TemplateID)
}

```

{% endcode %}

## Get content templates

{% hint style="warning" %}
**Note**

This feature is currently not implemented. If you would like to request an implementation or contribute a feature pull request, please refer [here](https://github.com/ctreminiom/go-atlassian).
{% endhint %}

## Get blueprints content

{% hint style="warning" %}
**Note**

This feature is currently not implemented. If you would like to request an implementation or contribute a feature pull request, please refer [here](https://github.com/ctreminiom/go-atlassian).
{% endhint %}

## Remove template

{% hint style="warning" %}
**Note**

This feature is currently not implemented. If you would like to request an implementation or contribute a feature pull request, please refer [here](https://github.com/ctreminiom/go-atlassian).
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.go-atlassian.io/confluence-cloud/template.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
