List purchased domains
curl --request GET \
--url https://api.reply.io/v3/email-accounts/procurement/domains \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/email-accounts/procurement/domains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/email-accounts/procurement/domains', 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/procurement/domains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/email-accounts/procurement/domains"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reply.io/v3/email-accounts/procurement/domains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-accounts/procurement/domains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"domainId": 4182,
"domainName": "outreach-hq.com",
"serviceProvider": "google",
"subscriptionStatus": "active",
"availabilityStatus": "active",
"expireOn": "2027-08-14T09:30:00Z",
"renewStatus": "nonRenewable"
},
{
"domainId": 4175,
"domainName": "outreach-hq.net",
"serviceProvider": "microsoft",
"subscriptionStatus": "provisioning",
"availabilityStatus": "pending",
"expireOn": null,
"renewStatus": "nonRenewable"
}
],
"hasMore": false
}Purchased domains
List purchased domains
Coming soon. This endpoint will be available by late October 2026.
channels:read scope (or a broader one that includes it).
Domains your team bought through mailbox procurement, newest first. Pre-warmed domains are not listed here.
Each entry carries the mail provider, the subscription and setup state, the expiry date, and whether the domain can be renewed now.
Results are paged with top and skip; top defaults to 100 and cannot exceed 1000.
GET
/
v3
/
email-accounts
/
procurement
/
domains
List purchased domains
curl --request GET \
--url https://api.reply.io/v3/email-accounts/procurement/domains \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/email-accounts/procurement/domains"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/email-accounts/procurement/domains', 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/procurement/domains",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/email-accounts/procurement/domains"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reply.io/v3/email-accounts/procurement/domains")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/email-accounts/procurement/domains")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"domainId": 4182,
"domainName": "outreach-hq.com",
"serviceProvider": "google",
"subscriptionStatus": "active",
"availabilityStatus": "active",
"expireOn": "2027-08-14T09:30:00Z",
"renewStatus": "nonRenewable"
},
{
"domainId": 4175,
"domainName": "outreach-hq.net",
"serviceProvider": "microsoft",
"subscriptionStatus": "provisioning",
"availabilityStatus": "pending",
"expireOn": null,
"renewStatus": "nonRenewable"
}
],
"hasMore": false
}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.
Query Parameters
Maximum number of items to return (default 100, max 1000)
Required range:
1 <= x <= 1000Number of items to skip (default 0)
Required range:
x >= 0