Price Plan API
Create, read, update, and delete price plan records using the NetSuite REST API.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /record/v1/pricePlan | List all price plans |
GET | /record/v1/pricePlan/{id} | Get specific price plan |
POST | /record/v1/pricePlan | Create 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
| Field | Type | Description | Required |
|---|---|---|---|
id | string | Internal ID (read-only) | - |
name | string | Price plan name | Yes |
isInactive | boolean | Inactive flag | No |
Pricing Configuration
| Field | Type | Description | Required |
|---|---|---|---|
discountPercent | number | Discount percentage | No |
description | string | Plan description | No |
Subscription Settings
| Field | Type | Description | Required |
|---|---|---|---|
frequency | object | Billing frequency | No |
pricingModel | object | Pricing model type | No |
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 billingQUARTERLY- Quarterly billingANNUALLY- Annual billingBIANNUALLY- Semi-annual billingWEEKLY- 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
- Price Level - Customer pricing tiers
- Price Book - Advanced pricing strategies
- Pricing Group - Group items for pricing
- Revenue Recognition Template - Revenue recognition