curl --request POST \
--url https://uat-api.clinkbill.com/api/subscription/{id}/update/preview \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"priceId": "price_xxxx",
"quantity": 1,
"promotionCode": "SUMMER25"
}
'HttpResponse<String> response = Unirest.post("https://uat-api.clinkbill.com/api/subscription/{id}/update/preview")
.header("X-Timestamp", "<x-timestamp>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"priceId\": \"price_xxxx\",\n \"quantity\": 1,\n \"promotionCode\": \"SUMMER25\"\n}")
.asString();import requests
url = "https://uat-api.clinkbill.com/api/subscription/{id}/update/preview"
payload = {
"priceId": "price_xxxx",
"quantity": 1,
"promotionCode": "SUMMER25"
}
headers = {
"X-Timestamp": "<x-timestamp>",
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Timestamp': '<x-timestamp>',
'X-API-KEY': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({priceId: 'price_xxxx', quantity: 1, promotionCode: 'SUMMER25'})
};
fetch('https://uat-api.clinkbill.com/api/subscription/{id}/update/preview', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"code": 200,
"msg": "success",
"data": {
"subscriptionId": "<string>",
"immediate": true,
"recurringPrice": {
"periodStart": 123,
"periodEnd": 123,
"priceId": "<string>",
"priceSnapshotId": "<string>",
"productId": "<string>",
"productName": "<string>",
"totalAmount": 123,
"unitAmount": 123,
"currencySymbol": "<string>",
"currency": "USD",
"quantity": 123,
"interval": "day",
"recurring": "<string>"
},
"lines": {
"proratedCredit": {
"productName": "<string>",
"totalAmount": 123,
"currencySymbol": "<string>",
"currency": "USD",
"quantity": 123
},
"proratedCharge": {
"productName": "<string>",
"totalAmount": 123,
"currencySymbol": "<string>",
"currency": "USD",
"quantity": 123
},
"periodStart": 123,
"periodEnd": 123,
"subtotalAmount": 123,
"taxAmount": 123,
"taxRate": 123,
"taxName": "<string>",
"totalAmount": 123,
"currencySymbol": "<string>",
"currency": "USD"
},
"discountObject": {
"couponId": "<string>",
"couponName": "<string>",
"couponTerms": "<string>",
"promotionCode": "<string>",
"discountAmount": 123,
"durationType": "<string>",
"durationMonths": 123,
"couponUsedTimes": 123
}
}
}"<string>"预览订阅升降级
Preview a subscription upgrade or downgrade before confirming it. The target price must be a recurring price owned by the current merchant and must support the subscription payment currency.
curl --request POST \
--url https://uat-api.clinkbill.com/api/subscription/{id}/update/preview \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"priceId": "price_xxxx",
"quantity": 1,
"promotionCode": "SUMMER25"
}
'HttpResponse<String> response = Unirest.post("https://uat-api.clinkbill.com/api/subscription/{id}/update/preview")
.header("X-Timestamp", "<x-timestamp>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"priceId\": \"price_xxxx\",\n \"quantity\": 1,\n \"promotionCode\": \"SUMMER25\"\n}")
.asString();import requests
url = "https://uat-api.clinkbill.com/api/subscription/{id}/update/preview"
payload = {
"priceId": "price_xxxx",
"quantity": 1,
"promotionCode": "SUMMER25"
}
headers = {
"X-Timestamp": "<x-timestamp>",
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Timestamp': '<x-timestamp>',
'X-API-KEY': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({priceId: 'price_xxxx', quantity: 1, promotionCode: 'SUMMER25'})
};
fetch('https://uat-api.clinkbill.com/api/subscription/{id}/update/preview', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"code": 200,
"msg": "success",
"data": {
"subscriptionId": "<string>",
"immediate": true,
"recurringPrice": {
"periodStart": 123,
"periodEnd": 123,
"priceId": "<string>",
"priceSnapshotId": "<string>",
"productId": "<string>",
"productName": "<string>",
"totalAmount": 123,
"unitAmount": 123,
"currencySymbol": "<string>",
"currency": "USD",
"quantity": 123,
"interval": "day",
"recurring": "<string>"
},
"lines": {
"proratedCredit": {
"productName": "<string>",
"totalAmount": 123,
"currencySymbol": "<string>",
"currency": "USD",
"quantity": 123
},
"proratedCharge": {
"productName": "<string>",
"totalAmount": 123,
"currencySymbol": "<string>",
"currency": "USD",
"quantity": 123
},
"periodStart": 123,
"periodEnd": 123,
"subtotalAmount": 123,
"taxAmount": 123,
"taxRate": 123,
"taxName": "<string>",
"totalAmount": 123,
"currencySymbol": "<string>",
"currency": "USD"
},
"discountObject": {
"couponId": "<string>",
"couponName": "<string>",
"couponTerms": "<string>",
"promotionCode": "<string>",
"discountAmount": 123,
"durationType": "<string>",
"durationMonths": 123,
"couponUsedTimes": 123
}
}
}"<string>"授权
Your secret API key obtained from the Clink dashboard (Developers section)
请求头
Current timestamp in milliseconds since Unix epoch (required for request signing)
"1783513683000"
路径参数
Unique identifier of the subscription
请求体
Subscription update preview request
Parameters required to preview a subscription upgrade or downgrade.
Target recurring price ID. The price must belong to the current merchant and support the subscription payment currency.
Number of units for the target price. Optional; defaults to 1 when omitted. null and values below 1 are invalid.
x >= 1Promotion code to apply to the updated subscription.