curl --request POST \
--url https://api.tagada.io/api/public/v1/subscriptions/change-price \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionId": "sub_123",
"priceId": "price_annual"
}
'import requests
url = "https://api.tagada.io/api/public/v1/subscriptions/change-price"
payload = {
"subscriptionId": "sub_123",
"priceId": "price_annual"
}
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', priceId: 'price_annual'})
};
fetch('https://api.tagada.io/api/public/v1/subscriptions/change-price', 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/change-price",
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',
'priceId' => 'price_annual'
]),
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/change-price"
payload := strings.NewReader("{\n \"subscriptionId\": \"sub_123\",\n \"priceId\": \"price_annual\"\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/change-price")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscriptionId\": \"sub_123\",\n \"priceId\": \"price_annual\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tagada.io/api/public/v1/subscriptions/change-price")
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 \"priceId\": \"price_annual\"\n}"
response = http.request(request)
puts response.read_body{
"subscription": {
"id": "sub_123",
"productId": "prod_annual",
"priceId": "price_annual",
"nextBillingDate": "2026-12-01T10:30:00.000Z"
}
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Change subscription price in place
Move a subscription to a recurring price of the same store, including another product. The next billing date is kept; that rebill uses the new amount and subsequent dates follow the new interval. When cadence changes, the cycle anchor moves to that kept date so the following charge is one full new interval later. No proration or charge occurs now. The current price is an idempotent no-op. Supports Idempotency-Key. An unknown subscription or one of another account, or a price outside its store, answers 404. A non-recurring price, missing interval or non-positive amount in the subscription currency answers 422. Canceled or grouped subscriptions answer 409: the group owns its members’ price and dates. 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/change-price \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionId": "sub_123",
"priceId": "price_annual"
}
'import requests
url = "https://api.tagada.io/api/public/v1/subscriptions/change-price"
payload = {
"subscriptionId": "sub_123",
"priceId": "price_annual"
}
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', priceId: 'price_annual'})
};
fetch('https://api.tagada.io/api/public/v1/subscriptions/change-price', 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/change-price",
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',
'priceId' => 'price_annual'
]),
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/change-price"
payload := strings.NewReader("{\n \"subscriptionId\": \"sub_123\",\n \"priceId\": \"price_annual\"\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/change-price")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscriptionId\": \"sub_123\",\n \"priceId\": \"price_annual\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tagada.io/api/public/v1/subscriptions/change-price")
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 \"priceId\": \"price_annual\"\n}"
response = http.request(request)
puts response.read_body{
"subscription": {
"id": "sub_123",
"productId": "prod_annual",
"priceId": "price_annual",
"nextBillingDate": "2026-12-01T10: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
