Confirm Subscription Update
curl --request POST \
--url https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"priceSnapshotId": "priceSnapshotId_xxxx",
"promotionCode": "SUMMER25"
}
'HttpResponse<String> response = Unirest.post("https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm")
.header("X-Timestamp", "<x-timestamp>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"priceSnapshotId\": \"priceSnapshotId_xxxx\",\n \"promotionCode\": \"SUMMER25\"\n}")
.asString();import requests
url = "https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm"
payload = {
"priceSnapshotId": "priceSnapshotId_xxxx",
"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({priceSnapshotId: 'priceSnapshotId_xxxx', promotionCode: 'SUMMER25'})
};
fetch('https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"code": 200,
"msg": "success",
"data": {
"subscriptionId": "<string>",
"code": "<string>",
"declinedCode": "<string>",
"message": "<string>",
"action": {
"redirectUrl": "<string>",
"walletHandleRedirectOrDisplayQrCode": {
"imageUrlPng": "<string>",
"imageUrlSvg": "<string>",
"imageDataUrl": "<string>",
"hostedInstructionsUrl": "<string>",
"mobileAuthUrl": "<string>",
"fallbackUrl": "<string>",
"packageName": "<string>",
"expiresAt": 123,
"expiresSecond": 123
},
"paymentMethodType": "<string>",
"postData": {}
},
"subscription": {
"subscriptionId": "<string>",
"customerId": "<string>",
"productId": "<string>",
"priceId": "<string>",
"priceSnapshotId": "<string>",
"createTime": 123,
"quantity": 123,
"paymentMethodType": "<string>",
"paymentInstrumentId": "<string>",
"status": "<string>",
"billing": "<string>",
"recurringInvoiceItem": {
"invoiceItemId": "<string>",
"amount": 123,
"discountAmount": 123,
"paymentAmount": 123,
"couponTerms": "<string>",
"promotionCode": "<string>",
"periodStart": 123,
"periodEnd": 123,
"proration": true,
"price": {
"productId": "<string>",
"productName": "<string>",
"priceId": "<string>",
"priceSnapshotId": "<string>",
"unitAmount": 123,
"quantity": 123,
"recurring": {
"trialPeriodDays": 123,
"intervalCount": 123
}
}
},
"merchantReference": "<string>",
"sessionId": "<string>",
"trialStart": 123,
"trialEnd": 123,
"currentPeriodStart": 123,
"currentPeriodEnd": 123,
"cancelAt": 123,
"cancelAtPeriodEnd": true,
"canceledAt": 123,
"cancelReason": "<string>",
"upcomingInvoiceItem": {
"invoiceItemId": "<string>",
"amount": 123,
"discountAmount": 123,
"paymentAmount": 123,
"couponTerms": "<string>",
"promotionCode": "<string>",
"periodStart": 123,
"periodEnd": 123,
"proration": true,
"price": {
"productId": "<string>",
"productName": "<string>",
"priceId": "<string>",
"priceSnapshotId": "<string>",
"unitAmount": 123,
"quantity": 123,
"recurring": {
"trialPeriodDays": 123,
"intervalCount": 123
}
}
},
"scheduledPhases": [
{
"sequence": 2,
"effectiveCycle": 2,
"priceSnapshotId": "<string>",
"quantity": 2,
"metadata": {}
}
],
"elapsedCycles": 123,
"metadata": {}
}
}
}"<string>"Subscription
Confirm Subscription Update
Confirm a subscription upgrade or downgrade using the target price snapshot returned by the preview API. Immediate updates may require payment; period-end updates return success when no immediate payment is required.
POST
/
subscription
/
{id}
/
update
/
confirm
Confirm Subscription Update
curl --request POST \
--url https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"priceSnapshotId": "priceSnapshotId_xxxx",
"promotionCode": "SUMMER25"
}
'HttpResponse<String> response = Unirest.post("https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm")
.header("X-Timestamp", "<x-timestamp>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"priceSnapshotId\": \"priceSnapshotId_xxxx\",\n \"promotionCode\": \"SUMMER25\"\n}")
.asString();import requests
url = "https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm"
payload = {
"priceSnapshotId": "priceSnapshotId_xxxx",
"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({priceSnapshotId: 'priceSnapshotId_xxxx', promotionCode: 'SUMMER25'})
};
fetch('https://uat-api.clinkbill.com/api/subscription/{id}/update/confirm', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"code": 200,
"msg": "success",
"data": {
"subscriptionId": "<string>",
"code": "<string>",
"declinedCode": "<string>",
"message": "<string>",
"action": {
"redirectUrl": "<string>",
"walletHandleRedirectOrDisplayQrCode": {
"imageUrlPng": "<string>",
"imageUrlSvg": "<string>",
"imageDataUrl": "<string>",
"hostedInstructionsUrl": "<string>",
"mobileAuthUrl": "<string>",
"fallbackUrl": "<string>",
"packageName": "<string>",
"expiresAt": 123,
"expiresSecond": 123
},
"paymentMethodType": "<string>",
"postData": {}
},
"subscription": {
"subscriptionId": "<string>",
"customerId": "<string>",
"productId": "<string>",
"priceId": "<string>",
"priceSnapshotId": "<string>",
"createTime": 123,
"quantity": 123,
"paymentMethodType": "<string>",
"paymentInstrumentId": "<string>",
"status": "<string>",
"billing": "<string>",
"recurringInvoiceItem": {
"invoiceItemId": "<string>",
"amount": 123,
"discountAmount": 123,
"paymentAmount": 123,
"couponTerms": "<string>",
"promotionCode": "<string>",
"periodStart": 123,
"periodEnd": 123,
"proration": true,
"price": {
"productId": "<string>",
"productName": "<string>",
"priceId": "<string>",
"priceSnapshotId": "<string>",
"unitAmount": 123,
"quantity": 123,
"recurring": {
"trialPeriodDays": 123,
"intervalCount": 123
}
}
},
"merchantReference": "<string>",
"sessionId": "<string>",
"trialStart": 123,
"trialEnd": 123,
"currentPeriodStart": 123,
"currentPeriodEnd": 123,
"cancelAt": 123,
"cancelAtPeriodEnd": true,
"canceledAt": 123,
"cancelReason": "<string>",
"upcomingInvoiceItem": {
"invoiceItemId": "<string>",
"amount": 123,
"discountAmount": 123,
"paymentAmount": 123,
"couponTerms": "<string>",
"promotionCode": "<string>",
"periodStart": 123,
"periodEnd": 123,
"proration": true,
"price": {
"productId": "<string>",
"productName": "<string>",
"priceId": "<string>",
"priceSnapshotId": "<string>",
"unitAmount": 123,
"quantity": 123,
"recurring": {
"trialPeriodDays": 123,
"intervalCount": 123
}
}
},
"scheduledPhases": [
{
"sequence": 2,
"effectiveCycle": 2,
"priceSnapshotId": "<string>",
"quantity": 2,
"metadata": {}
}
],
"elapsedCycles": 123,
"metadata": {}
}
}
}"<string>"Authorizations
Your secret API key obtained from the Clink dashboard (Developers section)
Headers
Current timestamp in milliseconds since Unix epoch (required for request signing)
Example:
"1783513683000"
Path Parameters
Unique identifier of the subscription
Body
application/json
Subscription update confirmation request
⌘I