Classify transactions
Already have structured transaction data? Submit your customer's bank transactions for classification and enrichment.
Prefer using the web app?
When you submit transaction data in the Walker Street Data sandbox application, classification is handled automatically in the background. This guide details the equivalent workflow using the API.
What You Need
- Customer ID see Create a Customer
- Structured transaction data with date, amount, description, and balance
- Account details: Account name, number, BSB, bank name, account type
- At least one transaction to process
Submit Your Transactions
- cURL
- JavaScript
curl -X POST "https://api.walkerstdata.com.au/v1/customer/{customerId}/transactions" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"transactions": [
{
"transactionDate": "2025-04-09",
"amount": 13167,
"description": "Direct Credit 158824 ARNOTT'S BISCUIT",
"balance": 33155.05
},
{
"transactionDate": "2025-04-09",
"amount": -98675.26,
"description": "Multiple Transfer NetBank Batch Payment",
"balance": 19479.79
}
],
"accountName": "ACME Business Pty Ltd",
"accountNumber": "12345678",
"accountType": "Business Transaction Account",
"bsb": "062001",
"bankName": "Commonwealth Bank of Australia"
}'
const customerId = 'your-customer-id';
const transactionData = {
transactions: [
{
transactionDate: "2025-04-09",
amount: 13167,
description: "Direct Credit 158824 ARNOTT'S BISCUIT",
balance: 33155.05
},
{
transactionDate: "2025-04-09",
amount: -98675.26,
description: "Multiple Transfer NetBank Batch Payment",
balance: 19479.79
}
],
accountName: "ACME Business Pty Ltd",
accountNumber: "12345678",
accountType: "Business Transaction Account",
bsb: "062001",
bankName: "Commonwealth Bank of Australia"
};
const response = await fetch(`https://api.walkerstdata.com.au/v1/customer/${customerId}/transactions`, {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify(transactionData)
});
const result = await response.json();
console.log('Classification started, job ID:', result.data.jobId);
You'll get back a jobId to track the classification progress.
What Happens Next
Walker Street Data automatically:
- Identifies the bank and account
- Enriches the transactions by adding further detail and classifications
Check Classification Status
- cURL
- JavaScript
curl -X GET "https://api.walkerstdata.com.au/v1/jobs/{jobId}/status" \
-H "x-api-key: YOUR_API_KEY"
const jobId = 'your-job-id';
const response = await fetch(`https://api.walkerstdata.com.au/v1/jobs/${jobId}/status`, {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY',
}
});
const result = await response.json();
console.log('Status:', result.data.status);
Wait for status to show Completed.
Get Your Classified Transaction Data
Once classification is complete, retrieve your classified transactions:
- cURL
- JavaScript
curl -X GET "https://api.walkerstdata.com.au/v1/customer/{customerId}/transactions?jobId={jobId}" \
-H "x-api-key: YOUR_API_KEY"
const customerId = 'your-customer-id';
const jobId = 'your-job-id';
const response = await fetch(`https://api.walkerstdata.com.au/v1/customer/${customerId}/transactions?jobId=${jobId}`, {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY',
}
});
const result = await response.json();
console.log('Classified transactions:', result.data.transactions);
What You Get
Each enriched transaction includes:
- Original data: Date, amount, description, balance (preserved exactly)
- Unique identifiers: Transaction ID, job ID, customer ID
- Account context: Available in a separate accounts array with bank name, BSB, account number, account type, and account name
- Transaction state: Posted status
- Hierarchical categorization: 3-level classification system
- Level 1: Broad categories (e.g., "expenses", "sales")
- Level 2: Specific categories (e.g., "office_expenses", "credit_sales_eftpos")
- Level 3: The receiving or originating counterparty (when available)
- Confidence scores: Probability scores for each classification level
- Enrichment source: Indicates whether enrichment came from Cypher classification engine or pre-enriched import
Example Response
{
"data": {
"accounts": [
{
"accountId": "54f1c1d0-28e3-42b4-8d9e-f7c3e6b9d2a1",
"bsb": "062000",
"accountNumber": "123456789",
"accountName": "Demo Business Pty Ltd",
"accountType": "Business Account",
"accountPurpose": "Business Operating",
"institutionId": "e1f2b3c4-d5e6-7890-abcd-ef1234567890",
"institutionName": "Commonwealth Bank of Australia"
}
],
"transactions": [
{
"transactionDate": "2025-01-15",
"amount": -125.5,
"description": "WOOLWORTHS 1234",
"balance": 1500.0,
"state": "Posted",
"enrichment": {
"level1": {
"value": "expenses",
"classificationModelId": "exp_model_v1",
"confidence": "0.99"
},
"level2": {
"value": "office_expenses",
"classificationModelId": "exp_office_v1",
"confidence": "0.87"
},
"level3": {
"counterpartyId": "grocery_supplier_001",
"counterpartyABN": "12345678901",
"counterpartyName": "Woolworths Group",
"classificationModelId": "level3_originator_v1",
"confidence": "0.92"
}
},
"enrichmentSource": {
"value": "Cypher"
},
"transactionId": "262b22a7-e9ea-4093-8f46-ce33b9101ca2",
"customerId": "524ba9bc-06e7-417e-bd54-b99785f5194a",
"clientId": "a0ced7e1-da3a-40ea-a18f-4c829f816c6a",
"accountId": "54f1c1d0-28e3-42b4-8d9e-f7c3e6b9d2a1",
"jobId": "34e1bbd4-36be-4d95-9351-a047eed5bf97",
"sourceType": "Classification"
}
],
"totalCount": 1,
"currentPage": null,
"pageSize": 20,
"totalPages": 1
},
"message": null
}
What's Next
With enriched transactions available, you can now request insights for your customer:
- Aggregations — Summarise cashflow and financial behaviour patterns
- Completeness — Assess data coverage and reliability for the assessment
- Risk Score — Get a risk signal for credit decisioning