Submit Customer Bank Statement (PDF)
Upload a PDF bank statement for automatic transaction extraction and enrichment.
Endpoint: POST https://api.walkerstdata.com.au/v1/customer/{customerId}/transactions/pdf
File Requirements
- Banks supported: CBA, ANZ, NAB, WBC, Bendigo, BOQ, St George, Suncorp, Tyro
- Format: PDF (machine-readable only; scanned images are not supported)
- File Size: Maximum 10MB
- Content: Bank statement containing transaction data
- Upload Method: Multipart form data
Request
- cURL
- JavaScript
- Python
curl -X POST "https://api.walkerstdata.com.au/v1/customer/a3feb546-bc8f-49b3-8f7b-499b6e0d3a28/transactions/pdf" \
-H "x-api-key: YOUR_API_KEY" \
-F "file=@/path/to/bank_statement.pdf"
const customerId = 'a3feb546-bc8f-49b3-8f7b-499b6e0d3a28';
const fileInput = document.getElementById('pdfFile'); // HTML file input
const file = fileInput.files[0];
const formData = new FormData();
formData.append('file', file);
const response = await fetch(`https://api.walkerstdata.com.au/v1/customer/${customerId}/transactions/pdf`, {
method: 'POST',
headers: {
'x-api-key': 'YOUR_API_KEY',
},
body: formData
});
const result = await response.json();
const jobId = result.data.jobId;
console.log('PDF submitted, job ID:', jobId);
import requests
customer_id = 'a3feb546-bc8f-49b3-8f7b-499b6e0d3a28'
# Open and upload PDF file
with open('/path/to/bank_statement.pdf', 'rb') as pdf_file:
files = {'file': pdf_file}
response = requests.post(
f'https://api.walkerstdata.com.au/v1/customer/{customer_id}/transactions/pdf',
headers={'x-api-key': 'YOUR_API_KEY'},
files=files
)
result = response.json()
job_id = result['data']['jobId']
print(f'PDF submitted, job ID: {job_id}')
Response
{
"data": {
"jobId": "550e8400-e29b-41d4-a716-446655440000",
"status": "New",
"message": "",
"type": "Extraction",
"totalReceivedTransactions": 1,
"totalProcessedTransactions": 0
},
"message": null
}
Processing Flow
The PDF submission triggers a two-stage process:
- OCR Extraction: PDF content is analyzed to extract individual transaction records
- Transaction Enrichment: Extracted transactions can be categorized
Both stages are tracked under the single returned jobId for monitoring progress.
Job Monitoring
After submission, monitor the processing status:
- cURL
- JavaScript
- Python
curl -X GET "https://api.walkerstdata.com.au/v1/jobs/550e8400-e29b-41d4-a716-446655440000/status" \
-H "x-api-key: YOUR_API_KEY"
const jobId = '550e8400-e29b-41d4-a716-446655440000';
const checkStatus = async () => {
const response = await fetch(`https://api.walkerstdata.com.au/v1/jobs/${jobId}/status`, {
headers: { 'x-api-key': 'YOUR_API_KEY' }
});
const status = await response.json();
return status.data.status; // 'New', 'Processing', 'Completed', 'Failed'
};
import requests
import time
job_id = '550e8400-e29b-41d4-a716-446655440000'
def check_job_status(job_id):
response = requests.get(
f'https://api.walkerstdata.com.au/v1/jobs/{job_id}/status',
headers={'x-api-key': 'YOUR_API_KEY'}
)
return response.json()['data']['status']
# Poll until complete
while True:
status = check_job_status(job_id)
if status in ['Completed', 'Failed']:
break
time.sleep(10) # Wait 10 seconds before checking again
Retrieving Results
Once the job shows complete status, retrieve the enriched transactions:
- cURL
- JavaScript
- Python
curl -X GET "https://api.walkerstdata.com.au/v1/customer/a3feb546-bc8f-49b3-8f7b-499b6e0d3a28/transactions?jobId=550e8400-e29b-41d4-a716-446655440000" \
-H "x-api-key: YOUR_API_KEY"
const customerId = 'a3feb546-bc8f-49b3-8f7b-499b6e0d3a28';
const jobId = '550e8400-e29b-41d4-a716-446655440000';
const response = await fetch(`https://api.walkerstdata.com.au/v1/customer/${customerId}/transactions?jobId=${jobId}`, {
headers: { 'x-api-key': 'YOUR_API_KEY' }
});
const result = await response.json();
const transactions = result.data.transactions;
import requests
customer_id = 'a3feb546-bc8f-49b3-8f7b-499b6e0d3a28'
job_id = '550e8400-e29b-41d4-a716-446655440000'
response = requests.get(
f'https://api.walkerstdata.com.au/v1/customer/{customer_id}/transactions',
headers={'x-api-key': 'YOUR_API_KEY'},
params={'jobId': job_id}
)
transactions = response.json()['data']['transactions']
Use Cases
- Data digitization: Convert PDF statements to structured, categorized transaction data
- Bulk transaction processing: Handle multiple months of statements efficiently
Next Steps
After successful PDF processing, you can:
- Analyze results: Review extracted and categorized transaction data
- Export data: Integrate enriched transactions into accounting systems
- Validate accuracy: Check OCR extraction quality and AI categorizations
- Process additional statements: Submit more PDFs for the same customer