curl --request POST \
--url https://app.sendmux.ai/api/v1/providers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Transactional SMTP",
"smtp_host": "smtp.example.com",
"smtp_password": "smtp-password",
"smtp_port": 587,
"smtp_protocol": "starttls",
"smtp_username": "api-user"
}
'import requests
url = "https://app.sendmux.ai/api/v1/providers"
payload = {
"name": "Transactional SMTP",
"smtp_host": "smtp.example.com",
"smtp_password": "smtp-password",
"smtp_port": 587,
"smtp_protocol": "starttls",
"smtp_username": "api-user"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Transactional SMTP',
smtp_host: 'smtp.example.com',
smtp_password: 'smtp-password',
smtp_port: 587,
smtp_protocol: 'starttls',
smtp_username: 'api-user'
})
};
fetch('https://app.sendmux.ai/api/v1/providers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.sendmux.ai/api/v1/providers"
payload := strings.NewReader("{\n \"name\": \"Transactional SMTP\",\n \"smtp_host\": \"smtp.example.com\",\n \"smtp_password\": \"smtp-password\",\n \"smtp_port\": 587,\n \"smtp_protocol\": \"starttls\",\n \"smtp_username\": \"api-user\"\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))
}{
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": true,
"data": {
"allowed_actions": {
"activate": true,
"deactivate": true,
"delete": true,
"test": true,
"update": true
},
"created_at": "2026-05-25T02:18:00Z",
"from_email": "<string>",
"from_name": "<string>",
"has_refresh_token": true,
"has_smtp_password": true,
"id": "dprov_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"is_active": true,
"is_editable": true,
"is_shared": true,
"last_tested_at": "<string>",
"last_used_at": "<string>",
"name": "Transactional SMTP",
"oauth_email": "<string>",
"percentage": 100,
"quotas": {
"per_day": {
"max": 60,
"min": 60
},
"per_hour": {
"max": 60,
"min": 60
},
"per_minute": {
"max": 60,
"min": 60
},
"per_second": {
"max": 60,
"min": 60
}
},
"reply_to_email": "<string>",
"reply_to_name": "<string>",
"smtp_host": "<string>",
"smtp_port": 123,
"smtp_protocol": "<string>",
"smtp_username": "<string>",
"status": "active",
"status_reason": "<string>",
"tracking_domain": "<string>",
"type": "smtp",
"updated_at": "2026-05-25T02:18:00Z"
}
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}Create an SMTP sending account
Creates a custom SMTP sending account. Supply an Idempotency-Key header to safely retry on network errors. The SMTP password is stored securely and is never returned.
curl --request POST \
--url https://app.sendmux.ai/api/v1/providers \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Transactional SMTP",
"smtp_host": "smtp.example.com",
"smtp_password": "smtp-password",
"smtp_port": 587,
"smtp_protocol": "starttls",
"smtp_username": "api-user"
}
'import requests
url = "https://app.sendmux.ai/api/v1/providers"
payload = {
"name": "Transactional SMTP",
"smtp_host": "smtp.example.com",
"smtp_password": "smtp-password",
"smtp_port": 587,
"smtp_protocol": "starttls",
"smtp_username": "api-user"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Transactional SMTP',
smtp_host: 'smtp.example.com',
smtp_password: 'smtp-password',
smtp_port: 587,
smtp_protocol: 'starttls',
smtp_username: 'api-user'
})
};
fetch('https://app.sendmux.ai/api/v1/providers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.sendmux.ai/api/v1/providers"
payload := strings.NewReader("{\n \"name\": \"Transactional SMTP\",\n \"smtp_host\": \"smtp.example.com\",\n \"smtp_password\": \"smtp-password\",\n \"smtp_port\": 587,\n \"smtp_protocol\": \"starttls\",\n \"smtp_username\": \"api-user\"\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))
}{
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": true,
"data": {
"allowed_actions": {
"activate": true,
"deactivate": true,
"delete": true,
"test": true,
"update": true
},
"created_at": "2026-05-25T02:18:00Z",
"from_email": "<string>",
"from_name": "<string>",
"has_refresh_token": true,
"has_smtp_password": true,
"id": "dprov_clxxxxxxxxxxxxxxxxxxxxxxxxx",
"is_active": true,
"is_editable": true,
"is_shared": true,
"last_tested_at": "<string>",
"last_used_at": "<string>",
"name": "Transactional SMTP",
"oauth_email": "<string>",
"percentage": 100,
"quotas": {
"per_day": {
"max": 60,
"min": 60
},
"per_hour": {
"max": 60,
"min": 60
},
"per_minute": {
"max": 60,
"min": 60
},
"per_second": {
"max": 60,
"min": 60
}
},
"reply_to_email": "<string>",
"reply_to_name": "<string>",
"smtp_host": "<string>",
"smtp_port": 123,
"smtp_protocol": "<string>",
"smtp_username": "<string>",
"status": "active",
"status_reason": "<string>",
"tracking_domain": "<string>",
"type": "smtp",
"updated_at": "2026-05-25T02:18:00Z"
}
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}{
"error": {
"code": "invalid_parameter",
"message": "<string>",
"retryable": false,
"doc_url": "<string>",
"errors": [
{
"code": "invalid_string",
"field": "recipient.email",
"message": "<string>"
}
],
"param": "<string>"
},
"meta": {
"request_id": "req_clxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"ok": false
}Authorizations
Sendmux API key. Use a root API key for Management API routes, or a mailbox credential for Mailbox API routes. Obtain keys from the dashboard under API Keys.
Headers
Client-chosen unique key to safely retry the request. Cached for 24h per (team, endpoint, key). Different body with same key returns 409 idempotency_conflict.
255"providers-create-20260525-001"
Body
1 - 255"Transactional SMTP"
1 - 255"smtp.example.com"
1 - 500"smtp-password"
1 <= x <= 65535587
tls, ssl, none, starttls "starttls"
1 - 255"api-user"
255"sender@example.com"
255"Acme"
0 <= x <= 100100
Hide child attributes
Hide child attributes
Quota value. Use a number for a fixed cap, a min/max range, or null to clear on PATCH.
x > 0Quota value. Use a number for a fixed cap, a min/max range, or null to clear on PATCH.
x > 0Quota value. Use a number for a fixed cap, a min/max range, or null to clear on PATCH.
x > 0Quota value. Use a number for a fixed cap, a min/max range, or null to clear on PATCH.
x > 0255"support@example.com"
255"Support"
255"click.example.com"
Response
Sending account created
true Hide child attributes
Hide child attributes
ISO 8601 creation timestamp
"2026-05-25T02:18:00Z"
Default From email address.
Default From display name.
Whether an OAuth account has an active connection token.
Whether a custom SMTP password is stored.
Sending account public ID
"dprov_clxxxxxxxxxxxxxxxxxxxxxxxxx"
Whether this account is enabled for sending.
False when the account is platform-managed.
True for the team's shared Amazon SES account.
Last connection test timestamp.
Last send timestamp.
Display name
"Transactional SMTP"
Connected account email for OAuth accounts.
Routing weight percentage.
100
Hide child attributes
Hide child attributes
Default Reply-To email address.
Default Reply-To display name.
SMTP host for custom SMTP accounts.
SMTP port for custom SMTP accounts.
SMTP security mode.
SMTP username for custom SMTP accounts.
Current sending account status.
active, inactive, error, pending "active"
Public-safe reason for the current status.
Custom tracking hostname.
Sending account type. amazon_ses is the shared managed account.
smtp, gmail_api, outlook_api, amazon_ses "smtp"
ISO 8601 last update timestamp
"2026-05-25T02:18:00Z"
Was this page helpful?