curl --request GET \
--url https://api.reply.io/v3/billing \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/billing"
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/billing', 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/billing",
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/billing"
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/billing")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/billing")
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{
"generatedAt": "2023-11-07T05:31:56Z",
"timeZone": "<string>",
"billingScope": "team",
"subscription": {
"planName": "<string>",
"planType": "<string>",
"billingPeriod": "unknown",
"planState": "trial",
"subscriptionState": "none",
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z",
"nextBillingDate": "2023-11-07T05:31:56Z"
},
"activeContacts": {
"organization": {
"billingMonthStart": "2023-11-07T05:31:56Z",
"billingMonthEnd": "2023-11-07T05:31:56Z",
"poolType": "shared",
"aiSdrContactsIncluded": true,
"computedAt": "2023-11-07T05:31:56Z",
"used": 123,
"daily": [
{
"date": "2023-11-07T05:31:56Z",
"used": 123,
"cumulativeUsed": 123,
"remaining": 123,
"teams": [
{
"teamId": 123,
"teamName": "<string>",
"used": 123
}
]
}
],
"available": 123,
"remaining": 123
},
"teams": [
{
"teamId": 123,
"teamName": "<string>",
"subscription": {
"planName": "<string>",
"planType": "<string>",
"billingPeriod": "unknown",
"planState": "trial",
"subscriptionState": "none",
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z",
"nextBillingDate": "2023-11-07T05:31:56Z"
},
"usage": {
"billingMonthStart": "2023-11-07T05:31:56Z",
"billingMonthEnd": "2023-11-07T05:31:56Z",
"poolType": "shared",
"aiSdrContactsIncluded": true,
"computedAt": "2023-11-07T05:31:56Z",
"used": 123,
"daily": [
{
"date": "2023-11-07T05:31:56Z",
"used": 123,
"cumulativeUsed": 123,
"remaining": 123,
"teams": [
{
"teamId": 123,
"teamName": "<string>",
"used": 123
}
]
}
],
"available": 123,
"remaining": 123
}
}
]
}
}Get billing details
Coming soon. This endpoint will be available by early October 2026.
billing:read scope (or a broader one that includes it).
See the plan you are on and how many active contacts the current billing month has consumed, day by day. A
contact counts once per pool per month, on the day it is first touched. The activeContacts section follows
billingScope: under organization it holds one pool shared by every team, with each day split across the
teams you belong to; under team it holds one entry per team you can see, each with its own subscription
and pool. Available to the organization owner, who sees every team, and to users with the Plans and Billing
permission, who see the teams they belong to.
curl --request GET \
--url https://api.reply.io/v3/billing \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/billing"
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/billing', 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/billing",
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/billing"
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/billing")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/billing")
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{
"generatedAt": "2023-11-07T05:31:56Z",
"timeZone": "<string>",
"billingScope": "team",
"subscription": {
"planName": "<string>",
"planType": "<string>",
"billingPeriod": "unknown",
"planState": "trial",
"subscriptionState": "none",
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z",
"nextBillingDate": "2023-11-07T05:31:56Z"
},
"activeContacts": {
"organization": {
"billingMonthStart": "2023-11-07T05:31:56Z",
"billingMonthEnd": "2023-11-07T05:31:56Z",
"poolType": "shared",
"aiSdrContactsIncluded": true,
"computedAt": "2023-11-07T05:31:56Z",
"used": 123,
"daily": [
{
"date": "2023-11-07T05:31:56Z",
"used": 123,
"cumulativeUsed": 123,
"remaining": 123,
"teams": [
{
"teamId": 123,
"teamName": "<string>",
"used": 123
}
]
}
],
"available": 123,
"remaining": 123
},
"teams": [
{
"teamId": 123,
"teamName": "<string>",
"subscription": {
"planName": "<string>",
"planType": "<string>",
"billingPeriod": "unknown",
"planState": "trial",
"subscriptionState": "none",
"startDate": "2023-11-07T05:31:56Z",
"endDate": "2023-11-07T05:31:56Z",
"nextBillingDate": "2023-11-07T05:31:56Z"
},
"usage": {
"billingMonthStart": "2023-11-07T05:31:56Z",
"billingMonthEnd": "2023-11-07T05:31:56Z",
"poolType": "shared",
"aiSdrContactsIncluded": true,
"computedAt": "2023-11-07T05:31:56Z",
"used": 123,
"daily": [
{
"date": "2023-11-07T05:31:56Z",
"used": 123,
"cumulativeUsed": 123,
"remaining": 123,
"teams": [
{
"teamId": 123,
"teamName": "<string>",
"used": 123
}
]
}
],
"available": 123,
"remaining": 123
}
}
]
}
}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.
Response
Billing details retrieved successfully
The current subscription and the active contacts consumed so far this billing month.
When this response was produced.
The timezone every date in this response is expressed in. Always UTC.
Whether billing is settled for a whole organization or for each team on its own. organization means every
team draws on one subscription and one shared pool of active contacts. team means each team carries its own
subscription and its own pool.
team, organization The subscription the figures are billed against. Under organization scope this is the subscription held by
the organization owner's team; under team scope it is your own team's.
Show child attributes
Show child attributes
Active contacts usage, shaped by billingScope. Exactly one of the two properties carries data: organization
when the scope is organization, teams when it is team. The other is null.
Show child attributes
Show child attributes