Skip to main content

Price Plan API

Create, read, update, and delete price plan records using the NetSuite REST API.


Endpoints

MethodEndpointDescription
GET/record/v1/pricePlanList all price plans
GET/record/v1/pricePlan/{id}Get specific price plan
POST/record/v1/pricePlanCreate new price plan
PATCH/record/v1/pricePlan/{id}Update existing price plan
DELETE/record/v1/pricePlan/{id}Delete price plan

Base URL

https://{account_id}.suitetalk.api.netsuite.com/services/rest/record/v1/pricePlan

Key Fields

Basic Information

FieldTypeDescriptionRequired
idstringInternal ID (read-only)-
namestringPrice plan nameYes
isInactivebooleanInactive flagNo

Pricing Configuration

FieldTypeDescriptionRequired
discountPercentnumberDiscount percentageNo
descriptionstringPlan descriptionNo

Subscription Settings

FieldTypeDescriptionRequired
frequencyobjectBilling frequencyNo
pricingModelobjectPricing model typeNo

Example: Create Price Plan

POST /record/v1/pricePlan
Content-Type: application/json
Authorization: Bearer {access_token}
{
"name": "Enterprise Plan",
"description": "Annual subscription with 20% discount",
"discountPercent": 20.0,
"isInactive": false,
"frequency": {
"id": "ANNUALLY"
}
}

Response

{
"links": [
{
"rel": "self",
"href": "https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/pricePlan/8"
}
],
"id": "8",
"name": "Enterprise Plan",
"description": "Annual subscription with 20% discount",
"discountPercent": 20.0,
"isInactive": false,
"frequency": {
"id": "ANNUALLY",
"refName": "Annually"
}
}

Example: Create Monthly Subscription Plan

POST /record/v1/pricePlan
Content-Type: application/json
{
"name": "Professional Monthly",
"description": "Month-to-month professional tier",
"discountPercent": 0,
"isInactive": false,
"frequency": {
"id": "MONTHLY"
}
}

Example: Create Tiered Discount Plan

POST /record/v1/pricePlan
Content-Type: application/json
{
"name": "Volume Discount Plan",
"description": "25% discount for high-volume customers",
"discountPercent": 25.0,
"isInactive": false
}

Example: Update Price Plan

PATCH /record/v1/pricePlan/8
Content-Type: application/json
{
"discountPercent": 22.0,
"description": "Annual subscription with enhanced 22% discount"
}
Partial Updates

With PATCH, only include fields you want to change. All other fields remain unchanged.


Query Filters

Find Price Plans by Name

GET /record/v1/pricePlan?q=name LIKE 'Enterprise%'

Find Active Price Plans

GET /record/v1/pricePlan?q=isInactive=false

Find Plans with Discount > 15%

GET /record/v1/pricePlan?q=discountPercent > 15

Find Annual Plans

GET /record/v1/pricePlan?q=frequency='ANNUALLY'

Common Use Cases

1. Create Subscription Tier Structure

const plans = [
{
name: "Basic Monthly",
discountPercent: 0,
frequency: { id: "MONTHLY" }
},
{
name: "Professional Quarterly",
discountPercent: 10,
frequency: { id: "QUARTERLY" }
},
{
name: "Enterprise Annual",
discountPercent: 20,
frequency: { id: "ANNUALLY" }
}
];

for (const plan of plans) {
await createPricePlan(plan);
}

2. Promotional Price Plan

await createPricePlan({
name: "Holiday Special 2025",
description: "Limited time 30% discount",
discountPercent: 30.0,
frequency: { id: "ANNUALLY" }
});

3. Update Pricing for Existing Plan

await patchPricePlan(planId, {
discountPercent: 25.0,
description: "Updated Q1 2026 pricing"
});

4. Retire Old Price Plan

await patchPricePlan(oldPlanId, {
isInactive: true,
description: "Retired - Replaced by 2026 pricing tiers"
});

Important Notes

Required Fields

  • name - Price plan name is required
  • All other fields are optional

Subscription Pricing

  • Price plans are typically used for recurring subscription billing
  • Discount percentages apply to base subscription prices
  • Plans can be combined with billing schedules for automated recurring revenue

Frequency Options

Common billing frequency values:

  • MONTHLY - Monthly billing
  • QUARTERLY - Quarterly billing
  • ANNUALLY - Annual billing
  • BIANNUALLY - Semi-annual billing
  • WEEKLY - Weekly billing

Discount Application

  • Discounts apply to the base price of subscription items
  • Item-specific pricing can override plan discounts
  • Discounts can be combined with price levels in some scenarios

Activation and Deactivation

  • Inactive price plans are not available for new subscriptions
  • Existing subscriptions continue with their original plan even if deactivated
  • Consider creating new plans rather than modifying active ones

Best Practices

  • Use clear naming conventions that indicate billing frequency (e.g., "Enterprise Annual")
  • Document discount percentages and effective dates
  • Create separate plans for different commitment periods
  • Maintain historical plans for reporting and analysis
  • Test plan pricing calculations before making plans active

Integration with Subscription Management

  • Billing Schedules: Price plans work with billing schedules for automated invoicing
  • Subscription Items: Define subscription items that use price plans
  • Revenue Recognition: Price plans integrate with revenue recognition schedules
  • Customer Subscriptions: Assign price plans to customer subscription records

See Also