TraceEntry API Documentation
Integrate AI-powered transaction categorization into your accounting applications. Process single transactions or batches with consistent, accurate results.
API Coming Soon
The TraceEntry REST API is currently in development. Join the waitlist to get early access and help shape the API.
Join API WaitlistBase URL
Use Cases
- Excel Add-ins: Categorize transactions directly in spreadsheets
- Accounting Software: Automate categorization in QuickBooks, Xero integrations
- Bank Feeds: Real-time categorization of incoming transactions
- Batch Processing: Bulk categorization for large transaction files
Authentication
All API requests require authentication using an API key. Include your key in the X-API-Key header.
X-API-Key: te_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Security: Never expose your API key in client-side code. Always make API calls from your server.
Rate Limits
Rate limits ensure fair usage across all users. Limits are applied per API key.
| Endpoint | Rate Limit | Burst |
|---|---|---|
| /v1/categorize | 100 requests/minute | 20 requests |
| /v1/categorize/batch | 10 requests/minute | 5 requests |
Rate limit headers are included in all responses: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
Single Transaction Endpoint
Categorize a single transaction. Ideal for Excel add-ins, Google Sheets, and real-time categorization.
/v1/categorize
Request Body
{
"description": "CHEVRON #12345 BOISE ID",
"amount": -45.67,
"date": "2024-11-15",
"industry": "general"
}
Response
{
"vendor": "Chevron",
"category": "Fuel",
"business_classification": "Clearly Business",
"deductibility": "Fully Deductible",
"confidence": 0.97
}
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| description | string | Yes | Transaction description from bank statement |
| amount | number | No | Transaction amount (negative for debits) |
| date | string | No | Transaction date (YYYY-MM-DD) |
| industry | string | No | Industry template (default: "general") |
Pricing
$0.02 per request
Batch Transactions Endpoint
Categorize multiple transactions in a single request. Most cost-effective for bulk processing as billing is per unique vendor, not per transaction.
/v1/categorize/batch
Request Body
{
"transactions": [
{"id": "1", "description": "CHEVRON #12345", "amount": -45.67, "date": "2024-11-15"},
{"id": "2", "description": "DUTCH BROS", "amount": -6.50, "date": "2024-11-15"},
{"id": "3", "description": "CHEVRON #999", "amount": -52.00, "date": "2024-11-14"}
],
"industry": "general"
}
Response
{
"results": [
{"id": "1", "vendor": "Chevron", "category": "Fuel", "confidence": 0.97},
{"id": "2", "vendor": "Dutch Bros", "category": "Meals & Entertainment", "confidence": 0.94},
{"id": "3", "vendor": "Chevron", "category": "Fuel", "confidence": 0.97}
],
"summary": {
"processed": 3,
"unique_vendors": 2,
"ai_calls_made": 2
},
"billing": {
"unit": "unique_vendors",
"count": 2,
"rate_cents": 2,
"total_cents": 4
}
}
Pricing
$0.02 per unique vendor (not per transaction)
Example: 1,000 transactions with 50 unique vendors = $1.00
Limits
- • Maximum 100,000 transactions per request
- • Request timeout: 5 minutes
- • Async processing available for large batches
Categories Reference
Standard expense categories returned by the API. Industry templates may include additional categories.
Industry Templates
Supported industry templates for optimized categorization accuracy.
| Value | Description |
|---|---|
| general | Default template for most businesses |
| moving_company | Moving and transportation services |
| construction | Construction and contracting |
| restaurant | Restaurant and food service |
| professional_services | Consulting, legal, accounting |
| retail | Retail stores |
| ecommerce | Online stores and marketplaces |
Error Codes
Standard HTTP status codes with detailed error messages.
| Code | Description |
|---|---|
| 200 | Success |
| 400 | Bad Request - Invalid parameters |
| 401 | Unauthorized - Invalid or missing API key |
| 402 | Payment Required - Insufficient balance |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
Error Response Format
{
"error": {
"code": "invalid_parameter",
"message": "The 'description' field is required",
"param": "description"
}
}