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