Python
import requests
url = 'https://api.minimo.it/public/v1/templates/email/send'
headers = {'Authorization': 'Bearer {{BEARER_TOKEN}}', 'Content-Type': 'application/json'}
data = {
'recipient': '{{recipient}}',
'uid': '{{uid}}',
'customFields': {
'{{customKey1}}': '{{customValue1}}',
'{{customKey2}}': '{{customValue2}}',
'{{customKey3}}': '{{customValue3}}'
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())fetch('https://api.minimo.it/public/v1/templates/email/send', {
method: 'POST',
headers: {
'Authorization': 'Bearer {{BEARER_TOKEN}}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'recipient': '{{recipient}}',
'uid': '{{uid}}',
'customFields': {
'{{customKey1}}': '{{customValue1}}',
'{{customKey2}}': '{{customValue2}}',
'{{customKey3}}': '{{customValue3}}'
}
})
}).then(response => response.json()).then(data => console.log(data));curl --request POST \
--url https://api.minimo.it/public/v1/templates/email/send \
--header 'Authorization: Bearer {{BEARER_TOKEN}}' \
--header 'Content-Type: application/json' \
--data '{
"recipient": "{{recipient}}",
"uid": "{{uid}}",
"customFields": {
"{{customKey1}}": "{{customValue1}}",
"{{customKey2}}": "{{customValue2}}",
"{{customKey3}}": "{{customValue3}}"
}
}'<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.minimo.it/public/v1/templates/email/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"recipient": "{{recipient}}",
"uid": "{{uid}}",
"customFields": {
"{{customKey1}}": "{{customValue1}}",
"{{customKey2}}": "{{customValue2}}",
"{{customKey3}}": "{{customValue3}}"
}
}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer {{BEARER_TOKEN}}',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class Main {
public static void main(String[] args) {
try {
URL url = new URL('https://api.minimo.it/public/v1/templates/email/send');
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod('POST');
conn.setRequestProperty('Authorization', 'Bearer {{BEARER_TOKEN}}');
conn.setRequestProperty('Content-Type', 'application/json');
conn.setDoOutput(true);
String jsonInputString = '{"recipient": "{{recipient}}", "uid": "{{uid}}", "customFields": {"{{customKey1}}": "{{customValue1}}", "{{customKey2}}": "{{customValue2}}", "{{customKey3}}": "{{customValue3}}"}}';
try(OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes('utf-8');
os.write(input, 0, input.length);
}
try(BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), 'utf-8'))) {
StringBuilder response = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
System.out.println(response.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.minimo.it/public/v1/templates/email/send"
payload := strings.NewReader("{\n \"recipient\": \"email@minimo.it\",\n \"uid\": \"ABCDE143\",\n \"customFields\": {\n \"customKey1\": \"customValue1\",\n \"customKey2\": \"customValue2\",\n \"customKey3\": \"customValue3\"\n }\n}")
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(string(body))
}require 'uri'
require 'net/http'
url = URI("https://api.minimo.it/public/v1/templates/email/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": \"email@minimo.it\",\n \"uid\": \"ABCDE143\",\n \"customFields\": {\n \"customKey1\": \"customValue1\",\n \"customKey2\": \"customValue2\",\n \"customKey3\": \"customValue3\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"status": 200,
"success": true,
"messageId": "0100019c8b3d4a4f-a1b2c3d4-e5f6-7a8b-9c0d-e1f2a3b4c5d6-000000"
}
}{
"error": "<string>"
}{
"error": "<string>"
}Email
Send Email Template
Send transactional or automated emails using predefined templates
POST
/
public
/
v1
/
templates
/
email
/
send
Python
import requests
url = 'https://api.minimo.it/public/v1/templates/email/send'
headers = {'Authorization': 'Bearer {{BEARER_TOKEN}}', 'Content-Type': 'application/json'}
data = {
'recipient': '{{recipient}}',
'uid': '{{uid}}',
'customFields': {
'{{customKey1}}': '{{customValue1}}',
'{{customKey2}}': '{{customValue2}}',
'{{customKey3}}': '{{customValue3}}'
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())fetch('https://api.minimo.it/public/v1/templates/email/send', {
method: 'POST',
headers: {
'Authorization': 'Bearer {{BEARER_TOKEN}}',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'recipient': '{{recipient}}',
'uid': '{{uid}}',
'customFields': {
'{{customKey1}}': '{{customValue1}}',
'{{customKey2}}': '{{customValue2}}',
'{{customKey3}}': '{{customValue3}}'
}
})
}).then(response => response.json()).then(data => console.log(data));curl --request POST \
--url https://api.minimo.it/public/v1/templates/email/send \
--header 'Authorization: Bearer {{BEARER_TOKEN}}' \
--header 'Content-Type: application/json' \
--data '{
"recipient": "{{recipient}}",
"uid": "{{uid}}",
"customFields": {
"{{customKey1}}": "{{customValue1}}",
"{{customKey2}}": "{{customValue2}}",
"{{customKey3}}": "{{customValue3}}"
}
}'<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.minimo.it/public/v1/templates/email/send',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"recipient": "{{recipient}}",
"uid": "{{uid}}",
"customFields": {
"{{customKey1}}": "{{customValue1}}",
"{{customKey2}}": "{{customValue2}}",
"{{customKey3}}": "{{customValue3}}"
}
}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer {{BEARER_TOKEN}}',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
public class Main {
public static void main(String[] args) {
try {
URL url = new URL('https://api.minimo.it/public/v1/templates/email/send');
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod('POST');
conn.setRequestProperty('Authorization', 'Bearer {{BEARER_TOKEN}}');
conn.setRequestProperty('Content-Type', 'application/json');
conn.setDoOutput(true);
String jsonInputString = '{"recipient": "{{recipient}}", "uid": "{{uid}}", "customFields": {"{{customKey1}}": "{{customValue1}}", "{{customKey2}}": "{{customValue2}}", "{{customKey3}}": "{{customValue3}}"}}';
try(OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes('utf-8');
os.write(input, 0, input.length);
}
try(BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), 'utf-8'))) {
StringBuilder response = new StringBuilder();
String responseLine = null;
while ((responseLine = br.readLine()) != null) {
response.append(responseLine.trim());
}
System.out.println(response.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.minimo.it/public/v1/templates/email/send"
payload := strings.NewReader("{\n \"recipient\": \"email@minimo.it\",\n \"uid\": \"ABCDE143\",\n \"customFields\": {\n \"customKey1\": \"customValue1\",\n \"customKey2\": \"customValue2\",\n \"customKey3\": \"customValue3\"\n }\n}")
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(string(body))
}require 'uri'
require 'net/http'
url = URI("https://api.minimo.it/public/v1/templates/email/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"recipient\": \"email@minimo.it\",\n \"uid\": \"ABCDE143\",\n \"customFields\": {\n \"customKey1\": \"customValue1\",\n \"customKey2\": \"customValue2\",\n \"customKey3\": \"customValue3\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"status": 200,
"success": true,
"messageId": "0100019c8b3d4a4f-a1b2c3d4-e5f6-7a8b-9c0d-e1f2a3b4c5d6-000000"
}
}{
"error": "<string>"
}{
"error": "<string>"
}Overview
Use this endpoint to send emails based on templates you’ve created in the Minimo dashboard. Perfect for:- Transactional emails: Order confirmations, password resets, receipts
- Automated messages: Welcome series, onboarding flows
- Triggered notifications: Account alerts, status updates
This API is intended for server-side usage only. Requests from client-side applications will be blocked for
security reasons.
Before You Start
- Create a template in the Minimo dashboard under Templates → Email
- Get the template ID from the templates list
- Define custom fields in your template using
{{variableName}}syntax - Test your template using the dashboard preview before API integration
Template Variables
Templates support dynamic content using variables: Template Example:Hello {{firstName}}, Your order {{orderNumber}} has been confirmed! Total: {{orderTotal}} Estimated delivery:
{{deliveryDate}}
{
"uid": "tmpl_abc123",
"recipient": "customer@example.com",
"customFields": {
"firstName": "Jane",
"orderNumber": "ORD-12345",
"orderTotal": "$99.99",
"deliveryDate": "November 20, 2025"
}
}
Use Cases
Order Confirmation
Order Confirmation
Send instant confirmation when an order is placed:
{
"uid": "tmpl_order_confirm",
"recipient": "customer@example.com",
"customFields": {
"orderNumber": "ORD-12345",
"items": "3 items",
"total": "$149.99",
"trackingUrl": "https://track.example.com/12345"
}
}
Password Reset
Password Reset
Send password reset links securely:
{
"uid": "tmpl_password_reset",
"recipient": "user@example.com",
"customFields": {
"resetLink": "https://app.example.com/reset?token=abc123",
"expiresIn": "24 hours"
}
}
Welcome Email
Welcome Email
Onboard new users with a welcome message:
{
"uid": "tmpl_welcome",
"recipient": "newuser@example.com",
"customFields": {
"firstName": "John",
"loginUrl": "https://app.example.com/login",
"supportEmail": "support@example.com"
}
}
Best Practices
Email Deliverability
To improve deliverability: - Use verified sender domains in Minimo dashboard - Avoid spam trigger words in templates -
Include unsubscribe links for marketing emails - Test with email testing tools before production
Template Design
- Keep it simple: Plain text or simple HTML works best
- Test responsiveness: Templates should work on mobile devices
- Include branding: Add your logo and brand colors
- Clear call-to-action: Make buttons and links obvious
Error Handling
Always handle potential errors:try {
const response = await fetch('https://api.minimo.it/public/v1/templates/email/send', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
uid: 'tmpl_abc123',
recipient: 'customer@example.com',
customFields: { name: 'Jane' },
}),
});
if (!response.ok) {
const error = await response.json();
console.error('Email send failed:', error);
// Log error, retry, or notify admin
}
} catch (error) {
console.error('Network error:', error);
// Handle network issues
}
Common Errors
| Error | Cause | Solution |
|---|---|---|
template_not_found | Invalid template ID | Verify template ID in dashboard |
invalid_recipient | Invalid email address | Validate email format before sending |
missing_custom_field | Template variable not provided | Include all required custom fields |
rate_limit_exceeded | Too many requests | Implement rate limiting, use queues |
sender_not_verified | Email domain not verified | Verify sender domain in dashboard |
Tracking & Analytics
After sending, track email performance:- Delivery status: Check if email was delivered
- Open rate: See who opened your emails
- Click rate: Track link clicks in your templates
- Bounce rate: Monitor bounced emails
Related Endpoints
- List Email Templates - Get all available templates
- Get Email Template Stats - View template analytics
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/jsonmultipart/form-dataapplication/x-www-form-urlencoded
Response
Successful response
Show child attributes
Show child attributes
⌘I