Exporting transactions
Contents
- Overview
- Version-specific information
- Permissions and Authentication
- Basic export (all transactions)
- Filtered export: transactions from the last 24 hours
- Filtered export: transactions in a specific date range
- Chunking large exports
- Checking task status and downloading
- Further reading
Overview
Export transaction (basket) records from Spaaza, including item-level data, totals, and associated customer information.
To create a transaction export, send a POST /tasks request to the Services API with target.export_index set to "transactions". See the Tasks API reference for full endpoint documentation.
Version-specific information
| Version | Change details |
|---|---|
| N/A | N/A |
Permissions and Authentication
Transaction exports use the Tasks API endpoints, which require chain-scoped authentication on the Services API. See Permissions and Authentication in the Tasks API reference for details on supported authentication methods.
Basic export (all transactions)
Create an unfiltered CSV export of all transactions for your chain:
curl -X POST 'https://{Services API hostname}/tasks' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS_TOKEN_ID:ACCESS_TOKEN_SECRET' \
-d '{
"chain": YOUR_CHAIN_ID,
"desc": "Full transactions export",
"target": {
"action": "export",
"export_index": "transactions",
"export_format": "csv"
},
"trigger": {
"once": "2026-05-26T12:00:00Z"
}
}'
Filtered export: transactions from the last 24 hours
Use a relative_less_than rule on the timestamp field to export only recent transactions:
curl -X POST 'https://{Services API hostname}/tasks' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS_TOKEN_ID:ACCESS_TOKEN_SECRET' \
-d '{
"chain": YOUR_CHAIN_ID,
"desc": "Transactions from the last 24 hours",
"target": {
"action": "export",
"export_index": "transactions",
"export_format": "csv"
},
"trigger": {
"once": "2026-05-26T12:00:00Z",
"segment": {
"entity": "people",
"index": "transactions",
"join": "all",
"chain_id": YOUR_CHAIN_ID,
"rules": [
{
"field_name": "timestamp",
"field_type": "date",
"operator": "relative_less_than",
"time_factor": "day",
"time_amount": 1
}
]
}
}
}'
Filtered export: transactions in a specific date range
Use is_between_date with start_date and end_date to export transactions within a bounded time window:
curl -X POST 'https://{Services API hostname}/tasks' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer ACCESS_TOKEN_ID:ACCESS_TOKEN_SECRET' \
-d '{
"chain": YOUR_CHAIN_ID,
"desc": "Transactions for January 2026",
"target": {
"action": "export",
"export_index": "transactions",
"export_format": "csv"
},
"trigger": {
"once": "2026-05-26T12:00:00Z",
"segment": {
"entity": "people",
"index": "transactions",
"join": "all",
"chain_id": YOUR_CHAIN_ID,
"rules": [
{
"field_name": "timestamp",
"field_type": "date",
"operator": "is_between_date",
"start_date": "2026-01-01T00:00:00Z",
"end_date": "2026-01-31T23:59:59Z"
}
]
}
}
}'
Chunking large exports
If a full transaction export fails due to time limits (e.g. context deadline exceeded), break the export into smaller date windows. A common approach is to export one month at a time:
- Determine the date range you need to cover.
- Create one export task per month using
is_between_datewith appropriatestart_dateandend_datevalues. - Stagger the
trigger.oncetimes so tasks do not all run simultaneously.
For example, to export Q1 2026 in monthly chunks:
| Task | start_date | end_date | trigger.once |
|---|---|---|---|
| 1 | 2026-01-01T00:00:00Z | 2026-01-31T23:59:59Z | 2026-05-26T10:00:00Z |
| 2 | 2026-02-01T00:00:00Z | 2026-02-28T23:59:59Z | 2026-05-26T10:15:00Z |
| 3 | 2026-03-01T00:00:00Z | 2026-03-31T23:59:59Z | 2026-05-26T10:30:00Z |
Staggering by 10–15 minutes between tasks ensures each has time to complete before the next one starts.
Checking task status and downloading
After creating the export, poll the task status:
curl 'https://{Services API hostname}/tasks/{TASK_ID}' \
-H 'Authorization: Bearer ACCESS_TOKEN_ID:ACCESS_TOKEN_SECRET'
When the task state is DONE, request the download URL:
curl 'https://{Services API hostname}/tasks/{TASK_ID}/download_url' \
-H 'Authorization: Bearer ACCESS_TOKEN_ID:ACCESS_TOKEN_SECRET'
Download the file promptly — the URL expires after approximately one hour.
See Get a task and Get download URL for full endpoint details.
Further reading
- Segment filter reference — Full list of operators and field types for filtering
- Tasks API reference — Complete endpoint documentation