Skip to main content

Revenue Recognition Schedule API

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


Endpoints​

MethodEndpointDescription
GET/record/v1/revRecScheduleList all revenue recognition schedules
GET/record/v1/revRecSchedule/{id}Get specific schedule
POST/record/v1/revRecScheduleCreate new schedule
PATCH/record/v1/revRecSchedule/{id}Update existing schedule
DELETE/record/v1/revRecSchedule/{id}Delete schedule

Base URL​

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

Key Fields​

Basic Information​

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

Schedule Configuration​

FieldTypeDescriptionRequired
amortizationTypeobjectAmortization methodYes
recurrenceTypeobjectRecurrence frequencyYes
periodOffsetnumberNumber of periodsYes
initialAmountnumberInitial recognition amountNo

Advanced Settings​

FieldTypeDescriptionRequired
scheduledDatestringSchedule start dateNo
deferralAccountobjectDeferred revenue accountNo
destinationAccountobjectRecognition destination accountNo

Recognition Settings​

FieldTypeDescriptionRequired
recognitionAccountobjectRevenue recognition accountNo
useForeignAmountsbooleanUse foreign currencyNo

Example: Create Revenue Recognition Schedule​

POST /record/v1/revRecSchedule
Content-Type: application/json
Authorization: Bearer {access_token}
{
"name": "Annual Software License",
"amortizationType": {
"id": "STRAIGHTLINE"
},
"recurrenceType": {
"id": "MONTHLY"
},
"periodOffset": 12,
"isInactive": false
}

Response​

{
"links": [
{
"rel": "self",
"href": "https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/revRecSchedule/25"
}
],
"id": "25",
"name": "Annual Software License",
"amortizationType": {
"id": "STRAIGHTLINE",
"refName": "Straight Line"
},
"recurrenceType": {
"id": "MONTHLY",
"refName": "Monthly"
},
"periodOffset": 12,
"isInactive": false
}

Example: Create Quarterly Recognition Schedule​

POST /record/v1/revRecSchedule
Content-Type: application/json
{
"name": "Quarterly Service Contract",
"amortizationType": {
"id": "STRAIGHTLINE"
},
"recurrenceType": {
"id": "QUARTERLY"
},
"periodOffset": 4,
"isInactive": false
}

Example: Create Custom Recognition Schedule​

POST /record/v1/revRecSchedule
Content-Type: application/json
{
"name": "18-Month Product Warranty",
"amortizationType": {
"id": "STRAIGHTLINE"
},
"recurrenceType": {
"id": "MONTHLY"
},
"periodOffset": 18,
"deferralAccount": {
"id": "150"
},
"destinationAccount": {
"id": "400"
},
"isInactive": false
}

Example: Update Recognition Schedule​

PATCH /record/v1/revRecSchedule/25
Content-Type: application/json
{
"periodOffset": 24,
"name": "Bi-Annual Software License"
}
Partial Updates

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


Query Filters​

Find Schedules by Name​

GET /record/v1/revRecSchedule?q=name LIKE 'Annual%'

Find Active Schedules​

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

Find Monthly Schedules​

GET /record/v1/revRecSchedule?q=recurrenceType='MONTHLY'

Find Schedules by Period Length​

GET /record/v1/revRecSchedule?q=periodOffset=12

Find Straight-Line Schedules​

GET /record/v1/revRecSchedule?q=amortizationType='STRAIGHTLINE'

Common Use Cases​

1. Create Standard Subscription Schedules​

const schedules = [
{
name: "Monthly Subscription",
amortizationType: { id: "STRAIGHTLINE" },
recurrenceType: { id: "MONTHLY" },
periodOffset: 1
},
{
name: "Annual Subscription",
amortizationType: { id: "STRAIGHTLINE" },
recurrenceType: { id: "MONTHLY" },
periodOffset: 12
},
{
name: "3-Year License",
amortizationType: { id: "STRAIGHTLINE" },
recurrenceType: { id: "MONTHLY" },
periodOffset: 36
}
];

for (const schedule of schedules) {
await createRevRecSchedule(schedule);
}

2. Create Service Contract Schedule​

await createRevRecSchedule({
name: "24-Month Service Contract",
amortizationType: { id: "STRAIGHTLINE" },
recurrenceType: { id: "MONTHLY" },
periodOffset: 24,
deferralAccount: { id: "150" },
destinationAccount: { id: "400" }
});

3. Update Schedule Period​

await patchRevRecSchedule(scheduleId, {
periodOffset: 18,
name: "Updated 18-Month Schedule"
});

4. Deactivate Obsolete Schedule​

await patchRevRecSchedule(oldScheduleId, {
isInactive: true
});

Important Notes​

Required Fields​

  • name - Schedule name is required
  • amortizationType - Amortization method is required
  • recurrenceType - Recurrence frequency is required
  • periodOffset - Number of periods is required

Amortization Types​

Common amortization type values:

  • STRAIGHTLINE - Equal amounts over all periods
  • CUSTOMTEMPLATE - Custom recognition pattern
  • IMMEDIATE - Recognize immediately

Recurrence Types​

Common recurrence frequency values:

  • MONTHLY - Monthly recognition
  • QUARTERLY - Quarterly recognition
  • ANNUALLY - Annual recognition
  • DAILY - Daily recognition
  • WEEKLY - Weekly recognition

Period Offset Calculation​

  • Represents the number of periods over which revenue is recognized
  • For monthly recurrence with 12 period offset = 12 months (1 year)
  • For quarterly recurrence with 4 period offset = 4 quarters (1 year)

Account Configuration​

  • Deferral Account: Where unearned revenue is initially recorded
  • Destination Account: Where revenue is recognized over time
  • If not specified, uses default accounts from transaction or item setup

Schedule Activation​

  • Inactive schedules cannot be assigned to new items or transactions
  • Existing items/transactions continue using their original schedule
  • Consider creating new schedules rather than modifying active ones

Best Practices​

  • Use descriptive naming that includes the period length (e.g., "12-Month Subscription")
  • Create templates for common recognition patterns
  • Test schedules with sample transactions before production use
  • Document the business purpose of each schedule
  • Review and update schedules when accounting policies change

Integration with Revenue Recognition​

  • Items: Assign schedules to subscription or service items
  • Transactions: Revenue recognition is automatically calculated from schedules
  • Journal Entries: System generates recognition journal entries based on schedule
  • Revenue Recognition Templates: Use templates for more complex patterns

ASC 606 / IFRS 15 Compliance​

  • Revenue recognition schedules help comply with revenue recognition standards
  • Ensure schedules match contract terms and performance obligations
  • Consider multi-element arrangements and allocation requirements
  • Document the rationale for recognition patterns

Common Recognition Patterns​

  • Software Licenses: 12-36 months, monthly recognition
  • Service Contracts: Contract length, monthly/quarterly recognition
  • Warranties: Warranty period, monthly recognition
  • Subscriptions: Subscription term, monthly recognition
  • Maintenance: Maintenance period, monthly/quarterly recognition

See Also​