Skip to main content
POST
/
merchant
/
plan
/
new
Create Plan
curl --request POST \
  --url https://api.unibee.dev/merchant/plan/new \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "amount": 123,
  "currency": "<string>",
  "planName": "<string>",
  "addonIds": [
    123
  ],
  "cancelAtTrialEnd": 123,
  "description": "<string>",
  "externalPlanId": "<string>",
  "gasPayer": "<string>",
  "homeUrl": "<string>",
  "imageUrl": "<string>",
  "internalName": "<string>",
  "intervalCount": 123,
  "intervalUnit": "<string>",
  "metadata": {},
  "metricLimits": [
    {
      "metricId": 123,
      "metricLimit": 123
    }
  ],
  "metricMeteredCharge": [
    {
      "chargeType": 123,
      "graduatedAmounts": [
        {
          "endValue": 123,
          "flatAmount": 123,
          "perAmount": 123,
          "startValue": 123
        }
      ],
      "metricId": 123,
      "standardAmount": 123,
      "standardStartValue": 123
    }
  ],
  "metricRecurringCharge": [
    {
      "chargeType": 123,
      "graduatedAmounts": [
        {
          "endValue": 123,
          "flatAmount": 123,
          "perAmount": 123,
          "startValue": 123
        }
      ],
      "metricId": 123,
      "standardAmount": 123,
      "standardStartValue": 123
    }
  ],
  "multiCurrencies": [
    {
      "amount": 123,
      "autoExchange": true,
      "currency": "<string>",
      "disable": true,
      "exchangeRate": 123
    }
  ],
  "onetimeAddonIds": [
    123
  ],
  "productDescription": "<string>",
  "productId": 123,
  "productName": "<string>",
  "trialAmount": 123,
  "trialDemand": "<string>",
  "trialDurationTime": 123,
  "type": 1,
  "usVATConfig": {
    "active": true,
    "fromAddress": {
      "address": "<string>",
      "city": "<string>",
      "countryCode": "<string>",
      "state": "<string>",
      "verified": true,
      "zipCode": "<string>"
    },
    "nexusAddresses": [
      {
        "address": "<string>",
        "city": "<string>",
        "countryCode": "<string>",
        "state": "<string>",
        "verified": true,
        "zipCode": "<string>"
      }
    ],
    "sellOnUSOnly": true,
    "taxCode": "<string>",
    "toAddress": {
      "address": "<string>",
      "city": "<string>",
      "countryCode": "<string>",
      "state": "<string>",
      "verified": true,
      "zipCode": "<string>"
    }
  }
}
'
{
  "code": 123,
  "data": {
    "plan": {
      "amount": 123,
      "bindingAddonIds": "<string>",
      "bindingOnetimeAddonIds": "<string>",
      "cancelAtTrialEnd": 123,
      "checkoutUrl": "<string>",
      "createTime": 123,
      "currency": "<string>",
      "description": "<string>",
      "disableAutoCharge": 123,
      "externalPlanId": "<string>",
      "extraMetricData": "<string>",
      "gasPayer": "<string>",
      "homeUrl": "<string>",
      "id": 123,
      "imageUrl": "<string>",
      "internalName": "<string>",
      "intervalCount": 123,
      "intervalUnit": "<string>",
      "merchantId": 123,
      "metadata": {},
      "metricLimits": [
        {
          "metricId": 123,
          "metricLimit": 123
        }
      ],
      "metricMeteredCharge": [
        {
          "chargeType": 123,
          "graduatedAmounts": [
            {
              "endValue": 123,
              "flatAmount": 123,
              "perAmount": 123,
              "startValue": 123
            }
          ],
          "metricId": 123,
          "standardAmount": 123,
          "standardStartValue": 123
        }
      ],
      "metricRecurringCharge": [
        {
          "chargeType": 123,
          "graduatedAmounts": [
            {
              "endValue": 123,
              "flatAmount": 123,
              "perAmount": 123,
              "startValue": 123
            }
          ],
          "metricId": 123,
          "standardAmount": 123,
          "standardStartValue": 123
        }
      ],
      "multiCurrencies": [
        {
          "amount": 123,
          "autoExchange": true,
          "currency": "<string>",
          "disable": true,
          "exchangeRate": 123
        }
      ],
      "planName": "<string>",
      "productId": 123,
      "publishStatus": 123,
      "status": 123,
      "taxPercentage": 123,
      "trialAmount": 123,
      "trialDemand": "<string>",
      "trialDurationTime": 123,
      "type": 123,
      "usVATConfig": {
        "active": true,
        "fromAddress": {
          "address": "<string>",
          "city": "<string>",
          "countryCode": "<string>",
          "state": "<string>",
          "verified": true,
          "zipCode": "<string>"
        },
        "nexusAddresses": [
          {
            "address": "<string>",
            "city": "<string>",
            "countryCode": "<string>",
            "state": "<string>",
            "verified": true,
            "zipCode": "<string>"
          }
        ],
        "sellOnUSOnly": true,
        "taxCode": "<string>",
        "toAddress": {
          "address": "<string>",
          "city": "<string>",
          "countryCode": "<string>",
          "state": "<string>",
          "verified": true,
          "zipCode": "<string>"
        }
      }
    }
  },
  "merchantId": 123,
  "message": "<string>",
  "redirect": "<string>",
  "requestId": "<string>"
}

