curl --request POST \
--url https://api.unibee.dev/merchant/subscription/config/update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"autoChargeMaxRetryCount": 123,
"autoChargeRetryInterval": 123,
"discountNewUserIgnoreFreeZeroInvoice": true,
"downgradeEffectImmediately": true,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 123,
"gatewayVATRule": [
{
"gatewayNames": "<string>",
"ignoreVatNumber": true,
"taxPercentage": 123,
"validCountryCodes": "<string>"
}
],
"incompleteExpireTime": 123,
"invoiceEmail": true,
"showZeroInvoice": true,
"tryAutomaticPaymentBeforePeriodEnd": 123,
"upgradeProration": true,
"upgradeResetBillingCycle": true
}
'import requests
url = "https://api.unibee.dev/merchant/subscription/config/update"
payload = {
"autoChargeMaxRetryCount": 123,
"autoChargeRetryInterval": 123,
"discountNewUserIgnoreFreeZeroInvoice": True,
"downgradeEffectImmediately": True,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 123,
"gatewayVATRule": [
{
"gatewayNames": "<string>",
"ignoreVatNumber": True,
"taxPercentage": 123,
"validCountryCodes": "<string>"
}
],
"incompleteExpireTime": 123,
"invoiceEmail": True,
"showZeroInvoice": True,
"tryAutomaticPaymentBeforePeriodEnd": 123,
"upgradeProration": True,
"upgradeResetBillingCycle": True
}
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({
autoChargeMaxRetryCount: 123,
autoChargeRetryInterval: 123,
discountNewUserIgnoreFreeZeroInvoice: true,
downgradeEffectImmediately: true,
downgradeNonImmediatelyEffectBeforePeriodEnd: 123,
gatewayVATRule: [
{
gatewayNames: '<string>',
ignoreVatNumber: true,
taxPercentage: 123,
validCountryCodes: '<string>'
}
],
incompleteExpireTime: 123,
invoiceEmail: true,
showZeroInvoice: true,
tryAutomaticPaymentBeforePeriodEnd: 123,
upgradeProration: true,
upgradeResetBillingCycle: true
})
};
fetch('https://api.unibee.dev/merchant/subscription/config/update', 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.unibee.dev/merchant/subscription/config/update",
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([
'autoChargeMaxRetryCount' => 123,
'autoChargeRetryInterval' => 123,
'discountNewUserIgnoreFreeZeroInvoice' => true,
'downgradeEffectImmediately' => true,
'downgradeNonImmediatelyEffectBeforePeriodEnd' => 123,
'gatewayVATRule' => [
[
'gatewayNames' => '<string>',
'ignoreVatNumber' => true,
'taxPercentage' => 123,
'validCountryCodes' => '<string>'
]
],
'incompleteExpireTime' => 123,
'invoiceEmail' => true,
'showZeroInvoice' => true,
'tryAutomaticPaymentBeforePeriodEnd' => 123,
'upgradeProration' => true,
'upgradeResetBillingCycle' => true
]),
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.unibee.dev/merchant/subscription/config/update"
payload := strings.NewReader("{\n \"autoChargeMaxRetryCount\": 123,\n \"autoChargeRetryInterval\": 123,\n \"discountNewUserIgnoreFreeZeroInvoice\": true,\n \"downgradeEffectImmediately\": true,\n \"downgradeNonImmediatelyEffectBeforePeriodEnd\": 123,\n \"gatewayVATRule\": [\n {\n \"gatewayNames\": \"<string>\",\n \"ignoreVatNumber\": true,\n \"taxPercentage\": 123,\n \"validCountryCodes\": \"<string>\"\n }\n ],\n \"incompleteExpireTime\": 123,\n \"invoiceEmail\": true,\n \"showZeroInvoice\": true,\n \"tryAutomaticPaymentBeforePeriodEnd\": 123,\n \"upgradeProration\": true,\n \"upgradeResetBillingCycle\": true\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.unibee.dev/merchant/subscription/config/update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"autoChargeMaxRetryCount\": 123,\n \"autoChargeRetryInterval\": 123,\n \"discountNewUserIgnoreFreeZeroInvoice\": true,\n \"downgradeEffectImmediately\": true,\n \"downgradeNonImmediatelyEffectBeforePeriodEnd\": 123,\n \"gatewayVATRule\": [\n {\n \"gatewayNames\": \"<string>\",\n \"ignoreVatNumber\": true,\n \"taxPercentage\": 123,\n \"validCountryCodes\": \"<string>\"\n }\n ],\n \"incompleteExpireTime\": 123,\n \"invoiceEmail\": true,\n \"showZeroInvoice\": true,\n \"tryAutomaticPaymentBeforePeriodEnd\": 123,\n \"upgradeProration\": true,\n \"upgradeResetBillingCycle\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unibee.dev/merchant/subscription/config/update")
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 \"autoChargeMaxRetryCount\": 123,\n \"autoChargeRetryInterval\": 123,\n \"discountNewUserIgnoreFreeZeroInvoice\": true,\n \"downgradeEffectImmediately\": true,\n \"downgradeNonImmediatelyEffectBeforePeriodEnd\": 123,\n \"gatewayVATRule\": [\n {\n \"gatewayNames\": \"<string>\",\n \"ignoreVatNumber\": true,\n \"taxPercentage\": 123,\n \"validCountryCodes\": \"<string>\"\n }\n ],\n \"incompleteExpireTime\": 123,\n \"invoiceEmail\": true,\n \"showZeroInvoice\": true,\n \"tryAutomaticPaymentBeforePeriodEnd\": 123,\n \"upgradeProration\": true,\n \"upgradeResetBillingCycle\": true\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"data": {
"config": {
"autoChargeMaxRetryCount": 123,
"autoChargeRetryInterval": 123,
"discountNewUserIgnoreFreeZeroInvoice": true,
"downgradeEffectImmediately": true,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 123,
"fiatExchangeApiKey": "<string>",
"gatewayVATRule": "<string>",
"incompleteExpireTime": 123,
"invoiceEmail": true,
"invoicePdfGenerate": true,
"showZeroInvoice": true,
"tryAutomaticPaymentBeforePeriodEnd": 123,
"upgradeProration": true,
"upgradeResetBillingCycle": true
}
},
"merchantId": 123,
"message": "<string>",
"redirect": "<string>",
"requestId": "<string>"
}Update Merchant Subscription Config
curl --request POST \
--url https://api.unibee.dev/merchant/subscription/config/update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"autoChargeMaxRetryCount": 123,
"autoChargeRetryInterval": 123,
"discountNewUserIgnoreFreeZeroInvoice": true,
"downgradeEffectImmediately": true,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 123,
"gatewayVATRule": [
{
"gatewayNames": "<string>",
"ignoreVatNumber": true,
"taxPercentage": 123,
"validCountryCodes": "<string>"
}
],
"incompleteExpireTime": 123,
"invoiceEmail": true,
"showZeroInvoice": true,
"tryAutomaticPaymentBeforePeriodEnd": 123,
"upgradeProration": true,
"upgradeResetBillingCycle": true
}
'import requests
url = "https://api.unibee.dev/merchant/subscription/config/update"
payload = {
"autoChargeMaxRetryCount": 123,
"autoChargeRetryInterval": 123,
"discountNewUserIgnoreFreeZeroInvoice": True,
"downgradeEffectImmediately": True,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 123,
"gatewayVATRule": [
{
"gatewayNames": "<string>",
"ignoreVatNumber": True,
"taxPercentage": 123,
"validCountryCodes": "<string>"
}
],
"incompleteExpireTime": 123,
"invoiceEmail": True,
"showZeroInvoice": True,
"tryAutomaticPaymentBeforePeriodEnd": 123,
"upgradeProration": True,
"upgradeResetBillingCycle": True
}
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({
autoChargeMaxRetryCount: 123,
autoChargeRetryInterval: 123,
discountNewUserIgnoreFreeZeroInvoice: true,
downgradeEffectImmediately: true,
downgradeNonImmediatelyEffectBeforePeriodEnd: 123,
gatewayVATRule: [
{
gatewayNames: '<string>',
ignoreVatNumber: true,
taxPercentage: 123,
validCountryCodes: '<string>'
}
],
incompleteExpireTime: 123,
invoiceEmail: true,
showZeroInvoice: true,
tryAutomaticPaymentBeforePeriodEnd: 123,
upgradeProration: true,
upgradeResetBillingCycle: true
})
};
fetch('https://api.unibee.dev/merchant/subscription/config/update', 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.unibee.dev/merchant/subscription/config/update",
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([
'autoChargeMaxRetryCount' => 123,
'autoChargeRetryInterval' => 123,
'discountNewUserIgnoreFreeZeroInvoice' => true,
'downgradeEffectImmediately' => true,
'downgradeNonImmediatelyEffectBeforePeriodEnd' => 123,
'gatewayVATRule' => [
[
'gatewayNames' => '<string>',
'ignoreVatNumber' => true,
'taxPercentage' => 123,
'validCountryCodes' => '<string>'
]
],
'incompleteExpireTime' => 123,
'invoiceEmail' => true,
'showZeroInvoice' => true,
'tryAutomaticPaymentBeforePeriodEnd' => 123,
'upgradeProration' => true,
'upgradeResetBillingCycle' => true
]),
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.unibee.dev/merchant/subscription/config/update"
payload := strings.NewReader("{\n \"autoChargeMaxRetryCount\": 123,\n \"autoChargeRetryInterval\": 123,\n \"discountNewUserIgnoreFreeZeroInvoice\": true,\n \"downgradeEffectImmediately\": true,\n \"downgradeNonImmediatelyEffectBeforePeriodEnd\": 123,\n \"gatewayVATRule\": [\n {\n \"gatewayNames\": \"<string>\",\n \"ignoreVatNumber\": true,\n \"taxPercentage\": 123,\n \"validCountryCodes\": \"<string>\"\n }\n ],\n \"incompleteExpireTime\": 123,\n \"invoiceEmail\": true,\n \"showZeroInvoice\": true,\n \"tryAutomaticPaymentBeforePeriodEnd\": 123,\n \"upgradeProration\": true,\n \"upgradeResetBillingCycle\": true\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.unibee.dev/merchant/subscription/config/update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"autoChargeMaxRetryCount\": 123,\n \"autoChargeRetryInterval\": 123,\n \"discountNewUserIgnoreFreeZeroInvoice\": true,\n \"downgradeEffectImmediately\": true,\n \"downgradeNonImmediatelyEffectBeforePeriodEnd\": 123,\n \"gatewayVATRule\": [\n {\n \"gatewayNames\": \"<string>\",\n \"ignoreVatNumber\": true,\n \"taxPercentage\": 123,\n \"validCountryCodes\": \"<string>\"\n }\n ],\n \"incompleteExpireTime\": 123,\n \"invoiceEmail\": true,\n \"showZeroInvoice\": true,\n \"tryAutomaticPaymentBeforePeriodEnd\": 123,\n \"upgradeProration\": true,\n \"upgradeResetBillingCycle\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unibee.dev/merchant/subscription/config/update")
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 \"autoChargeMaxRetryCount\": 123,\n \"autoChargeRetryInterval\": 123,\n \"discountNewUserIgnoreFreeZeroInvoice\": true,\n \"downgradeEffectImmediately\": true,\n \"downgradeNonImmediatelyEffectBeforePeriodEnd\": 123,\n \"gatewayVATRule\": [\n {\n \"gatewayNames\": \"<string>\",\n \"ignoreVatNumber\": true,\n \"taxPercentage\": 123,\n \"validCountryCodes\": \"<string>\"\n }\n ],\n \"incompleteExpireTime\": 123,\n \"invoiceEmail\": true,\n \"showZeroInvoice\": true,\n \"tryAutomaticPaymentBeforePeriodEnd\": 123,\n \"upgradeProration\": true,\n \"upgradeResetBillingCycle\": true\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"data": {
"config": {
"autoChargeMaxRetryCount": 123,
"autoChargeRetryInterval": 123,
"discountNewUserIgnoreFreeZeroInvoice": true,
"downgradeEffectImmediately": true,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 123,
"fiatExchangeApiKey": "<string>",
"gatewayVATRule": "<string>",
"incompleteExpireTime": 123,
"invoiceEmail": true,
"invoicePdfGenerate": true,
"showZeroInvoice": true,
"tryAutomaticPaymentBeforePeriodEnd": 123,
"upgradeProration": true,
"upgradeResetBillingCycle": true
}
},
"merchantId": 123,
"message": "<string>",
"redirect": "<string>",
"requestId": "<string>"
}Endpoint Overview
POSThttps://api.unibee.dev/merchant/subscription/config/update
Update Merchant Subscription Config
Authorization
All UniBee Merchant API requests require authentication via API key.| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <your_api_key> |
Content-Type | Yes | application/json (for request body) |
Parameters
Parameters for this endpoint are listed below. The schema is also shown in the Try it panel.Request body
| Name | Type | Required | Description |
|---|---|---|---|
downgradeEffectImmediately | boolean | No | DowngradeEffectImmediately, Immediate Downgrade (by default, the downgrades takes effect at the end of the period ) |
downgradeNonImmediatelyEffectBeforePeriodEnd | integer | No | DowngradeNonImmediatelyEffectBeforePeriodEnd, seconds, For non-immediate downgrade, can take effect before period end (default 30 minutes, 1800 seconds) |
gatewayVATRule | array | No | |
incompleteExpireTime | integer | No | IncompleteExpireTime, seconds, Incomplete Status Duration(The period during which subscription remains in |
invoiceEmail | boolean | No | InvoiceEmail, Enable Invoice Email (Toggle to send invoice email to customers) |
showZeroInvoice | boolean | No | ShowZeroInvoice, Display Invoices With Zero Amount (Invoice With Zero Amount will hidden in list by default) |
tryAutomaticPaymentBeforePeriodEnd | integer | No | TryAutomaticPaymentBeforePeriodEnd, Auto-charge Start Before Period End (Time Difference for Auto-Payment Activation Before Period End) |
upgradeProration | boolean | No | UpgradeProration, Prorated Upgrade Invoices(Upgrades will generate prorated invoice by default) |
Request examples
cURL
curl -X POST "https://api.unibee.dev/merchant/subscription/config/update" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"downgradeEffectImmediately": false,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 0,
"gatewayVATRule": [],
"incompleteExpireTime": 0,
"invoiceEmail": "user@example.com",
"showZeroInvoice": false,
"tryAutomaticPaymentBeforePeriodEnd": 0,
"upgradeProration": false
}'
Sandbox
curl -X POST "https://api-sandbox.unibee.top/merchant/subscription/config/update" \
-H "Authorization: Bearer YOUR_SANDBOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"downgradeEffectImmediately": false,
"downgradeNonImmediatelyEffectBeforePeriodEnd": 0,
"gatewayVATRule": [],
"incompleteExpireTime": 0,
"invoiceEmail": "user@example.com",
"showZeroInvoice": false,
"tryAutomaticPaymentBeforePeriodEnd": 0,
"upgradeProration": false
}'
Response
Success responses return a JSON envelope withcode, data, message, redirect, and requestId. code 0 indicates success.
| Field | Type | Description |
|---|---|---|
code | integer | Response code. 0 = success |
data | object | Response payload |
data.config | object | |
message | string | Human-readable message |
requestId | string | Request ID for support |
Error handling
| HTTP status | Meaning |
|---|---|
| 400 | Bad request — invalid or missing parameters. Check message in the body. |
| 401 | Unauthorized — missing or invalid API key. |
| 404 | Not found — invalid path or resource. |
| 500 | Server error — retry with backoff. |
code in the response body is non-zero, check message for details. Use requestId when contacting support.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
AutoChargeMaxRetryCount, max automatic-charge attempts for one invoice including the first automatic attempt; 0 = unlimited (current behavior). Omit to leave unchanged.
AutoChargeRetryInterval, seconds to wait before retrying a failed auto-charge within the window (default 12h). Omit to leave unchanged.
DiscountNewUserIgnoreFreeZeroInvoice, when true ignore only true free-plan zeros (no discount code / discount amount / promo credit) for new-user scope; default false = legacy any paid invoice. Omit to leave unchanged.
DowngradeEffectImmediately, Immediate Downgrade (by default, the downgrades takes effect at the end of the period )
DowngradeNonImmediatelyEffectBeforePeriodEnd, seconds, For non-immediate downgrade, can take effect before period end (default 30 minutes, 1800 seconds)
Show child attributes
Show child attributes
IncompleteExpireTime, seconds, Incomplete Status Duration(The period during which subscription remains in 'incomplete')
InvoiceEmail, Enable Invoice Email (Toggle to send invoice email to customers)
ShowZeroInvoice, Display Invoices With Zero Amount (Invoice With Zero Amount will hidden in list by default)
TryAutomaticPaymentBeforePeriodEnd, Auto-charge Start Before Period End (Time Difference for Auto-Payment Activation Before Period End)
UpgradeProration, Prorated Upgrade Invoices(Upgrades will generate prorated invoice by default)
UpgradeResetBillingCycle, same-interval upgrades only: full new-plan cycle from upgrade time and reset due day when true (default); legacy fixed-end proration when false. Omit on update to leave unchanged.

