Core Resources

Vendors & Categories

List and create the vendors and expense categories used to classify expenses.

Overview

Vendors are who you pay (Azure, Uber, your accountant). Expense categories group expenses for reports (Travel, Software & subscriptions...). Both are scoped to a company and belong to the Expenses module: if it is turned off, these endpoints return 403 with code expenses_module_disabled.

MethodPathPermissionDescription
GET/v1/vendorsreadList vendors (cursor pagination, query search by name)
POST/v1/vendorswriteCreate a vendor, or return the existing one with the same name
GET/v1/expense-categoriesreadList all expense categories of the company

List Vendors

1# All vendors (most recent first)
2curl "https://api.corebill.io/v1/vendors?limit=50" \
3 -H "Authorization: Bearer sk_live_your_api_key"
4
5# Search by name
6curl "https://api.corebill.io/v1/vendors?query=azure" \
7 -H "Authorization: Bearer sk_live_your_api_key"

Create a Vendor

Only name is required. If a vendor with the same name already exists (case-insensitive), it is returned with status 200 instead of creating a duplicate; a new vendor returns 201.

1curl -X POST "https://api.corebill.io/v1/vendors" \
2 -H "Authorization: Bearer sk_live_your_api_key" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "name": "Microsoft Azure",
6 "tax_id": "US-91-1144442",
7 "email": "billing@microsoft.com"
8 }'
FieldTypeRequiredDescription
namestringYesVendor name (max 160 chars)
tax_idstringNoVendor tax / VAT id
emailstringNoContact email
The Vendor object
1{
2 "id": "ven_x1y2z3",
3 "object": "vendor",
4 "name": "Microsoft Azure",
5 "tax_id": "US-91-1144442",
6 "email": "billing@microsoft.com",
7 "created_at": "2026-09-01T14:30:00Z",
8 "updated_at": "2026-09-01T14:30:00Z"
9}

List Expense Categories

Returns every category of the company in display order (it is a short catalog, so has_more is always false). Each company starts with a default set; defaults have a stable system_key (software, payment_fees, meals, travel, marketing, office, professional_services, equipment, taxes_fees, other) while custom categories have system_key: null.

1curl "https://api.corebill.io/v1/expense-categories" \
2 -H "Authorization: Bearer sk_live_your_api_key"
JSON
1{
2 "object": "list",
3 "url": "/v1/expense-categories",
4 "data": [
5 { "id": "exc_k7l8m9", "object": "expense_category", "name": "Software & subscriptions", "system_key": "software", "sort_order": 0 },
6 { "id": "exc_p4q5r6", "object": "expense_category", "name": "Travel", "system_key": "travel", "sort_order": 3 },
7 { "id": "exc_z9y8x7", "object": "expense_category", "name": "Coworking", "system_key": null, "sort_order": 100 }
8 ],
9 "has_more": false,
10 "next_cursor": null
11}

There is no endpoint to create categories directly: send category_name when creating or updating an expense and the category is created if it does not exist.