curl --request POST \
--url https://api.tagada.io/api/public/v1/subscriptions/apply-discount \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionId": "sub_123",
"percent": 50,
"rebills": 1,
"retentionOfferId": "nextmonth_50off",
"replaceRunning": true
}
'{
"subscriptionId": "sub_123",
"discount": {
"id": "sdisc_123",
"percent": 50,
"rebillsLeft": 1,
"rebillsGranted": 1,
"rebillsUsed": 0,
"source": "retention",
"addedBy": null,
"createdAt": "2026-10-30T10:30:00.000Z",
"endedAt": null,
"endReason": null
}
}{
"message": "<string>",
"code": "<string>",
"issues": [
{
"message": "<string>"
}
]
}Apply a subscription discount in place
Give a subscription 1–99 percent off its next 1–24 rebills, or every rebill with rebills: null. A trial-end charge counts as rebill 1. No charge occurs now. With retentionOfferId (1–100 characters), source is retention; otherwise source is manual. replaceRunning defaults to false: a running discount answers 409. With true, the old row ends as replaced and the new one starts. Supports Idempotency-Key. An unknown subscription or one of another account answers 404; a store without Subscriptions V3 answers 412 because its rebill does not read discounts; a canceled subscription answers 409. 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/apply-discount \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscriptionId": "sub_123",
"percent": 50,
"rebills": 1,
"retentionOfferId": "nextmonth_50off",
"replaceRunning": true
}
'{
"subscriptionId": "sub_123",
"discount": {
"id": "sdisc_123",
"percent": 50,
"rebillsLeft": 1,
"rebillsGranted": 1,
"rebillsUsed": 0,
"source": "retention",
"addedBy": null,
"createdAt": "2026-10-30T10:30:00.000Z",
"endedAt": null,
"endReason": null
}
}{
"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.
