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.
Part of the finance integrations guide.
| Endpoint | POST /contracts/{contract_id}/amendments |
|---|---|
| Required fields | amendment_date, amendment_reason, items |
| Item timing options | AS_OF_AMENDMENT_DATE or END_OF_CURRENT_BILLING_CYCLE, set per item |
| Constraint on amendment_date | Cannot be earlier than the contract's previous amendment date |
| Response | An 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.
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
Sources
Related
Topic
Integrations
Every finance automation vendor publishes an integrations page: a grid of logos, a claim of "seamless" connectivity, and not much else. That page answers a marketing question — does this vendor touch…
Read moreDiagnostic
Why is Avalara rejecting a sales invoice with a DocumentCodeConflict error?
A DocumentCodeConflict means the document code you sent already belongs to a committed transaction in AvaTax. The fix is not a fresh code — retrying with a new code every time is exactly what creates duplicate tax transactions on a real network retry. Keep the code stable, derived from the source invoice, and call the adjust or void endpoint if the original genuinely needs to change.
Read moreDiagnostic
Why doesn't an uncommitted Avalara transaction show up on my sales tax return?
AvaTax only reports committed transactions. Commit status is a flag that determines whether a transaction appears on your compliance reports and gets remitted — uncommitted transactions are treated as provisional and are excluded from liability calculations and filings until someone explicitly commits them.
Read more