Endpoint Overview

POST https://api.unibee.dev/merchant/plan/new Create Plan

Authorization

All UniBee Merchant API requests require authentication via API key.
HeaderRequiredDescription
AuthorizationYesBearer <your_api_key>
Content-TypeYesapplication/json (for request body)

Parameters

Parameters for this endpoint are listed below. The schema is also shown in the Try it panel.

Request body

NameTypeRequiredDescription
addonIdsarrayNoPlan Ids Of Recurring Addon Type
amountintegerYesPlan Amount
cancelAtTrialEndintegerNowhether cancel at subscription first trial end,0-false | 1-true, will pass to cancelAtPeriodEnd of subscription
currencystringYesPlan Currency
descriptionstringNoDescription
externalPlanIdstringNoExternalPlanId
gasPayerstringNowho pay the gas for crypto payment, merchant|user
homeUrlstringNoHomeUrl,Start With: http
imageUrlstringNoImageUrl,Start With: http
internalNamestringNo
intervalCountintegerNoNumber Of IntervalUnit,em: day|month|year|week
intervalUnitstringNoPlan Interval Unit,em: day|month|year|week
metadataobjectNoMetadata,Map
metricLimitsarrayNoPlan’s MetricLimit List
metricMeteredChargearrayNoPlan’s MetricMeteredCharge
metricRecurringChargearrayNoPlan’s MetricRecurringCharge
multiCurrenciesarrayNoPlan’s MultiCurrencies
onetimeAddonIdsarrayNoPlan Ids Of Onetime Addon Type
planNamestringYesPlan Name
productDescriptionstringNoDefault Copy Description
productIdintegerNoId of product which plan to linked
productNamestringNoDefault Copy PlanName
trialAmountintegerNoprice of trial period, not available for addon
trialDemandstringNodemand of trial, not available for addon, example, paymentMethod, payment method will ask for subscription trial start
trialDurationTimeintegerNoduration of trial, not available for addon
typeintegerNoThe type of plan, 1-main plan,2-addon plan, 3-onetime plan, default main plan
usVATConfigstringNo

Request examples

cURL

