Skip to main content

Revenue Recognition Template API

Create, read, update, and delete revenue recognition template records using the NetSuite REST API.


Endpoints​

MethodEndpointDescription
GET/record/v1/revRecTemplateList all revenue recognition templates
GET/record/v1/revRecTemplate/{id}Get specific template
POST/record/v1/revRecTemplateCreate 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​

FieldTypeDescriptionRequired
idstringInternal ID (read-only)-
namestringTemplate nameYes
isInactivebooleanInactive flagNo

Template Configuration​

FieldTypeDescriptionRequired
amortizationTypeobjectAmortization methodYes
recurrencePatternobjectRecurrence patternYes
periodOffsetnumberNumber of periodsNo

Advanced Settings​

FieldTypeDescriptionRequired
descriptionstringTemplate descriptionNo
deferralAccountobjectDeferred revenue accountNo
destinationAccountobjectRecognition accountNo

Recognition Pattern​

FieldTypeDescriptionRequired
recognitionPatterncollectionCustom recognition patternNo
useFairValuebooleanUse fair value allocationNo

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 required
  • amortizationType - Amortization method is required
  • recurrencePattern - 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 periods
  • CUSTOMTEMPLATE - Custom-defined recognition pattern
  • IMMEDIATE - Immediate recognition (100% upfront)
  • PERCENTAGE - Percentage-based recognition

Recurrence Patterns​

Common recurrence pattern values:

  • MONTHLY - Monthly recognition
  • QUARTERLY - Quarterly recognition
  • ANNUALLY - Annual recognition
  • WEEKLY - Weekly recognition
  • DAILY - 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 useFairValue for 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​