Data Enrichment
Data Enrichment
Data Enrichment gives you access to nrich's categorisation and payment partner identification capabilities as a standalone service. You bring the raw transaction data - from any source - and nrich returns each transaction enriched with a spending category and a normalised merchant name.
No bank connection. No Widget. No user authentication. Just your transactions in, enriched transactions out.
Get credentialsSign in to console.qwist.cloud to generate credentials. Data Enrichment uses client authentication only - no user tokens required.
When to use this
You're a bank, a core banking system, or a fintech with your own AIS - and you want to add categorisation without changing your data source.
Raw transaction names from banks are noisy (AMZN EU SARL → Amazon). nrich normalises them to clean payment partner names.
Power PFM features, budgeting dashboards, or spending analysis without a full open banking integration.
Also consider Transaction UploadIf you also need income reports or risk scores from your transaction data, Transaction Upload is a better fit - it runs the full enrichment pipeline and returns an
access_tokenfor all reporting endpoints.Data Enrichment is best when you only need categories and payment partners, and you want a synchronous call with immediate results.
Coverage
Data Enrichment
Available across all nrich AIS-supported countries
View full bank catalog - 3,381 banks across 33 countries →
Categorise transactions
POST https://api.finx-s.qwist.cloud/rpc/categorize
Authentication: HTTP Basic (clientId:clientSecret)
Limits: Up to 2,000 transactions per request.
Request:
[
{
"id": "txn-001",
"amount": -12.99,
"currency": "EUR",
"name": "SPOTIFY AB",
"purpose": "SVWZ+Spotify Abo 55912837 EREF+SPOTISP1234567",
"iban": "SE3550000000054910000003",
"creditor_id": "SE59ZZZ0000017491",
"mandate_reference": "SPOTIFY-DE-923847102",
"sepa_purpose_code": "GDDS",
"booked_at": "2025-05-28T00:00:00.000Z"
},
{
"id": "txn-002",
"amount": -850.00,
"currency": "EUR",
"name": "STADTWERKE MÜNCHEN",
"purpose": "Rechnung 20250501 KD-NR 48291037",
"booked_at": "2025-05-02T00:00:00.000Z"
},
{
"id": "txn-003",
"amount": 2850.00,
"currency": "EUR",
"name": "ACME GMBH",
"purpose": "Gehalt Mai 2025 Maria Mueller",
"booked_at": "2025-05-30T00:00:00.000Z"
}
]Required fields per transaction:
| Field | Description |
|---|---|
id | Your unique identifier for this transaction. Returned in the response for mapping. Make this unique within the request. |
amount | Transaction amount. Negative = debit, positive = credit. |
currency | ISO 4217 currency code (e.g. "EUR"). |
Optional fields (improve accuracy):
| Field | Description |
|---|---|
name | Counterparty name (raw from bank). Greatly improves payment partner detection. |
purpose | Purpose text, including any SEPA structured fields. |
iban | Counterparty IBAN. |
sepa_purpose_code | ISO 20022 purpose code (e.g. SALA for salary, GDDS for goods). |
creditor_id | SEPA creditor ID (for direct debits). |
mandate_reference | SEPA mandate reference. |
booked_at | Booking date. Helps with time-based patterns. |
user_id | Your internal user ID - useful for grouping transactions when categorising across users. |
Response:
[
{
"id": "txn-001",
"amount": -12.99,
"currency": "EUR",
"name": "SPOTIFY AB",
"purpose": "SVWZ+Spotify Abo 55912837 EREF+SPOTISP1234567",
"iban": "SE3550000000054910000003",
"booked_at": "2025-05-28T00:00:00.000Z",
"categories": [
{ "id": 22, "parent_id": null, "name": "Leisure" },
{ "id": 33, "parent_id": 22, "name": "Music streaming" }
],
"payment_partner": {
"id": "c9944518e86e46409e46a52b0f55dee0",
"name": "Spotify AB"
}
},
{
"id": "txn-002",
"amount": -850.00,
"currency": "EUR",
"name": "STADTWERKE MÜNCHEN",
"purpose": "Rechnung 20250501 KD-NR 48291037",
"booked_at": "2025-05-02T00:00:00.000Z",
"categories": [
{ "id": 11, "parent_id": null, "name": "Housing" },
{ "id": 15, "parent_id": 11, "name": "Utilities" }
],
"payment_partner": {
"id": "stw_muc_001",
"name": "Stadtwerke München"
}
},
{
"id": "txn-003",
"amount": 2850.00,
"currency": "EUR",
"name": "ACME GMBH",
"purpose": "Gehalt Mai 2025 Maria Mueller",
"booked_at": "2025-05-30T00:00:00.000Z",
"categories": [
{ "id": 1, "parent_id": null, "name": "Income" },
{ "id": 2, "parent_id": 1, "name": "Salary" }
],
"payment_partner": {
"id": "a1b2c3d4e5f6",
"name": "Acme GmbH"
}
}
]The response array matches the request array by id. Each transaction is returned with its categories (parent → subcategory chain) and payment_partner (normalised merchant).
Get the category tree
GET https://api.finx-s.qwist.cloud/category-tree
Authentication: HTTP Basic (clientId:clientSecret)
Returns the full category taxonomy as a flat list. Use the Accept-Language header to get category names in your preferred language (de, en, es, fr).
Request:
GET /category-tree
Authorization: Basic {Base64(clientId:clientSecret)}
Accept-Language: enResponse:
[
{ "id": 1, "parent_id": null, "name": "Income" },
{ "id": 2, "parent_id": 1, "name": "Salary" },
{ "id": 3, "parent_id": 1, "name": "Freelance income" },
{ "id": 11, "parent_id": null, "name": "Housing" },
{ "id": 15, "parent_id": 11, "name": "Utilities" },
{ "id": 16, "parent_id": 11, "name": "Rent" },
{ "id": 22, "parent_id": null, "name": "Leisure" },
{ "id": 33, "parent_id": 22, "name": "Music streaming" }
]Categories form a two-level tree. parent_id: null indicates a top-level category. Sub-categories reference their parent by parent_id. Use this endpoint to build your own category display, filter options, or mapping tables.
Understanding categories in responses
Every enriched transaction returns a categories array with the full path from root to leaf:
"categories": [
{ "id": 22, "parent_id": null, "name": "Leisure" },
{ "id": 33, "parent_id": 22, "name": "Music streaming" }
]The last item in the array is the most specific (leaf) category. The first item is always a top-level category. Use the leaf category for granular analysis and the top-level for aggregation.
Error handling
| Code | Meaning |
|---|---|
200 OK | All transactions categorised. |
400 Bad Request | Malformed request - check that required fields (id, amount, currency) are present on all transactions. |
401 Unauthorized | Invalid client credentials. |
