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.

Picture

Search Providers

Retrieving available providers (banks) is supported by:

  1. Use GET /providers to retrieve a list of available providers. This list can be filtered by countryCode and limit or by a providerNameFilter

  2. Use GET /providers/countries to retrieve all countries with at least one provider.

  3. 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=" } } }

Clients

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

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" } }

Retrieve Account details

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==" } } }

Retrieve transaction details

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

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": {} } }