curl --request POST \
--url https://api.reply.io/v3/email-accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"connection": {
"email": "sales@company.com",
"senderName": "Sales Team",
"smtpHost": "smtp.company.com",
"smtpPort": 465,
"smtpPassword": "secret123",
"smtpSsl": true,
"imapHost": "imap.company.com",
"imapPort": 993,
"imapPassword": "secret123",
"imapSsl": true
},
"safety": {
"dailyLimit": 500
},
"signature": {
"signature": "Best regards,\nSales Team"
},
"optOut": {
"isOptOutLinkEnabled": true,
"optOutTextBlock": "Unsubscribe here"
},
"rampUp": {
"enabled": false,
"startValue": 10,
"incrementValue": 5
},
"tags": [
"Outbound"
]
}
'import requests
url = "https://api.reply.io/v3/email-accounts"
payload = {
"connection": {
"email": "sales@company.com",
"senderName": "Sales Team",
"smtpHost": "smtp.company.com",
"smtpPort": 465,
"smtpPassword": "secret123",
"smtpSsl": True,
"imapHost": "imap.company.com",
"imapPort": 993,
"imapPassword": "secret123",
"imapSsl": True
},
"safety": { "dailyLimit": 500 },
"signature": { "signature": "Best regards,
Sales Team" },
"optOut": {
"isOptOutLinkEnabled": True,
"optOutTextBlock": "Unsubscribe here"
},
"rampUp": {
"enabled": False,
"startValue": 10,
"incrementValue": 5
},
"tags": ["Outbound"]
}
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({
connection: {
email: 'sales@company.com',
senderName: 'Sales Team',
smtpHost: 'smtp.company.com',
smtpPort: 465,
smtpPassword: 'secret123',
smtpSsl: true,
imapHost: 'imap.company.com',
imapPort: 993,
imapPassword: 'secret123',
imapSsl: true
},
safety: {dailyLimit: 500},
signature: {signature: 'Best regards,\nSales Team'},
optOut: {isOptOutLinkEnabled: true, optOutTextBlock: 'Unsubscribe here'},
rampUp: {enabled: false, startValue: 10, incrementValue: 5},
tags: ['Outbound']
})
};
fetch('https://api.reply.io/v3/email-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.reply.io/v3/email-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'connection' => [
'email' => 'sales@company.com',
'senderName' => 'Sales Team',
'smtpHost' => 'smtp.company.com',
'smtpPort' => 465,
'smtpPassword' => 'secret123',
'smtpSsl' => true,
'imapHost' => 'imap.company.com',
'imapPort' => 993,
'imapPassword' => 'secret123',
'imapSsl' => true
],
'safety' => [
'dailyLimit' => 500
],
'signature' => [
'signature' => 'Best regards,
Sales Team'
],
'optOut' => [
'isOptOutLinkEnabled' => true,
'optOutTextBlock' => 'Unsubscribe here'
],
'rampUp' => [
'enabled' => false,
'startValue' => 10,
'incrementValue' => 5
],
'tags' => [
'Outbound'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/email-accounts"
payload := strings.NewReader("{\n \"connection\": {\n \"email\": \"sales@company.com\",\n \"senderName\": \"Sales Team\",\n \"smtpHost\": \"smtp.company.com\",\n \"smtpPort\": 465,\n \"smtpPassword\": \"secret123\",\n \"smtpSsl\": true,\n \"imapHost\": \"imap.company.com\",\n \"imapPort\": 993,\n \"imapPassword\": \"secret123\",\n \"imapSsl\": true\n },\n \"safety\": {\n \"dailyLimit\": 500\n },\n \"signature\": {\n \"signature\": \"Best regards,\\nSales Team\"\n },\n \"optOut\": {\n \"isOptOutLinkEnabled\": true,\n \"optOutTextBlock\": \"Unsubscribe here\"\n },\n \"rampUp\": {\n \"enabled\": false,\n \"startValue\": 10,\n \"incrementValue\": 5\n },\n \"tags\": [\n \"Outbound\"\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))
}HttpResponse<String> response = Unirest.post("https://api.reply.io/v3/email-accounts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"connection\": {\n \"email\": \"sales@company.com\",\n \"senderName\": \"Sales Team\",\n \"smtpHost\": \"smtp.company.com\",\n \"smtpPort\": 465,\n \"smtpPassword\": \"secret123\",\n \"smtpSsl\": true,\n \"imapHost\": \"imap.company.com\",\n \"imapPort\": 993,\n \"imapPassword\": \"secret123\",\n \"imapSsl\": true\n },\n \"safety\": {\n \"dailyLimit\": 500\n },\n \"signature\": {\n \"signature\": \"Best regards,\\nSales Team\"\n },\n \"optOut\": {\n \"isOptOutLinkEnabled\": true,\n \"optOutTextBlock\": \"Unsubscribe here\"\n },\n \"rampUp\": {\n \"enabled\": false,\n \"startValue\": 10,\n \"incrementValue\": 5\n },\n \"tags\": [\n \"Outbound\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-accounts")
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 \"connection\": {\n \"email\": \"sales@company.com\",\n \"senderName\": \"Sales Team\",\n \"smtpHost\": \"smtp.company.com\",\n \"smtpPort\": 465,\n \"smtpPassword\": \"secret123\",\n \"smtpSsl\": true,\n \"imapHost\": \"imap.company.com\",\n \"imapPort\": 993,\n \"imapPassword\": \"secret123\",\n \"imapSsl\": true\n },\n \"safety\": {\n \"dailyLimit\": 500\n },\n \"signature\": {\n \"signature\": \"Best regards,\\nSales Team\"\n },\n \"optOut\": {\n \"isOptOutLinkEnabled\": true,\n \"optOutTextBlock\": \"Unsubscribe here\"\n },\n \"rampUp\": {\n \"enabled\": false,\n \"startValue\": 10,\n \"incrementValue\": 5\n },\n \"tags\": [\n \"Outbound\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 12345,
"ownerUserId": 42,
"emailAccountType": "custom",
"isDefault": false,
"isInUse": true,
"connectionStatus": "connected",
"sendingConnectivityError": null,
"receivingConnectivityError": null,
"sendingLockedByProvider": false,
"updatedAt": "2026-03-15T10:30:00Z",
"connection": {
"email": "john.doe@company.com",
"senderName": "John Doe",
"smtpHost": "smtp.company.com",
"smtpPort": 465,
"smtpSsl": true,
"imapHost": "imap.company.com",
"imapPort": 993,
"imapSsl": true
},
"safety": {
"dailyLimit": 500,
"isEmailsThrottlingEnabled": true,
"emailsPerInterval": 5,
"emailsThrottlingSecondsInterval": 60,
"isSendingDelayEnabled": true,
"maxSendingDelaySeconds": 120,
"minSendingDelaySeconds": 30
},
"signature": {
"signature": "Best regards,\nJohn Doe"
},
"optOut": {
"message": "Unsubscribe",
"emailFooter": "",
"isOptOutLinkEnabled": true,
"optOutTextBlock": "Click here to unsubscribe"
},
"rampUp": {
"enabled": false,
"startValue": 10,
"incrementValue": 5
},
"tags": [
"Marketing"
]
}Create an email account
channels:write scope (or a broader one that includes it).
Connect a custom SMTP or IMAP mailbox. Gmail and Office 365 use their own OAuth connect endpoints instead.
curl --request POST \
--url https://api.reply.io/v3/email-accounts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"connection": {
"email": "sales@company.com",
"senderName": "Sales Team",
"smtpHost": "smtp.company.com",
"smtpPort": 465,
"smtpPassword": "secret123",
"smtpSsl": true,
"imapHost": "imap.company.com",
"imapPort": 993,
"imapPassword": "secret123",
"imapSsl": true
},
"safety": {
"dailyLimit": 500
},
"signature": {
"signature": "Best regards,\nSales Team"
},
"optOut": {
"isOptOutLinkEnabled": true,
"optOutTextBlock": "Unsubscribe here"
},
"rampUp": {
"enabled": false,
"startValue": 10,
"incrementValue": 5
},
"tags": [
"Outbound"
]
}
'import requests
url = "https://api.reply.io/v3/email-accounts"
payload = {
"connection": {
"email": "sales@company.com",
"senderName": "Sales Team",
"smtpHost": "smtp.company.com",
"smtpPort": 465,
"smtpPassword": "secret123",
"smtpSsl": True,
"imapHost": "imap.company.com",
"imapPort": 993,
"imapPassword": "secret123",
"imapSsl": True
},
"safety": { "dailyLimit": 500 },
"signature": { "signature": "Best regards,
Sales Team" },
"optOut": {
"isOptOutLinkEnabled": True,
"optOutTextBlock": "Unsubscribe here"
},
"rampUp": {
"enabled": False,
"startValue": 10,
"incrementValue": 5
},
"tags": ["Outbound"]
}
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({
connection: {
email: 'sales@company.com',
senderName: 'Sales Team',
smtpHost: 'smtp.company.com',
smtpPort: 465,
smtpPassword: 'secret123',
smtpSsl: true,
imapHost: 'imap.company.com',
imapPort: 993,
imapPassword: 'secret123',
imapSsl: true
},
safety: {dailyLimit: 500},
signature: {signature: 'Best regards,\nSales Team'},
optOut: {isOptOutLinkEnabled: true, optOutTextBlock: 'Unsubscribe here'},
rampUp: {enabled: false, startValue: 10, incrementValue: 5},
tags: ['Outbound']
})
};
fetch('https://api.reply.io/v3/email-accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.reply.io/v3/email-accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'connection' => [
'email' => 'sales@company.com',
'senderName' => 'Sales Team',
'smtpHost' => 'smtp.company.com',
'smtpPort' => 465,
'smtpPassword' => 'secret123',
'smtpSsl' => true,
'imapHost' => 'imap.company.com',
'imapPort' => 993,
'imapPassword' => 'secret123',
'imapSsl' => true
],
'safety' => [
'dailyLimit' => 500
],
'signature' => [
'signature' => 'Best regards,
Sales Team'
],
'optOut' => [
'isOptOutLinkEnabled' => true,
'optOutTextBlock' => 'Unsubscribe here'
],
'rampUp' => [
'enabled' => false,
'startValue' => 10,
'incrementValue' => 5
],
'tags' => [
'Outbound'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/email-accounts"
payload := strings.NewReader("{\n \"connection\": {\n \"email\": \"sales@company.com\",\n \"senderName\": \"Sales Team\",\n \"smtpHost\": \"smtp.company.com\",\n \"smtpPort\": 465,\n \"smtpPassword\": \"secret123\",\n \"smtpSsl\": true,\n \"imapHost\": \"imap.company.com\",\n \"imapPort\": 993,\n \"imapPassword\": \"secret123\",\n \"imapSsl\": true\n },\n \"safety\": {\n \"dailyLimit\": 500\n },\n \"signature\": {\n \"signature\": \"Best regards,\\nSales Team\"\n },\n \"optOut\": {\n \"isOptOutLinkEnabled\": true,\n \"optOutTextBlock\": \"Unsubscribe here\"\n },\n \"rampUp\": {\n \"enabled\": false,\n \"startValue\": 10,\n \"incrementValue\": 5\n },\n \"tags\": [\n \"Outbound\"\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))
}HttpResponse<String> response = Unirest.post("https://api.reply.io/v3/email-accounts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"connection\": {\n \"email\": \"sales@company.com\",\n \"senderName\": \"Sales Team\",\n \"smtpHost\": \"smtp.company.com\",\n \"smtpPort\": 465,\n \"smtpPassword\": \"secret123\",\n \"smtpSsl\": true,\n \"imapHost\": \"imap.company.com\",\n \"imapPort\": 993,\n \"imapPassword\": \"secret123\",\n \"imapSsl\": true\n },\n \"safety\": {\n \"dailyLimit\": 500\n },\n \"signature\": {\n \"signature\": \"Best regards,\\nSales Team\"\n },\n \"optOut\": {\n \"isOptOutLinkEnabled\": true,\n \"optOutTextBlock\": \"Unsubscribe here\"\n },\n \"rampUp\": {\n \"enabled\": false,\n \"startValue\": 10,\n \"incrementValue\": 5\n },\n \"tags\": [\n \"Outbound\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-accounts")
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 \"connection\": {\n \"email\": \"sales@company.com\",\n \"senderName\": \"Sales Team\",\n \"smtpHost\": \"smtp.company.com\",\n \"smtpPort\": 465,\n \"smtpPassword\": \"secret123\",\n \"smtpSsl\": true,\n \"imapHost\": \"imap.company.com\",\n \"imapPort\": 993,\n \"imapPassword\": \"secret123\",\n \"imapSsl\": true\n },\n \"safety\": {\n \"dailyLimit\": 500\n },\n \"signature\": {\n \"signature\": \"Best regards,\\nSales Team\"\n },\n \"optOut\": {\n \"isOptOutLinkEnabled\": true,\n \"optOutTextBlock\": \"Unsubscribe here\"\n },\n \"rampUp\": {\n \"enabled\": false,\n \"startValue\": 10,\n \"incrementValue\": 5\n },\n \"tags\": [\n \"Outbound\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 12345,
"ownerUserId": 42,
"emailAccountType": "custom",
"isDefault": false,
"isInUse": true,
"connectionStatus": "connected",
"sendingConnectivityError": null,
"receivingConnectivityError": null,
"sendingLockedByProvider": false,
"updatedAt": "2026-03-15T10:30:00Z",
"connection": {
"email": "john.doe@company.com",
"senderName": "John Doe",
"smtpHost": "smtp.company.com",
"smtpPort": 465,
"smtpSsl": true,
"imapHost": "imap.company.com",
"imapPort": 993,
"imapSsl": true
},
"safety": {
"dailyLimit": 500,
"isEmailsThrottlingEnabled": true,
"emailsPerInterval": 5,
"emailsThrottlingSecondsInterval": 60,
"isSendingDelayEnabled": true,
"maxSendingDelaySeconds": 120,
"minSendingDelaySeconds": 30
},
"signature": {
"signature": "Best regards,\nJohn Doe"
},
"optOut": {
"message": "Unsubscribe",
"emailFooter": "",
"isOptOutLinkEnabled": true,
"optOutTextBlock": "Click here to unsubscribe"
},
"rampUp": {
"enabled": false,
"startValue": 10,
"incrementValue": 5
},
"tags": [
"Marketing"
]
}Authorizations
Authenticate every request with a Bearer token. Pass your Reply API key in the
Authorization header:
Authorization: Bearer <your-api-key>
Get your API key from the Reply dashboard: Settings → API Key.
Body
Request body for creating a new custom email account (SMTP/IMAP).
SMTP and IMAP connection settings for a custom email account. Only applicable to Custom provider type.
Show child attributes
Show child attributes
Sending safety and throttling configuration.
Show child attributes
Show child attributes
Email signature configuration.
Show child attributes
Show child attributes
Opt-out / unsubscribe link configuration.
Show child attributes
Show child attributes
Sending volume ramp-up configuration for warming up email accounts.
Show child attributes
Show child attributes
Tag names to assign to the new email account
Response
Email account created successfully
Full detailed representation of an email account, including all configuration sections.
Unique identifier for the email account
ID of the user who owns this email account
Provider type of the email account. Values: custom, gmail, outlook, exchange, exchangeOnPremise
custom, gmail, outlook, exchange, exchangeOnPremise Whether this is the user's default email account
Whether this email account is currently used in any active sequence
Current connection status of the email account. Values: unknown, connected, disconnected
unknown, connected, disconnected Error details if SMTP sending connectivity has failed
Error details if IMAP receiving connectivity has failed
Whether the email provider has locked outbound sending
Timestamp of the last update to this email account
Connection settings returned in responses (passwords excluded).
Show child attributes
Show child attributes
Sending safety and throttling configuration.
Show child attributes
Show child attributes
Email signature configuration.
Show child attributes
Show child attributes
Opt-out / unsubscribe link configuration.
Show child attributes
Show child attributes
Sending volume ramp-up configuration for warming up email accounts.
Show child attributes
Show child attributes
Tag names associated with this email account