Docs / Resources
Vendors
The companies you pay on a recurring basis, detected and deduplicated automatically.
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 vendor is a company you pay on a recurring basis. Trimline creates vendors automatically from invoices, receipts and card transactions, and merges duplicates. For example, “Acme Inc.” on an invoice and “ACME*SUBSCR” on a card statement become one vendor.
Endpoints
- GET/v1/vendorsList vendors
- GET/v1/vendors/:idRetrieve a vendor
- PATCH/v1/vendors/:idUpdate preferences
The vendor object
{
"id": "ven_9xKd02",
"object": "vendor",
"name": "Acme CRM",
"domain": "acmecrm.com",
"category": "crm",
"status": "active",
"annual_spend": { "amount": 3840000, "currency": "usd" },
"seats": { "paid": 40, "active": 31, "measured_at": "2026-11-02T06:00:00Z" },
"keep": false,
"owner_email": "sam@northwind.example",
"contracts": ["ctr_4Lw7Yh"],
"first_seen_at": "2024-02-14T00:00:00Z",
"created_at": "2026-10-02T14:20:51Z",
"livemode": false
}
namestring | The vendor’s normalized display name. |
categoryenum | One of crm, communication, design, engineering, analytics, security, finance, hr, marketing, support, infrastructure or other. |
statusenum | active while you’re paying them, cancelled once the last contract has ended. |
annual_spendmoney | Your annualized spend across all active contracts with this vendor. |
seatsobject, nullable | Seats paid for and seats active in the last 60 days, when we can measure them through a connected SSO or admin export. null for vendors that aren’t priced per seat. |
keepboolean | If true, negotiations never threaten to cancel or mention competitors. |
owner_emailstring, nullable | The person inside your company who owns the relationship. They’re copied on drafts if you enable it. |
List vendors
GET/v1/vendors
statusenum | Filter by active or cancelled. |
categoryenum | Filter by category. |
annual_spend[gte]integer | Minimum annual spend, in minor units. |
qstring | Search by name or domain. |
curl -G https://api.trimline.tech/v1/vendors \
-H "Authorization: Bearer $TRIMLINE_API_KEY" \
-d "status=active" \
-d "annual_spend[gte]=500000"
Retrieve a vendor
GET/v1/vendors/:id
Add expand[]=contracts to get full contract objects instead of IDs.
curl -G https://api.trimline.tech/v1/vendors/ven_9xKd02 \
-H "Authorization: Bearer $TRIMLINE_API_KEY" \
-d "expand[]=contracts"
Update a vendor
PATCH/v1/vendors/:id
You can change your preferences for a vendor. Fields we derive from your data, such as annual_spend, are read-only.
keepboolean | Mark the vendor as must-keep. |
owner_emailstring | Set or clear the internal owner. |
categoryenum | Correct a category we got wrong. |
ignoreboolean | Hide the vendor from the ledger and never negotiate with them, for example a one-off purchase that looked recurring. |
curl -X PATCH https://api.trimline.tech/v1/vendors/ven_9xKd02 \
-H "Authorization: Bearer $TRIMLINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "keep": true, "owner_email": "priya@northwind.example" }'
Something unclear or missing? Email developers@trimline.tech.