Get user plan
curl --request GET \
--url https://app.autocalls.ai/api/white-label/users/{id}/plan \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.autocalls.ai/api/white-label/users/{id}/plan"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.autocalls.ai/api/white-label/users/{id}/plan', 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://app.autocalls.ai/api/white-label/users/{id}/plan",
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://app.autocalls.ai/api/white-label/users/{id}/plan"
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://app.autocalls.ai/api/white-label/users/{id}/plan")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.autocalls.ai/api/white-label/users/{id}/plan")
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{
"data": {
"plan_id": 6,
"name": "Agency",
"source": "manual",
"billing": "yearly",
"included_minutes": 500,
"included_credits": 900,
"minutes_renew_at": "2026-11-02T14:25:38+00:00",
"ends_at": null,
"minutes": "yearly",
"when_short": "auto_top_up",
"renewal": {
"status": "ok",
"next_at": "2026-11-02T14:25:38+00:00",
"missing_minutes": 0,
"last_renewed_at": null,
"prepaid_minutes": 5500,
"prepaid_until": "2027-10-02T14:25:38+00:00"
}
}
}
{
"data": {
"plan_id": 5,
"name": "Starter",
"source": "manual",
"billing": "monthly",
"included_minutes": 100,
"included_credits": 0,
"minutes_renew_at": "2026-10-02T14:25:38+00:00",
"ends_at": "2026-12-31T23:59:59+00:00",
"minutes": "monthly",
"when_short": "wait",
"renewal": {
"status": "pending",
"next_at": "2026-10-02T14:25:38+00:00",
"missing_minutes": 11.17,
"last_renewed_at": "2026-09-02T14:25:40+00:00",
"prepaid_minutes": null,
"prepaid_until": null
}
}
}
{
"data": {
"plan_id": 5,
"name": "Starter",
"source": "paid",
"billing": "monthly",
"included_minutes": 100,
"included_credits": 0,
"minutes_renew_at": "2026-10-30T14:25:38+00:00",
"ends_at": null,
"minutes": null,
"when_short": null,
"renewal": null
}
}
{
"data": null
}
{
"message": "Unauthenticated."
}
{
"message": "You are not an administrator."
}
{
"message": "You do not have access to these settings."
}
{
"message": "User not found."
}
{
"message": "Too Many Attempts."
}
White Label
Get user plan
Get the subscription plan of one of your users
GET
/
white-label
/
users
/
{id}
/
plan
Get user plan
curl --request GET \
--url https://app.autocalls.ai/api/white-label/users/{id}/plan \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.autocalls.ai/api/white-label/users/{id}/plan"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.autocalls.ai/api/white-label/users/{id}/plan', 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://app.autocalls.ai/api/white-label/users/{id}/plan",
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://app.autocalls.ai/api/white-label/users/{id}/plan"
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://app.autocalls.ai/api/white-label/users/{id}/plan")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.autocalls.ai/api/white-label/users/{id}/plan")
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{
"data": {
"plan_id": 6,
"name": "Agency",
"source": "manual",
"billing": "yearly",
"included_minutes": 500,
"included_credits": 900,
"minutes_renew_at": "2026-11-02T14:25:38+00:00",
"ends_at": null,
"minutes": "yearly",
"when_short": "auto_top_up",
"renewal": {
"status": "ok",
"next_at": "2026-11-02T14:25:38+00:00",
"missing_minutes": 0,
"last_renewed_at": null,
"prepaid_minutes": 5500,
"prepaid_until": "2027-10-02T14:25:38+00:00"
}
}
}
{
"data": {
"plan_id": 5,
"name": "Starter",
"source": "manual",
"billing": "monthly",
"included_minutes": 100,
"included_credits": 0,
"minutes_renew_at": "2026-10-02T14:25:38+00:00",
"ends_at": "2026-12-31T23:59:59+00:00",
"minutes": "monthly",
"when_short": "wait",
"renewal": {
"status": "pending",
"next_at": "2026-10-02T14:25:38+00:00",
"missing_minutes": 11.17,
"last_renewed_at": "2026-09-02T14:25:40+00:00",
"prepaid_minutes": null,
"prepaid_until": null
}
}
}
{
"data": {
"plan_id": 5,
"name": "Starter",
"source": "paid",
"billing": "monthly",
"included_minutes": 100,
"included_credits": 0,
"minutes_renew_at": "2026-10-30T14:25:38+00:00",
"ends_at": null,
"minutes": null,
"when_short": null,
"renewal": null
}
}
{
"data": null
}
{
"message": "Unauthenticated."
}
{
"message": "You are not an administrator."
}
{
"message": "You do not have access to these settings."
}
{
"message": "User not found."
}
{
"message": "Too Many Attempts."
}
This endpoint returns the subscription plan of one of your users: a plan you gave them with Update user plan, or one they subscribed to on your platform.
data is null when the user has no plan.
This endpoint is available to the account owner (with an active plan) and to team members with Billing Access. Other users receive a 403 Forbidden error. Only users of your platform can be read: any other ID, including the owner account, returns 404.
Path Parameters
integer
required
The ID of the user. Administrators can list user IDs with Get platform users.
Response
object | null
The user’s plan, or
null when they have noneShow data properties
Show data properties
integer
The plan’s ID, as in List plans
string
The plan’s name
string
manual when you gave the plan, trial for a trial the user started on your platform, or paid for a subscription the user pays on your platform. Only manual plans can be changed or removed through the APIstring
monthly or yearlynumber
The minutes included in the plan every month
integer
The chat credits included in the plan every month
string | null
When the user’s plan minutes are renewed next, in ISO 8601
string | null
When the plan ends, in ISO 8601, or
null when it has no end datestring | null
For plans you gave:
none, monthly or yearly, as set with Update user plan. null for plans the user subscribed to on your platformstring | null
For plans you gave:
auto_top_up or wait, what happens when the owner’s balance cannot cover a renewal. null for plans the user subscribed to on your platformobject | null
For plans you gave, the state of the monthly renewal.
null for plans the user subscribed to on your platformShow renewal properties
Show renewal properties
string
ok when the next renewal is planned, pending when its day has come and the owner’s balance could not cover it yet, or none for plans without minutes and for plans that end before their next renewalstring | null
The day of the next renewal, or of the pending one, in ISO 8601
number
While
pending, how many minutes the owner’s balance is missing; 0 means the renewal runs within the hour. Always 0 otherwisestring | null
When the plan was last renewed, in ISO 8601, or
null before its first renewalnumber | null
For yearly minutes, the plan minutes still prepaid for the coming months.
null otherwisestring | null
For yearly minutes, when the prepaid 12 months end, in ISO 8601.
null otherwise{
"data": {
"plan_id": 6,
"name": "Agency",
"source": "manual",
"billing": "yearly",
"included_minutes": 500,
"included_credits": 900,
"minutes_renew_at": "2026-11-02T14:25:38+00:00",
"ends_at": null,
"minutes": "yearly",
"when_short": "auto_top_up",
"renewal": {
"status": "ok",
"next_at": "2026-11-02T14:25:38+00:00",
"missing_minutes": 0,
"last_renewed_at": null,
"prepaid_minutes": 5500,
"prepaid_until": "2027-10-02T14:25:38+00:00"
}
}
}
{
"data": {
"plan_id": 5,
"name": "Starter",
"source": "manual",
"billing": "monthly",
"included_minutes": 100,
"included_credits": 0,
"minutes_renew_at": "2026-10-02T14:25:38+00:00",
"ends_at": "2026-12-31T23:59:59+00:00",
"minutes": "monthly",
"when_short": "wait",
"renewal": {
"status": "pending",
"next_at": "2026-10-02T14:25:38+00:00",
"missing_minutes": 11.17,
"last_renewed_at": "2026-09-02T14:25:40+00:00",
"prepaid_minutes": null,
"prepaid_until": null
}
}
}
{
"data": {
"plan_id": 5,
"name": "Starter",
"source": "paid",
"billing": "monthly",
"included_minutes": 100,
"included_credits": 0,
"minutes_renew_at": "2026-10-30T14:25:38+00:00",
"ends_at": null,
"minutes": null,
"when_short": null,
"renewal": null
}
}
{
"data": null
}
{
"message": "Unauthenticated."
}
{
"message": "You are not an administrator."
}
{
"message": "You do not have access to these settings."
}
{
"message": "User not found."
}
{
"message": "Too Many Attempts."
}
Rate limit
The platform settings, default limits, user settings and plan endpoints share a limit of 60 requests per minute for each account. Above it they return429, and the Retry-After response header tells you how many seconds to wait.
Example
curl -X GET https://app.autocalls.ai/api/white-label/users/123/plan \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Accept: application/json"

