Revenue Recognition Template API
Create, read, update, and delete revenue recognition template records using the NetSuite REST API.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /record/v1/revRecTemplate | List all revenue recognition templates |
GET | /record/v1/revRecTemplate/{id} | Get specific template |
POST | /record/v1/revRecTemplate | Create new template |
PATCH | /record/v1/revRecTemplate/{id} | Update existing template |
DELETE | /record/v1/revRecTemplate/{id} | Delete template |
Base URL
https://{account_id}.suitetalk.api.netsuite.com/services/rest/record/v1/revRecTemplate
Key Fields
Basic Information
| Field | Type | Description | Required |
|---|---|---|---|
id | string | Internal ID (read-only) | - |
name | string | Template name | Yes |
isInactive | boolean | Inactive flag | No |
Template Configuration
| Field | Type | Description | Required |
|---|---|---|---|
amortizationType | object | Amortization method | Yes |
recurrencePattern | object | Recurrence pattern | Yes |
periodOffset | number | Number of periods | No |
Advanced Settings
| Field | Type | Description | Required |
|---|---|---|---|
description | string | Template description | No |
deferralAccount | object | Deferred revenue account | No |
destinationAccount | object | Recognition account | No |
Recognition Pattern
| Field | Type | Description | Required |
|---|---|---|---|
recognitionPattern | collection | Custom recognition pattern | No |
useFairValue | boolean | Use fair value allocation | No |
Example: Create Revenue Recognition Template
POST /record/v1/revRecTemplate
Content-Type: application/json
Authorization: Bearer {access_token}
{
"name": "12-Month Subscription Template",
"description": "Standard 12-month subscription revenue recognition",
"amortizationType": {
"id": "STRAIGHTLINE"
},
"recurrencePattern": {
"id": "MONTHLY"
},
"periodOffset": 12,
"isInactive": false
}
Response
{
"links": [
{
"rel": "self",
"href": "https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/revRecTemplate/18"
}
],
"id": "18",
"name": "12-Month Subscription Template",
"description": "Standard 12-month subscription revenue recognition",
"amortizationType": {
"id": "STRAIGHTLINE",
"refName": "Straight Line"
},
"recurrencePattern": {
"id": "MONTHLY",
"refName": "Monthly"
},
"periodOffset": 12,
"isInactive": false
}
Example: Create Quarterly Template
POST /record/v1/revRecTemplate
Content-Type: application/json
{
"name": "Quarterly Service Template",
"description": "Quarterly service revenue recognition over 2 years",
"amortizationType": {
"id": "STRAIGHTLINE"
},
"recurrencePattern": {
"id": "QUARTERLY"
},
"periodOffset": 8,
"isInactive": false
}
Example: Create Multi-Year Template
POST /record/v1/revRecTemplate
Content-Type: application/json
{
"name": "3-Year Enterprise License Template",
"description": "Enterprise license with 36-month revenue recognition",
"amortizationType": {
"id": "STRAIGHTLINE"
},
"recurrencePattern": {
"id": "MONTHLY"
},
"periodOffset": 36,
"deferralAccount": {
"id": "150"
},
"destinationAccount": {
"id": "400"
},
"isInactive": false
}
Example: Update Template
PATCH /record/v1/revRecTemplate/18
Content-Type: application/json
{
"periodOffset": 24,
"description": "Updated to 24-month subscription template"
}
Partial Updates
With PATCH, only include fields you want to change. All other fields remain unchanged.
Query Filters
Find Templates by Name
GET /record/v1/revRecTemplate?q=name LIKE 'Subscription%'
Find Active Templates
GET /record/v1/revRecTemplate?q=isInactive=false
Find Monthly Templates
GET /record/v1/revRecTemplate?q=recurrencePattern='MONTHLY'
Find Templates by Amortization Type
GET /record/v1/revRecTemplate?q=amortizationType='STRAIGHTLINE'
Find Templates by Period
GET /record/v1/revRecTemplate?q=periodOffset=12
Common Use Cases
1. Create Standard Subscription Templates
const templates = [
{
name: "Monthly Subscription",
description: "1-month subscription",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 1
},
{
name: "Annual Subscription",
description: "12-month subscription",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 12
},
{
name: "Bi-Annual Subscription",
description: "24-month subscription",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 24
}
];
for (const template of templates) {
await createRevRecTemplate(template);
}
2. Create Service Contract Template
await createRevRecTemplate({
name: "Professional Services - 6 Month",
description: "Professional services contract over 6 months",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 6,
deferralAccount: { id: "150" },
destinationAccount: { id: "400" }
});
3. Create Software License Template
await createRevRecTemplate({
name: "Enterprise Software License",
description: "3-year enterprise software license",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 36
});
4. Update Template Configuration
await patchRevRecTemplate(templateId, {
periodOffset: 18,
description: "Updated to 18-month template"
});
5. Deactivate Old Template
await patchRevRecTemplate(oldTemplateId, {
isInactive: true,
description: "Deprecated - Use new 2026 templates"
});
Important Notes
Required Fields
name- Template name is requiredamortizationType- Amortization method is requiredrecurrencePattern- Recurrence pattern is required
Template vs. Schedule
- Templates: Reusable patterns for revenue recognition
- Schedules: Instance-specific recognition plans
- Templates are applied to items; schedules are created from templates for transactions
Amortization Types
Common amortization type values:
STRAIGHTLINE- Equal amounts across all periodsCUSTOMTEMPLATE- Custom-defined recognition patternIMMEDIATE- Immediate recognition (100% upfront)PERCENTAGE- Percentage-based recognition
Recurrence Patterns
Common recurrence pattern values:
MONTHLY- Monthly recognitionQUARTERLY- Quarterly recognitionANNUALLY- Annual recognitionWEEKLY- Weekly recognitionDAILY- Daily recognition
Period Offset
- Defines the total number of recognition periods
- Monthly with offset 12 = 12 months
- Quarterly with offset 4 = 4 quarters (1 year)
- Not required if using custom recognition pattern
Account Configuration
- Deferral Account: Unearned/deferred revenue account
- Destination Account: Earned revenue account
- Accounts can be specified at template, item, or transaction level
- Template accounts serve as defaults
Template Activation
- Inactive templates cannot be assigned to new items
- Existing items retain their template assignment
- Deactivating a template doesn't affect active recognition schedules
Best Practices
- Create templates for each common contract length
- Use clear, descriptive names (include duration and frequency)
- Document business rules and use cases in description field
- Test templates with sample transactions before production
- Version template names when creating updates (e.g., "Annual Subscription v2")
- Deactivate obsolete templates rather than deleting them
Integration with Items and Transactions
- Items: Assign templates to subscription, service, or license items
- Transactions: When item is sold, template creates actual recognition schedule
- Billing Schedules: Coordinate with billing schedules for subscription revenue
- Fair Value: Use
useFairValuefor multi-element arrangements
ASC 606 / IFRS 15 Compliance
- Templates support compliance with revenue recognition standards
- Ensure templates align with performance obligations
- Document the business rationale for recognition patterns
- Consider separate templates for different types of obligations
- Review templates when contract terms change
Common Template Patterns
SaaS Subscriptions
{
name: "SaaS Annual",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 12
}
Professional Services
{
name: "Professional Services - Fixed Fee",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 6
}
Software Licenses
{
name: "Perpetual License with Support",
amortizationType: { id: "CUSTOMTEMPLATE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 36
}
Warranties and Support
{
name: "Extended Warranty - 2 Year",
amortizationType: { id: "STRAIGHTLINE" },
recurrencePattern: { id: "MONTHLY" },
periodOffset: 24
}
See Also
- Revenue Recognition Schedule - Individual recognition schedules
- Inventory Item - Assign templates to items
- Invoice - Create invoices with revenue recognition
- Journal Entry - Recognition journal entries