Skip to main content

How do I sync a Rillet contract amendment into my revenue recognition schedule?

Call Rillet's amend-a-contract endpoint with an amendment_date, an amendment_reason, and the changed items, choosing whether each item takes effect as of the amendment date or at the end of the current billing cycle. Rillet regenerates the affected revenue schedule and journal impact for review before anything posts.

Zuny FesterBy Zuny Fester, Head of Operations and Marketing
Reviewed by Zuny Fester
Published Last reviewed Editorial policy

Part of the finance integrations guide.

EndpointPOST /contracts/{contract_id}/amendments
Required fieldsamendment_date, amendment_reason, items
Item timing optionsAS_OF_AMENDMENT_DATE or END_OF_CURRENT_BILLING_CYCLE, set per item
Constraint on amendment_dateCannot be earlier than the contract's previous amendment date
ResponseAn ExpandedContract object with the updated contract and its invoices

Why an amendment is a distinct action, not a re-created contract

Rillet's contract model is built around amendments as first-class events, not as a delete-and-recreate. A mid-term seat expansion, a pricing change, or a term extension is submitted as an amendment against the existing contract, and Rillet's revenue engine regenerates the affected part of the schedule and the resulting journal impact for review before anything posts to the ledger — rather than requiring you to compute the accounting effect of the change yourself. This matters for revenue recognition specifically because ASC 606 modification accounting depends on treating a change to an existing performance obligation differently from a brand-new one, and Rillet's amendment object is what carries that distinction through to the schedule.

The two timing options, and why the choice matters for revenue recognition

Every amended item carries an effective_from setting of either AS_OF_AMENDMENT_DATE or END_OF_CURRENT_BILLING_CYCLE. The first applies the change immediately, prorating the current period; the second defers it to the start of the next billing cycle, leaving the current period's revenue schedule untouched. Picking the wrong one for a given change is one of the most common ways a contract-to-cash sync goes quietly wrong — a mid-cycle price increase applied AS_OF_AMENDMENT_DATE will proportionally restate the current period's recognized revenue, which is correct for a genuine mid-term repricing but wrong if the actual business intent was for the new price to apply starting next cycle.

The two contract scopes take different amendment payloads

A standard (FULL scope) contract's amendment requires an invoicing block specifying billing frequency and payment terms, because the contract governs both billing and revenue recognition together. A REVENUE_RECOGNITION_ONLY contract — used when invoicing happens in a separate, external billing system and Rillet only tracks the revenue side — instead requires an invoice_schedule block that maps expected revenue to specific invoice dates and amounts issued elsewhere. Sending a FULL-scope amendment payload against a REVENUE_RECOGNITION_ONLY contract, or vice versa, is a common integration mistake, since the two payload shapes look similar but aren't interchangeable.

What to check after an amendment posts

The response is an ExpandedContract object containing the updated contract and its associated invoices — confirm the item-level effective_from behavior actually landed where you expected before treating the sync as complete. If revenue for the current period looks unchanged after an amendment you expected to be immediate, check whether the item was set to END_OF_CURRENT_BILLING_CYCLE by default rather than AS_OF_AMENDMENT_DATE; that's the single most common cause of an amendment appearing to have no effect.

Next step

Map the finance workflow with the most exposure and prove the automation path.

Bring the invoice, contract, payment reconciliation, or customer finance workflow you have to defend at audit. Loopfour can map the trigger, controls, integrations, and approval loop.

Book a workflow review

Field mapping

A mid-term seat expansion, two ways

A customer on a 24-month contract expands from 50 to 75 seats on day 10 of a 30-day billing cycle. Submitted with amendment_date set to day 10 and the new seat-count item's effective_from set to AS_OF_AMENDMENT_DATE, Rillet prorates the additional 25 seats for the remaining 20 days of the current cycle and restates the current period's revenue schedule to reflect it immediately. Submitted with the same amendment_date but effective_from set to END_OF_CURRENT_BILLING_CYCLE instead, the current period's schedule is left untouched and the 75-seat rate only takes effect starting the next cycle — the current period closes as if the amendment hadn't happened yet. Both are valid outcomes; the difference is entirely in which effective_from value was sent, which is why that field is the first thing to check when a synced amendment doesn't match what finance expected.

Frequently Asked Questions

Yes — the items array on an amendment supports terminated items in addition to new and amended ones, which is how a downgrade or a removed line item is represented rather than deleting it from history.

The request is rejected — amendment_date cannot be earlier than the previous amendment date on a contract that has already been amended, since amendments are applied in chronological order.

No — that contract type exists specifically for cases where invoicing happens in an external system, so its amendment payload updates the invoice_schedule (the expected revenue-to-invoice mapping) rather than any actual billing frequency or payment terms.

Sources

Related