FinWise API
SupportChangelog

Create a category

Create a category.

Request body

namestringrequired
Category name.
emojinullable string
Emoji.
colornullable string
Hex color.
transactionCategoryGroupIdnullable string
Group to place it in.
enableRollovernullable boolean
Carry unused budget into the next period. Null follows the user’s rollover preference.
rolloverFromDatenullable string
The budget month rollover counts from, returned as midnight UTC on its 1st. A date (2026-10-01), a month (2026-10), or a date-time with no offset or a non-zero offset (2026-10-01T00:00:00-04:00) is taken as written. Midnight UTC on a 1st names that month. Any other UTC date-time (ending in Z, +00:00 or -00:00) names the month it falls in, in the user’s time zone, or in UTC if they have none. An impossible date, such as 2026-02-31, is a 400.
POST/transaction-categories
curl https://api.finwiseapp.io/transaction-categories \
-X POST \
-H "Authorization: Bearer fw_..." \
-H "Content-Type: application/json" \
-d '{"name":"Groceries","emoji":"🥬","transactionCategoryGroupId":"b11db54c-bc17-558d-9bfc-638791c31b61"}'
const response = await fetch('https://api.finwiseapp.io/transaction-categories', {
method: 'POST',
headers: {
Authorization: 'Bearer fw_...',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Groceries",
"emoji": "🥬",
"transactionCategoryGroupId": "b11db54c-bc17-558d-9bfc-638791c31b61"
}),
})
const data = await response.json()
Response
{
"id": "a00cb43b-ab06-447c-8aeb-527680b20a50",
"createdAt": "2026-03-14T09:15:16.817Z",
"updatedAt": "2026-03-14T09:15:16.817Z",
"name": "Groceries",
"userId": "f472696c-47ac-4873-98cf-2a1069a1cf45",
"transactionCategoryGroupId": "b11db54c-bc17-558d-9bfc-638791c31b61",
"color": "#22c55e",
"emoji": "🥬",
"markTransactionsAsTransfers": null,
"excludeTransactionsFromBudget": null,
"consolidateInBudget": null,
"enableRollover": null,
"rolloverFromDate": null,
"sortIndex": null
}