MoneyStyle API Documentation
REST API for programmatic access to your MoneyStyle data.
Authentication
All requests require a Bearer token. Generate your API key in Settings → Integrations → API.
curl -H "Authorization: Bearer ms_your_api_key" \ https://moneystyle.app/api/v1/transactions
Transactions
/api/v1/transactionsList transactions with filtering, sorting, and pagination.
Query Parameters:
pagenumberPage number (default: 1)pageSizenumberItems per page (default: 20, max: 100)sortBystringSort field: date, amount, type, merchantsortOrderstringasc or desc (default: desc)dateFromstringISO date filter (gte)dateTostringISO date filter (lte)typestringincome, expense, transfer, othercategoryIdstringFilter by category IDaccountIdstringFilter by account IDmerchantstringCase-insensitive substring matchconfirmedbooleanFilter by confirmation statusResponse:
{
"data": [
{
"id": "clx...",
"date": "2026-03-19T00:00:00.000Z",
"amount": 45.99,
"currency": "USD",
"type": "expense",
"merchant": "Amazon",
"description": null,
"source": "manual",
"confirmed": true,
"category": { "id": "...", "name": "Shopping", "color": "#f59e0b" },
"account": { "id": "...", "name": "Cash", "type": "cash" },
"tags": [{ "id": "...", "name": "Online", "color": "#6366f1" }],
"createdAt": "2026-03-19T10:30:00.000Z"
}
],
"total": 142,
"page": 1,
"pageSize": 20,
"totalPages": 8
}/api/v1/transactionsCreate a new transaction.
Request Body:
{
"date": "2026-03-19", // required
"type": "expense", // required: income, expense, transfer, other
"accountId": "clx...", // required
"amount": 45.99, // optional
"currency": "USD", // optional (default: your primary currency)
"merchant": "Amazon", // optional
"description": "Books", // optional
"categoryId": "clx...", // optional
"tagIds": ["clx..."], // optional
"spreadMonths": null // optional: 2-24
}Response:
{
"id": "clx...",
"date": "2026-03-19T00:00:00.000Z",
"amount": 45.99,
"currency": "USD",
"type": "expense",
"merchant": "Amazon",
"category": { "id": "...", "name": "Shopping", "color": "#f59e0b" },
"account": { "id": "...", "name": "Cash", "type": "cash" },
"createdAt": "2026-03-19T10:30:00.000Z"
}/api/v1/transactions/:idGet a single transaction with line items.
/api/v1/transactions/:idUpdate a transaction. All fields optional.
Request Body:
{
"amount": 50.00,
"merchant": "Amazon Prime"
}/api/v1/transactions/:idDelete a transaction.
Categories
/api/v1/categoriesList all categories with transaction counts.
Response:
{
"data": [
{ "id": "clx...", "name": "Groceries", "color": "#10b981", "icon": null, "transactionCount": 45 }
]
}/api/v1/categoriesCreate a category.
Request Body:
{ "name": "Groceries", "color": "#10b981" }/api/v1/categories/:idGet a single category.
/api/v1/categories/:idUpdate a category.
Request Body:
{ "name": "Food", "color": "#22c55e" }/api/v1/categories/:idDelete a category.
Accounts
/api/v1/accountsList all accounts with transaction counts.
Response:
{
"data": [
{ "id": "clx...", "name": "Cash", "type": "cash", "bank": null, "color": "#3b82f6", "icon": null, "transactionCount": 120 }
]
}/api/v1/accountsCreate an account.
Request Body:
{ "name": "Savings", "type": "bank", "bank": "Chase", "color": "#3b82f6" }/api/v1/accounts/:idGet a single account.
/api/v1/accounts/:idUpdate an account.
Request Body:
{ "name": "Main Checking" }/api/v1/accounts/:idDelete an account (must have 0 transactions).
Error Handling
All errors return JSON with an error field:
// 401 Unauthorized
{ "error": "Invalid API key" }
// 404 Not Found
{ "error": "Transaction not found" }
// 422 Validation Error
{ "error": "date is required, type is required" }
// 409 Conflict
{ "error": "Category already exists" }Rate Limits
Currently no rate limits are enforced. Please be reasonable with your usage.