curl -X POST "https://api.unibee.dev/merchant/plan/new" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "addonIds": [],
  "amount": 0,
  "cancelAtTrialEnd": 0,
  "currency": "",
  "description": "",
  "externalPlanId": "id_example",
  "gasPayer": "",
  "homeUrl": "https://example.com",
  "imageUrl": "https://example.com",
  "internalName": "",
  "intervalCount": 0,
  "intervalUnit": "",
  "metadata": {},
  "metricLimits": [],
  "metricMeteredCharge": [],
  "metricRecurringCharge": [],
  "multiCurrencies": [],
  "onetimeAddonIds": 0,
  "planName": "",
  "productDescription": "",
  "productId": 0,
  "productName": "",
  "trialAmount": 0,
  "trialDemand": "",
  "trialDurationTime": 0,
  "type": 0,
  "usVATConfig": ""
}'

Sandbox

curl -X POST "https://api-sandbox.unibee.top/merchant/plan/new" \
  -H "Authorization: Bearer YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "addonIds": [],
  "amount": 0,
  "cancelAtTrialEnd": 0,
  "currency": "",
  "description": "",
  "externalPlanId": "id_example",
  "gasPayer": "",
  "homeUrl": "https://example.com",
  "imageUrl": "https://example.com",
  "internalName": "",
  "intervalCount": 0,
  "intervalUnit": "",
  "metadata": {},
  "metricLimits": [],
  "metricMeteredCharge": [],
  "metricRecurringCharge": [],
  "multiCurrencies": [],
  "onetimeAddonIds": 0,
  "planName": "",
  "productDescription": "",
  "productId": 0,
  "productName": "",
  "trialAmount": 0,
  "trialDemand": "",
  "trialDurationTime": 0,
  "type": 0,
  "usVATConfig": ""
}'

Response

Success responses return a JSON envelope with code, data, message, redirect, and requestId. code 0 indicates success.
FieldTypeDescription
codeintegerResponse code. 0 = success
dataobjectResponse payload
data.planobject
messagestringHuman-readable message
requestIdstringRequest ID for support

Error handling

HTTP statusMeaning
400Bad request — invalid or missing parameters. Check message in the body.
401Unauthorized — missing or invalid API key.
404Not found — invalid path or resource.
500Server error — retry with backoff.
When code in the response body is non-zero, check message for details. Use requestId when contacting support.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
amount
integer<int64>
required

Plan Amount

currency
string<string>
required

Plan Currency

planName
string<string>
required

Plan Name

addonIds
integer<int64>[]

Plan Ids Of Recurring Addon Type

cancelAtTrialEnd
integer<int>

whether cancel at subscription first trial end,0-false | 1-true, will pass to cancelAtPeriodEnd of subscription

description
string<string>

Description

externalPlanId
string<string>

ExternalPlanId

gasPayer
string<string>

who pay the gas for crypto payment, merchant|user

homeUrl
string<string>

HomeUrl,Start With: http

imageUrl
string<string>

ImageUrl,Start With: http

internalName
string<string>
intervalCount
integer<int>

Number Of IntervalUnit,em: day|month|year|week

intervalUnit
string<string>

Plan Interval Unit,em: day|month|year|week

metadata
object

Metadata,Map

metricLimits
object[]

Plan's MetricLimit List

metricMeteredCharge
object[]

Plan's MetricMeteredCharge

metricRecurringCharge
object[]

Plan's MetricRecurringCharge

multiCurrencies
object[]

Plan's MultiCurrencies

onetimeAddonIds
integer<int64>[]

Plan Ids Of Onetime Addon Type

productDescription
string<string>

Default Copy Description

productId
integer<int64>

Id of product which plan to linked

productName
string<string>

Default Copy PlanName

trialAmount
integer<int64>

price of trial period, not available for addon

trialDemand
string<string>

demand of trial, not available for addon, example, paymentMethod, payment method will ask for subscription trial start

trialDurationTime
integer<int64>

duration of trial, not available for addon

type
integer<int>
default:1

The type of plan, 1-main plan,2-addon plan, 3-onetime plan, default main plan

usVATConfig
object

Response

200 - application/json
code
integer<int>
data
object
merchantId
integer<int64>
message
string<string>
redirect
string<string>
requestId
string<string>