curl --request POST \
--url https://api.tagada.io/api/public/v1/subscriptions/extend-trial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionId": "sub_123",
"trialEnd": 1796135400000
}
'import requests
url = "https://api.tagada.io/api/public/v1/subscriptions/extend-trial"
payload = {
"subscriptionId": "sub_123",
"trialEnd": 1796135400000
}
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({subscriptionId: 'sub_123', trialEnd: 1796135400000})
};
fetch('https://api.tagada.io/api/public/v1/subscriptions/extend-trial', 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.tagada.io/api/public/v1/subscriptions/extend-trial",
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([
'subscriptionId' => 'sub_123',
'trialEnd' => 1796135400000
]),
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.tagada.io/api/public/v1/subscriptions/extend-trial"
payload := strings.NewReader("{\n \"subscriptionId\": \"sub_123\",\n \"trialEnd\": 1796135400000\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.tagada.io/api/public/v1/subscriptions/extend-trial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscriptionId\": \"sub_123\",\n \"trialEnd\": 1796135400000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tagada.io/api/public/v1/subscriptions/extend-trial")
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 \"subscriptionId\": \"sub_123\",\n \"trialEnd\": 1796135400000\n}"
response = http.request(request)
puts response.read_body{
"subscription": {
"id": "sub_123",
"status": "trialing",
"trialEnd": "2026-12-01T14:30:00.000Z",
"billingCycleAnchor": "2026-12-01T14:30:00.000Z",
"nextBillingDate": "2026-12-01T14:30:00.000Z"
}
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Extend a subscription trial in place
Extend a trialing subscription without charging. trialEnd is a Unix timestamp in milliseconds (number or digit string; values below 100000000000 are read as seconds, date strings refused). It must be later than the current trial end, in the future and at most 365 days after the current end. The same end is an idempotent no-op. trialEnd, billingCycleAnchor and nextBillingDate are written to that exact instant; status, trialStart and trialSettings are kept. Supports Idempotency-Key. An unknown subscription or one of another account answers 404. A non-trialing subscription (including a paused trial), or a grouped member whose dates belong to the group, answers 409. An earlier or too distant end answers 422. An open renewal charge answers 409 (RENEWAL_IN_PROGRESS); retry after it settles.
curl --request POST \
--url https://api.tagada.io/api/public/v1/subscriptions/extend-trial \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionId": "sub_123",
"trialEnd": 1796135400000
}
'import requests
url = "https://api.tagada.io/api/public/v1/subscriptions/extend-trial"
payload = {
"subscriptionId": "sub_123",
"trialEnd": 1796135400000
}
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({subscriptionId: 'sub_123', trialEnd: 1796135400000})
};
fetch('https://api.tagada.io/api/public/v1/subscriptions/extend-trial', 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.tagada.io/api/public/v1/subscriptions/extend-trial",
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([
'subscriptionId' => 'sub_123',
'trialEnd' => 1796135400000
]),
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.tagada.io/api/public/v1/subscriptions/extend-trial"
payload := strings.NewReader("{\n \"subscriptionId\": \"sub_123\",\n \"trialEnd\": 1796135400000\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.tagada.io/api/public/v1/subscriptions/extend-trial")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscriptionId\": \"sub_123\",\n \"trialEnd\": 1796135400000\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tagada.io/api/public/v1/subscriptions/extend-trial")
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 \"subscriptionId\": \"sub_123\",\n \"trialEnd\": 1796135400000\n}"
response = http.request(request)
puts response.read_body{
"subscription": {
"id": "sub_123",
"status": "trialing",
"trialEnd": "2026-12-01T14:30:00.000Z",
"billingCycleAnchor": "2026-12-01T14:30:00.000Z",
"nextBillingDate": "2026-12-01T14:30:00.000Z"
}
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Authorizations
Enter your API key as: Bearer your-api-key
Headers
Reuse the same key and body to replay the original response after a lost response.
Body
Response
Successful response
