Verify (Account Access)

Integration Guide

Step-by-step guide to integrating Volt Verify

This guide walks you through integrating Volt Verify into your application. By the end, you'll be able to verify bank account ownership in real-time.

Available Markets

Verify is currently available in Austria and Germany only. More countries coming soon.

Prerequisites

Before you begin, ensure you have:

Fuzebox account with Verify access enabled

Customer credentials (Username/Password)

Application credentials (Client ID/Client Secret)

Sandbox environment access for testing


Step 1: Authenticate

Obtain an access token using your credentials:

curl -X POST https://api.sandbox.volt.io/oauth \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET" \
  -d "username=YOUR_USERNAME" \
  -d "password=YOUR_PASSWORD"

Step 2: Request account access

Initiate an account access request to start the verification flow:

curl -X POST https://api.sandbox.volt.io/account-access \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "currencyCode": "EUR",
    "country": "DE",
    "callback": "https://your-app.com/verify/callback",
    "payer": {
      "reference": "customer_123",
      "email": "customer@example.com"
    }
  }'

Request parameters

ParameterRequiredDescription
currencyCodeYesCurrency code (EUR for Austria/Germany)
countryYesISO country code (AT or DE)
callbackYesURL to redirect user after bank authorisation
payer.referenceYesYour unique reference for this customer
payer.emailNoCustomer's email address

Response

{
  "id": "acc_abc123def456",
  "status": "AWAITING_AUTHORIZATION",
  "accountAccessFlow": {
    "status": "PROCESSING",
    "details": {
      "reason": "AWAITING_USER_REDIRECT",
      "redirect": {
        "url": "https://vo.lt/verify/XY123"
      }
    }
  }
}

Step 3: Redirect user to bank

Redirect the user to the URL provided in the response. The user will:

  1. Select their bank
  2. Authenticate with their bank credentials
  3. Consent to sharing account information
  4. Be redirected back to your callback URL
// Redirect user to Volt's hosted bank selection
window.location.href = response.accountAccessFlow.details.redirect.url;

Step 4: Handle the callback

After bank authorisation, the user is redirected to your callback URL with query parameters:

https://your-app.com/verify/callback?accountAccessId=acc_abc123def456&status=COMPLETED

Callback parameters

ParameterDescription
accountAccessIdThe account access request ID
statusCurrent status (COMPLETED, FAILED, CANCELLED)

Step 5: Retrieve account information

Once the status is COMPLETED, fetch the account details:

curl -X GET https://api.sandbox.volt.io/account-access/acc_abc123def456 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Response

{
  "id": "acc_abc123def456",
  "status": "COMPLETED",
  "accounts": [
    {
      "iban": "DE89370400440532013000",
      "accountHolderName": "Max Mustermann",
      "currency": "EUR",
      "accountType": "CURRENT"
    }
  ],
  "payer": {
    "reference": "customer_123"
  }
}

Step 6: Verify the account holder

Compare the returned accountHolderName with your customer's name.

Note: Bank account names may differ from customer-provided names (e.g., "Max" vs "Maximilian"). Implement appropriate name matching logic for your use case.


Account access statuses

StatusDescription
AWAITING_AUTHORIZATIONWaiting for user to authorize at bank
PROCESSINGAuthorization in progress
COMPLETEDAccount information retrieved successfully
FAILEDAuthorization failed
CANCELLEDUser cancelled the authorization
EXPIREDAuthorization request expired

Error handling

Handle errors gracefully in your integration:

{
  "error": {
    "code": "AUTHORIZATION_FAILED",
    "message": "User denied consent at the bank"
  }
}

Common error codes:

CodeDescriptionAction
AUTHORIZATION_FAILEDUser denied consentShow friendly message, allow retry
INSTITUTION_ERRORBank-side errorRetry later or try different bank
EXPIREDRequest timed outStart new verification flow
INVALID_REQUESTMissing/invalid parametersCheck request payload

Testing in Sandbox

Use the Sandbox environment to test your integration:

  1. Set environment to Sandbox in Fuzebox
  2. Use Sandbox API URLs
  3. Test with simulated banks that return mock data

In Sandbox, you can simulate different scenarios (success, failure, cancelled) using test credentials provided in Fuzebox.


Going live

Once testing is complete:

Switch to Production in Fuzebox (toggle top-right)

Generate Production credentials

Update API URLs to Production endpoints

Test with real bank accounts


Next steps

How is this guide?

Last updated on

On this page