Skip to main content
The Transactions API provides endpoints for managing financial transactions, including filtering, updating, categorization, import/export, and AI-powered features.

Query Endpoints

get

Retrieve a paginated list of transactions.
start
string
Start date filter (ISO 8601)
end
string
End date filter (ISO 8601)
bankAccountId
string
Filter by bank account UUID
categorySlug
string
Filter by category slug
q
string
Search query for transaction name/description
exported
boolean
Filter by export status
fulfilled
boolean
Filter by fulfillment status (has category and attachments)
attachments
string
Filter by attachment status: “include” | “exclude”
sort
array
Array of sort objects
import { trpc } from '@/lib/trpc';

const { data, meta } = await trpc.transactions.get.query({
  start: '2024-01-01',
  end: '2024-12-31',
  bankAccountId: 'account-uuid',
  categorySlug: 'office-supplies',
  fulfilled: false,
});

getById

Retrieve a specific transaction by ID.
id
string
required
Transaction UUID
transaction
object
const transaction = await trpc.transactions.getById.query({
  id: 'transaction-uuid',
});

getReviewCount

Get the count of transactions ready for export review.
count
number
Number of transactions ready for review

getSimilarTransactions

Find similar transactions based on name, category, and frequency.
name
string
required
Transaction name to match
categorySlug
string
Category slug to match
frequency
string
Transaction frequency pattern
transactionId
string
Exclude this transaction ID from results
transactions
array
Array of similar transaction objects
const similar = await trpc.transactions.getSimilarTransactions.query({
  name: 'Amazon',
  categorySlug: 'office-supplies',
});

searchTransactionMatch

Search for transaction matches (used for inbox matching).
query
string
required
Search query
inboxId
string
Inbox item ID to match against
maxResults
number
Maximum number of results (default: 10)
minConfidenceScore
number
Minimum confidence score (0-1)
includeAlreadyMatched
boolean
Include transactions already matched to other inbox items
matches
array
Array of matching transactions with confidence scores

Mutation Endpoints

create

Create a new manual transaction.
bankAccountId
string
required
Bank account UUID
date
string
required
Transaction date (ISO 8601)
name
string
required
Transaction description
amount
number
required
Transaction amount (positive for income, negative for expenses)
currency
string
required
Three-letter currency code
categorySlug
string
Category slug
note
string
Internal note
const transaction = await trpc.transactions.create.mutate({
  bankAccountId: 'account-uuid',
  date: '2024-11-15',
  name: 'Office supplies',
  amount: -129.99,
  currency: 'USD',
  categorySlug: 'office-supplies',
});

update

Update a transaction.
id
string
required
Transaction UUID
categorySlug
string
New category slug (null to remove)
note
string
Internal note
assigned
object
Assigned user for the transaction
const updated = await trpc.transactions.update.mutate({
  id: 'transaction-uuid',
  categorySlug: 'travel',
  note: 'Business trip to NYC',
});

updateMany

Bulk update multiple transactions.
ids
array
required
Array of transaction UUIDs
categorySlug
string
Category to apply to all
note
string
Note to apply to all
await trpc.transactions.updateMany.mutate({
  ids: ['uuid1', 'uuid2', 'uuid3'],
  categorySlug: 'marketing',
});

deleteMany

Delete multiple transactions.
ids
array
required
Array of transaction UUIDs to delete
await trpc.transactions.deleteMany.mutate({
  ids: ['uuid1', 'uuid2'],
});

moveToReview

Move a transaction to the review queue for export.
transactionId
string
required
Transaction UUID
await trpc.transactions.moveToReview.mutate({
  transactionId: 'transaction-uuid',
});

Import & Export

import

Import transactions from a CSV file.
filePath
array
required
Path tokens to the uploaded CSV file
bankAccountId
string
required
Bank account UUID to import to
currency
string
required
Currency code for transactions
mappings
object
required
CSV column mappings
currentBalance
string
Current account balance (for manual accounts)
inverted
boolean
Whether to invert transaction amounts
jobId
string
Background job ID for tracking import progress
const { jobId } = await trpc.transactions.import.mutate({
  filePath: ['uploads', 'team-id', 'transactions.csv'],
  bankAccountId: 'account-uuid',
  currency: 'USD',
  mappings: {
    date: 'Date',
    description: 'Description',
    amount: 'Amount',
  },
  inverted: false,
});

export

Export transactions to CSV format.
transactionIds
array
Specific transaction UUIDs to export (exports all if not provided)
locale
string
required
Locale for formatting (e.g., “en-US”)
dateFormat
string
required
Date format string (e.g., “yyyy-MM-dd”)
exportSettings
object
required
Export configuration
jobId
string
Background job ID - file will be emailed when ready
const { jobId } = await trpc.transactions.export.mutate({
  locale: 'en-US',
  dateFormat: 'MM/dd/yyyy',
  exportSettings: {
    includeAttachments: true,
    columns: ['date', 'description', 'amount', 'category'],
  },
});

AI Features

generateCsvMapping

Use AI to automatically detect CSV column mappings for import.
fieldColumns
array
required
Array of column names from the CSV file
firstRows
array
required
Sample data rows from the CSV (first 5-10 rows)
mappings
object
const mappings = await trpc.transactions.generateCsvMapping.mutate({
  fieldColumns: ['Date', 'Merchant', 'Amount', 'Balance'],
  firstRows: [
    ['2024-01-15', 'Amazon', '-29.99', '1000.00'],
    ['2024-01-16', 'Starbucks', '-5.50', '994.50'],
  ],
});

// Use detected mappings for import
console.log(mappings);
// { date: 'Date', counterparty: 'Merchant', amount: 'Amount', balance: 'Balance' }
The AI mapping uses Claude 3 Haiku and intelligently detects column purposes based on headers and sample data. Results are cached to avoid duplicate API calls.

Build docs developers (and LLMs) love