> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.brevo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.brevo.com/_mcp/server.

# Returns the template information

GET https://api.brevo.com/v3/smtp/templates/{templateId}

Retrieve the full details of a specific transactional email template by its numeric ID or custom template identifier string. The response includes the template name, subject, sender information, HTML content, active status, creation and modification timestamps, reply-to address, tag, and a `doiTemplate` flag indicating whether the template is a double opt-in template (detected by the presence of optin-related tags or variables in the content).

Reference: https://developers.brevo.com/reference/get-smtp-template

## Authentication

- `api-key` header (required) — The API key should be passed in the request headers as `api-key` for authentication.

## Request

### Path parameters

- `templateId` (long or string, required) — ID of the template. Can be a numeric template ID or a custom template identifier string (alphanumeric, hyphens, and underscores only, max 64 characters, must start with a letter).

## Response

### 200

Email template informations

- `createdAt` (string, required) — Creation UTC date-time of the template (YYYY-MM-DDTHH:mm:ss.SSSZ)
- `htmlContent` (string, required) — HTML content of the template
- `id` (long, required) — ID of the template
- `isActive` (boolean, required) — Status of template (true=active, false=inactive)
- `modifiedAt` (string, required) — Last modification UTC date-time of the template (YYYY-MM-DDTHH:mm:ss.SSSZ)
- `name` (string, required) — Name of the template
- `replyTo` (string, required) — Email defined as the "Reply to" for the template
- `sender` (object, required)
  - `email` (string, optional) — From email for the template
  - `id` (string, optional) — Sender id of the template
  - `name` (string, optional) — Sender name for the template
- `subject` (string, required) — Subject of the template
- `tag` (string, required) — Tag of the template
- `testSent` (boolean, required) — Status of test sending for the template (true=test email has been sent, false=test email has not been sent)
- `toField` (string, required) — Customisation of the "to" field for the template
- `doiTemplate` (boolean, optional) — It is true if template is a valid Double opt-in (DOI) template, otherwise it is false. This field will be available only in case of single template detail call.
- `customTemplateId` (string, optional) — Custom template identifier, if one was assigned during template creation. Only present when the template has a custom ID.

## Errors

### 400 Bad Request Error

bad request

- `code` (enum, required) — Error code displayed in case of a failure
  - Allowed values: `invalid_parameter`, `missing_parameter`, `out_of_range`, `campaign_processing`, `campaign_sent`, `document_not_found`, `not_enough_credits`, `permission_denied`, `duplicate_parameter`, `duplicate_request`, `method_not_allowed`, `unauthorized`, `account_under_validation`, `not_acceptable`, `bad_request`, `unprocessable_entity`, `Domain does not exist`, `Contact email not found`, `Attribute not found`, `Category id not found`, `Invalid parameters passed`, `Record(s) for identifier not found`, `Returned when query params are invalid`, `Returned when invalid data posted`, `Feed not found`, `Campaign ID not found`, `api-key not found`, `DMARC policy requires domain authentication`, `DNS records not properly configured`, `Invalid OTP code provided`, `OTP code has expired`, `Domain already exists in your account`, `The sum of all IP weights must equal 100`, `Authentication failed`, `Insufficient credits`, `Request already processed`
- `message` (string, required) — Readable message associated to the failure

### 404 Not Found Error

Template ID not found

- `message` (string, required) — Readable message associated to the failure
- `code` (string, optional) — Error code displayed in case of a failure

## Examples

**Response**

```json
{
  "createdAt": "2016-02-25T11:53:26Z",
  "htmlContent": "HTML CONTENT 4",
  "id": 33,
  "isActive": true,
  "modifiedAt": "2016-02-25T11:53:26Z",
  "name": "OrderConfirmation",
  "replyTo": "replyto@domain.com",
  "sender": {
    "email": "john.smith@example.com",
    "id": "26",
    "name": "John"
  },
  "subject": "Order Confirmation : Thanks for your Purchase !",
  "tag": "",
  "testSent": false,
  "toField": "",
  "doiTemplate": false
}
```

**SDK Code**

```typescript response
import { BrevoClient } from "@getbrevo/brevo";

async function main() {
    const client = new BrevoClient({
        apiKey: "YOUR_API_KEY_HERE",
    });
    await client.transactionalEmails.getSmtpTemplate({
        templateId: 1,
    });
}
main();

```

```python response
from brevo import Brevo

client = Brevo(
    api_key="YOUR_API_KEY_HERE",
)

client.transactional_emails.get_smtp_template(
    template_id=1,
)

```

```php response
<?php

namespace Example;

use Brevo\Brevo;

$client = new Brevo(
    apiKey: 'YOUR_API_KEY_HERE',
);
$client->transactionalEmails->getSmtpTemplate(
    1,
);

```

```go response
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.brevo.com/v3/smtp/templates/1"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("api-key", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby response
require 'uri'
require 'net/http'

url = URI("https://api.brevo.com/v3/smtp/templates/1")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["api-key"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.brevo.com/v3/smtp/templates/1")
  .header("api-key", "<apiKey>")
  .asString();
```

```csharp response
using RestSharp;

var client = new RestClient("https://api.brevo.com/v3/smtp/templates/1");
var request = new RestRequest(Method.GET);
request.AddHeader("api-key", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift response
import Foundation

let headers = ["api-key": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.brevo.com/v3/smtp/templates/1")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```