Docs / Resources
Savings
Confirmed savings, how they were calculated, and the fee that applies.
Beta. The Trimline API is available to private beta customers. Endpoints may change before general availability in June 2027, and every breaking change is announced in the changelog. Request access.
A savings record is created when a renewal closes on better terms than the vendor proposed. It shows how the savings were calculated and what fee applies, using the rules on our pricing page. We never invoice from an estimate: a record has to be confirmed against the vendor’s first invoice at the new price.
Endpoints
- GET/v1/savingsList savings
- GET/v1/savings/:idRetrieve a savings record
- GET/v1/savings/summaryTotals for a period
- POST/v1/savings/:id/disputeDispute a calculation
The savings object
{
"id": "sav_2Zb6Kp",
"object": "savings",
"renewal": "ren_1Pq8sT2v",
"vendor": { "id": "ven_9xKd02", "name": "Acme CRM" },
"status": "confirmed",
"baseline": {
"annual_value": { "amount": 3840000, "currency": "usd" },
"source": "renewal_notice",
"document": "doc_77Qe"
},
"new_annual_value": { "amount": 2995000, "currency": "usd" },
"first_year_savings": { "amount": 845000, "currency": "usd" },
"components": [
{ "lever": "seats", "amount": { "amount": 768000, "currency": "usd" }, "note": "40 → 32 seats" },
{ "lever": "price", "amount": { "amount": 77000, "currency": "usd" }, "note": "Per-seat rate reduced" }
],
"fee_rate": 0.25,
"fee": { "amount": 211250, "currency": "usd" },
"confirmed_at": "2027-02-04T09:12:00Z",
"invoice": "inv_8Jd3",
"livemode": false
}
statusenum | estimated (terms agreed, first invoice not yet received), confirmed, invoiced, disputed or void. |
baselineobject | The price we measured against and the document that proves it, such as a renewal notice, quote or current contract. |
componentsarray | The breakdown by lever. The amounts always add up to first_year_savings. |
List savings
GET/v1/savings
Filter by status, vendor or confirmed_at[gte].
Summary
GET/v1/savings/summary
Totals for a date range, handy for a board deck or an FP&A sync.
curl -G https://api.trimline.tech/v1/savings/summary \
-H "Authorization: Bearer $TRIMLINE_API_KEY" \
-d "from=2027-01-01" -d "to=2027-03-31"
{
"object": "savings_summary",
"from": "2027-01-01",
"to": "2027-03-31",
"renewals_closed": 7,
"first_year_savings": { "amount": 2114000, "currency": "usd" },
"fees": { "amount": 528500, "currency": "usd" },
"net_savings": { "amount": 1585500, "currency": "usd" },
"by_lever": { "seats": 1012000, "price": 640000, "uplift": 312000, "term": 150000 }
}
Dispute a calculation
POST/v1/savings/:id/dispute
If you think a baseline or saving is wrong, dispute it with a short reason. The record moves to disputed, no invoice goes out, and a person on our team replies within two business days.
Something unclear or missing? Email developers@trimline.tech.