PFM Flows
Listing and searching for providers is supported. As soon as a user wants to link a bank account, a “Partner User” account must be created and the user must accept Woolsocks / Salt Edge terms and conditions.
Listing and searching for providers is supported. As soon as a user wants to link a bank account, a “Partner User” account must be created and the user must accept Woolsocks / Salt Edge terms and conditions.
Retrieving available providers (banks) is supported by:
Use GET /providers
to retrieve a list of available providers. This list can be filtered by countryCode and limit or by a providerNameFilter
Use GET /providers/countries
to retrieve all countries with at least one provider.
Use GET /providers/:providerId
to retrieve a provider by providerId.
Sample request providers:
GET {{baseUrl}}/providers?countryCode=NL&limit=5
-- header 'Authorization: Bearer <access_token>'
Sample response providers :
{ "data": { "providers": [ { "id": "40a37282-c0c2-4679-a65b-612c0af8d921", "countryCode": "NL", "name": "Handelsbanken Corporate", "logo": "https://d1uuj3mi6rzwpm.cloudfront.net/logos/providers/se/handelsbanken_se.svg", "status": "Active", "supportedAccountTypes": [ "CurrentAccount" ], "timezone": "Europe/Amsterdam", "refreshTimeoutMinutes": 15, "maxConsentDays": 90, "regulated": true, "maxFetchInterval": 365, "meta": {} }, { "id": "460415e2-a5e2-4392-80f9-1dec22571633", "countryCode": "NL", "name": "Knab", "logo": "https://d1uuj3mi6rzwpm.cloudfront.net/logos/providers/nl/knab_nl.svg", "status": "Active", "supportedAccountTypes": [ "CurrentAccount", "SavingAccount" ], "timezone": "Europe/Amsterdam", "refreshTimeoutMinutes": 15, "maxConsentDays": 90, "regulated": true, "maxFetchInterval": 750, "meta": {} }, { "id": "485e22e4-2d7b-4793-813e-7a2373418542", "countryCode": "NL", "name": "ASN Bank", "logo": "https://d1uuj3mi6rzwpm.cloudfront.net/logos/providers/nl/asnbank_nl.svg", "status": "Active", "supportedAccountTypes": [ "CurrentAccount" ], "timezone": "Europe/Amsterdam", "refreshTimeoutMinutes": 15, "maxConsentDays": 90, "regulated": true, "maxFetchInterval": 730, "automaticFetch": true, "meta": {} }, { "id": "652263a4-b26e-4d22-9c87-880923fe8d83", "countryCode": "NL", "name": "Triodos", "logo": "https://d1uuj3mi6rzwpm.cloudfront.net/logos/providers/nl/triodos_nl.svg", "status": "Active", "supportedAccountTypes": [ "CurrentAccount" ], "timezone": "Europe/Amsterdam", "refreshTimeoutMinutes": 15, "maxConsentDays": 90, "regulated": true, "maxFetchInterval": 365, "automaticFetch": true, "meta": {} }, { "id": "6c0097b7-a046-450e-ba09-81e260f53656", "countryCode": "NL", "name": "SNS Bank", "logo": "https://d1uuj3mi6rzwpm.cloudfront.net/logos/providers/nl/snsbank_nl.svg", "status": "Active", "supportedAccountTypes": [ "CurrentAccount" ], "timezone": "Europe/Amsterdam", "refreshTimeoutMinutes": 15, "maxConsentDays": 90, "regulated": true, "maxFetchInterval": 730, "automaticFetch": true, "meta": {} } ] }, "meta": { "pagination": { "nextToken": "MTU=" } } }
Once a Sniptech user has been created, another client is needed at our supplier. This flow will be deprecated and not required in the future. Partners will be notified of this change when it occurs.
Sample request clients:
POST 'https://api.acc.sniptech.com/openbanking/v1/clients' \ --header 'X-User-Id: {previously created user guid}' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json' \ --data-raw '{ "countryCode": "NL", "languageCode": "nl" }'
Sample response clients:
The client Id returned in this response is not required for any PFM flows
{ "data": { "client": { "id": "851e4d2d-1715-464d-bd19-ef508af36af2" } } }
Connections to bank accounts can be created / refreshed / deleted or reconnected.
Sample request for creating a provider connection. AccountType is not a required field for PFM.
POST {{base_url}}/connections' --header 'X-User-Id: {previously created user guid}' \ --header 'Authorization: Bearer <access_token>'\ --data-raw '{ "providerId": "067a2b3c-4cf1-4b8c-89b3-630f39f21540", "accountType": "personal", "returnUrl": "http://localhost" }'
Sample response connections:
{ "data": { "redirectUrl": "https://public.test.bbapi.io/v1/connect?connectionId=316254da-8205-4c2e-9993-09c0de7ec85f", "expiresAt": "2022-07-20T11:21:26Z", "connectionId": "316254da-8205-4c2e-9993-09c0de7ec85f" } }
GET /accounts/
will return account and connection info
Sample request
GET 'https://api.acc.sniptech.com/openbanking/v1/accounts?limit=1' \ --header 'X-User-Id: {previously created user guid}' \ --header 'Authorization: Bearer <access_token>'
Sample response:
{ "data": { "accounts": [ { "accountId": "118107a6-baf8-4d4e-81e1-50286c0e3b2f", "accountName": "BankAccount #1", "accountNumber": "", "accountType": "BonusAccount", "iban": "GB33BUKB20201555555555", "connectionInfo": { "connectionId": "", "bankLogoUrl": "", "bankName": "", "lastSuccessAt": "0001-01-01T00:00:00Z", "nextRefreshPossibleAt": "0001-01-01T00:00:00Z", "consentExpiresAt": "0001-01-01T00:00:00Z", "isActive": false, "connectionStatus": "", "isInteractive": false }, "balance": 100000, "currencyCode": "EUR", "createdAt": "2022-06-24T12:47:45.49Z", "updatedAt": "2022-07-08T12:48:13.957Z" } ] }, "meta": { "pagination": { "nextToken": "MQ==" } } }
Example request:
GET 'https://api.acc.sniptech.com/openbanking/v1/transactions?limit=1' \ --header 'X-User-Id: {previously created user guid}' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json'
Sample response:
{ "data": { "transactions": [ { "account": { "id": "c0269673-8a0f-4dd5-bb91-f74b81dcfc68", "name": "Account 4 merchant testing" }, "category": { "categoryId": 520, "categoryName": "FOOD_AND_DRINKS", "subcategoryId": 52010, "subcategoryName": "FOOD_AND_DRINKS__Restaurants_And_Bars" }, "merchant": { "id": "6c4d4ac7-1de1-4969-80f1-79246b1735b4", "name": "Starbucks Coffee" }, "id": "3dbda45d-3e5b-4bd4-8381-bd46c04af5b9", "createdAt": "2022-07-19T09:17:21.91Z", "updatedAt": "2022-07-19T09:17:21.91Z", "recordDate": "2022-07-19T00:00:00Z", "amount": -0.13, "currencyCode": "EUR", "note": "Starbucks coffee Amsterdam", "paymentType": "DebitCard", "recordState": "Cleared", "recordType": "Expense", "recurrenceFrequency": "Once", "subscription": false, "payee": "DE12345678912345678912" } ] }, "meta": { "pagination": { "nextToken": "Mg==" } } }
Insights can be returned by category or merchant
Sample request for insights by category:
GET 'https://api.acc.sniptech.com/openbanking/v1/insights/categories?transactionType=Expense&categoryLevel=L1' \ --header 'X-User-Id: {previously created user guid}' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json'
Sample insights categories response:
{ "data": { "insights": [ { "category": { "id": 610, "name": "UNKNOWN" }, "amount": 11689.21, "currencyCode": "EUR", "numberOfTransactions": 22 }, { "category": { "id": 600, "name": "INCOME" }, "amount": 14847, "currencyCode": "EUR", "numberOfTransactions": 3 }, { "category": { "id": 530, "name": "SHOPPING" }, "amount": 52586.57, "currencyCode": "EUR", "numberOfTransactions": 25 }, { "category": { "id": 570, "name": "MEDIA" }, "amount": 120322, "currencyCode": "EUR", "numberOfTransactions": 22 }, { "category": { "id": 500, "name": "HOUSING" }, "amount": 124832.7, "currencyCode": "EUR", "numberOfTransactions": 36 }, { "category": { "id": 520, "name": "FOOD_AND_DRINKS" }, "amount": 126736.02, "currencyCode": "EUR", "numberOfTransactions": 30 }, { "category": { "id": 590, "name": "TRANSFERS" }, "amount": 127906.36, "currencyCode": "EUR", "numberOfTransactions": 26 }, { "category": { "id": 540, "name": "TRANSPORT" }, "amount": 129347, "currencyCode": "EUR", "numberOfTransactions": 38 }, { "category": { "id": 550, "name": "HEALTH_AND_BEAUTY" }, "amount": 165239, "currencyCode": "EUR", "numberOfTransactions": 30 }, { "category": { "id": 560, "name": "LIFE_AND_LEISURE" }, "amount": 174949, "currencyCode": "EUR", "numberOfTransactions": 38 }, { "category": { "id": 580, "name": "FINANCE" }, "amount": 190264, "currencyCode": "EUR", "numberOfTransactions": 44 } ], "granularity": "alltime" }, "meta": { "pagination": {} } }
Sample insights by merchants request:
GET 'https://api.acc.sniptech.com/openbanking/v1/insights/merchants?granularity=daily&orderBy=amount&transactionType=Expense' \ --header 'X-User-Id: {previously created user guid}' \ --header 'Authorization: Bearer <access_token>' \ --header 'Content-Type: application/json'
Sample insights by merchants response:
{ "data": { "insights": [ { "merchant": { "name": "Billa", "id": "6941e1e2-31f8-46a2-bd8c-bc61d5dff3d9" }, "amount": -31040, "currencyCode": "EUR", "numberOfTransactions": 10 }, { "merchant": { "name": "Chubb", "id": "c5f6cc4d-b3ae-47d0-8888-6b524b2b15f0" }, "amount": -30765, "currencyCode": "EUR", "numberOfTransactions": 5 }, { "merchant": { "name": "Centraal Beheer", "id": "19008a20-a4a4-4137-9a6d-ec8f6e504b30" }, "amount": -17563, "currencyCode": "EUR", "numberOfTransactions": 5 } ], "granularity": "alltime" }, "meta": { "pagination": {} } }
Gustav Mahlerlaan 1025, 1082 MK Amsterdam, The Netherlands | info@sniptech.nl | © 2022 SnipTech