Exporting users
Contents
- Overview
- Version-specific information
- Permissions and Authentication
- Basic export (all users)
- Using a saved segment from Console
- Filtered export: users created in the last 24 hours
- Filtered export: users in a specific country
- Combining multiple filter rules
- Checking task status and downloading
- Further reading
Overview
Export customer/user records from Spaaza, including profile data, RFM metrics, loyalty status, and opt-in preferences.
To create a user export, send a POST /tasks request to the Services API with target.export_index set to "users". See the Tasks API reference for full endpoint documentation.
Version-specific information
| Version | Change details |
|---|---|
| N/A | N/A |
Permissions and Authentication
User 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 users)
Create an unfiltered CSV export of all users 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 user export",
"target": {
"action": "export",
"export_index": "users",
"export_format": "csv"
},
"trigger": {
"once": "2026-05-26T12:00:00Z"
}
}'
Using a saved segment from Console
If you have already created a segment in Console (e.g. "High-value customers" or "Newsletter subscribers"), you can reference it by ID rather than defining inline rules:
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": "Export high-value customers segment",
"target": {
"action": "export",
"export_index": "users",
"export_format": "csv"
},
"trigger": {
"once": "2026-05-26T12:00:00Z",
"segment_id": "YOUR_SEGMENT_ID"
}
}'
You can find the segment ID from the URL in Console when viewing a particular segment.
Filtered export: users created in the last 24 hours
Use a relative_less_than rule on the created_date field for incremental syncs:
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": "Users created in the last 24 hours",
"target": {
"action": "export",
"export_index": "users",
"export_format": "csv"
},
"trigger": {
"once": "2026-05-26T12:00:00Z",
"segment": {
"entity": "people",
"index": "users",
"join": "all",
"chain_id": YOUR_CHAIN_ID,
"rules": [
{
"field_name": "created_date",
"field_type": "date",
"operator": "relative_less_than",
"time_factor": "day",
"time_amount": 1
}
]
}
}
}'
Filtered export: users in a specific country
Use an is rule on a keyword field:
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": "Users in the Netherlands",
"target": {
"action": "export",
"export_index": "users",
"export_format": "csv"
},
"trigger": {
"once": "2026-05-26T12:00:00Z",
"segment": {
"entity": "people",
"index": "users",
"join": "all",
"chain_id": YOUR_CHAIN_ID,
"rules": [
{
"field_name": "country",
"field_type": "keyword",
"operator": "is",
"value": "NL"
}
]
}
}
}'
Combining multiple filter rules
Use "join": "all" to require all rules to match (AND logic), or "join": "any" to match any rule (OR logic):
"segment": {
"entity": "people",
"index": "users",
"join": "all",
"chain_id": YOUR_CHAIN_ID,
"rules": [
{
"field_name": "country",
"field_type": "keyword",
"operator": "is",
"value": "NL"
},
{
"field_name": "created_date",
"field_type": "date",
"operator": "is_after_date",
"start_date": "2026-01-01T00:00:00Z"
}
]
}
This exports users in the Netherlands who were created after 1 January 2026.
See the Segment filter reference for the full list of operators, field types, and advanced filtering options.
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
- Export users (synchronous) — Legacy synchronous CSV export endpoint