FiskilFiskilFiskil DocsFiskil Docs
Log InSign Up
GuidesAPI ReferenceChangelog

Mobile menu

HomeFiskilFiskil

GETTING STARTED

Start ExploringQuick StartAuthentication

CORE CONCEPTS

OverviewAPI VersioningEnd UsersAuth SessionsConsentsTestingWebhooks

LINK WIDGET

IntroductionIntegrating the Link SDKFlow Overview

RESOURCES

Best PracticesRenew ConsentsMobile IntegrationGo Live Checklist

ACCOUNT & ACCESS

SecurityTeam & RolesMonitoring & Logs

DATA DOMAINS

BankingEnergy DataIdentity DataIncome

HELP CENTER

Migrating to Fiskil APIsBanking - Business AccountsEnergy - Business Accounts

SUPPORT

Troubleshooting

AI TOOLS

OverviewMCP Server
Log InSign Up
ChangelogUpgrade to v3Upgrade to v2Legacy Changelog

Upgrade to v3

Migration guide for upgrading the Fiskil Data API from v2 or v1 to v3

AI Actions

This guide covers breaking changes when upgrading from major version v2 to v3. Fiskil v3 reworks the two Core Resources list endpoints — consents and end users — to return a paginated response object instead of a bare array, and renames consent fields to camelCase.

Coming from v1? See Coming from v1? below — you apply the v1 -> v2 changes plus everything on this page.

Before upgrading your pinned version

Upgrade your pinned version in Console only after thorough testing with X-Fiskil-Version. Console upgrades are one-way (for example, v2 -> v3) and cannot be downgraded in settings.

What hasn't changed

  • No URL changes — every endpoint path and HTTP method is identical - No Banking or Energy changes — all /banking/* and /energy/* endpoints are identical to v2 - No auth changes — authentication and security are unchanged - Only two GET responses are affected — GET /consent and GET /end-users; see below for exact schema changes

1. Opt into v3 with a header

v1, v2, and v3 are served on the same base URL. Select v3 per request with the X-Fiskil-Version header:

curl https://api.fiskil.com/v1/consent \
  -H 'X-Fiskil-Version: v3' \
  -H 'Authorization: Bearer {token}'

In v3, the X-Fiskil-Version header is documented as required on the two changed endpoints — always send it explicitly while migrating rather than relying on your Console pin.

For the full header and Console-pin semantics, see API Versioning.

2. Migration checklist

1

Pin production requests to your current version

Deploy a one-line change adding X-Fiskil-Version: v2 (or v1) header to your requests. This freezes your current response shape while you prepare the upgrade.

2

Check whether affected endpoints are used

If your integration uses either of these endpoints, review the exact schema changes in the sections below:

  • GET /consent
  • GET /end-users

If you use neither, v3 needs no parser changes.

3

Update affected parsers

Work through the breaking changes below: read the new response envelopes, rename consent fields to camelCase, and stop sending expires_before.

4

Test v3 with production traffic

Run X-Fiskil-Version: v3 in production for a period of time and verify both endpoints and downstream parsing before changing the Console pin.

5

Upgrade the Console pinned version

After production validation, upgrade your account's pinned API version in Console to v3.

3. Breaking changes

What this section covers

Only breaking changes are documented below (for example type changes, structural replacements, or removed fields). Additive updates such as the new pagination parameters are covered in New in v3. For full request and response shapes, see each endpoint's API reference and OpenAPI specification.

GET /consent - response envelope changed

In v3, the response body is no longer a bare JSON array of consents. It is an object with a consents array and an optional links object for pagination.

v1 / v2v3Notes
top-level array [...]object { "consents": [...], "links": {...} }Structure changed
—links.next / links.prev string URLsNew, optional

Example v3 response:

{
  "consents": [
    {
      "arrangement_id": "94549a73-a554-4b76-b824-d96898829751",
      "active": true
      ...
    }
  ],
  "links": {
    "next": "/consent?page[after]=eyJpZCI6...",
    "prev": "/consent?page[before]=eyJpZCI6..."
  }
}

Migrate: Read the consent list from consents array instead of iterating the top-level array. Treat links as optional — it carries cursor URLs when more pages exist.

GET /end-users - response envelope changed

In v3, the response body is an object with an end_users array and an optional links object, instead of a bare array. Note the wrapper key is snake_case (end_users), unlike consents. The end-user item fields (id, email, name, phone) are unchanged.

v1 / v2v3Notes
top-level array [...]object { "end_users": [...], "links": {...} }Structure changed
item fieldsunchanged (id, email, name, phone)No renames

Example v3 response:

{
  "end_users": [
    {
      "email": "john_starmer@gmail.com",
      "id": "482c0e2b-5866-46b1-b795-220b7bba45b5",
      "name": "John Starmer",
      "phone": "+614123456789"
    }
  ],
  "links": {
    "next": "/end-users?page[after]=eyJpZCI6..."
  }
}

Migrate: Read the list from end_users array instead of the top-level array. Item parsing is unchanged.

GET /consent & GET /end-users - error responses changed

In v3, the two list endpoints return a simpler JSON error body. The temporary, timeout, and fault fields are removed.

v1 / v2v3
{ id, message, name, temporary, timeout, fault }{ id, message, name }

Example v2 error response:

{
  "name": "invalid_field_type",
  "id": "Iinv0AfL",
  "message": "invalid value ...",
  "temporary": false,
  "timeout": false,
  "fault": false
}

Example v3 error response:

{
  "id": "3GFbIj0u9muOrByxbdINUACrYRa",
  "name": "bad request",
  "message": "invalid active value ..."
}

Migrate: Handle 400 and 500 on both list endpoints and parse the error body as { id, message, name }. Stop relying on the fault, temporary, and timeout fields for these endpoints.

4. New in v3 (non-breaking)

Both GET /consent and GET /end-users gain cursor-based pagination:

ParameterTypeDescription
page[size]integerNumber of items per page, capped at 1000
page[after]stringCursor — return results after this position
page[before]stringCursor — return results before this position
curl 'https://api.fiskil.com/v1/end-users?page[size]=100' \
  -H 'X-Fiskil-Version: v3' \
  -H 'Authorization: Bearer {token}'

Follow links.next / links.prev from the response to walk pages. Requests without page[...] parameters keep working — pagination is opt-in. See the Pagination guide for more details.

5. Coming from v1?

v3 uses the same Banking and Energy service versions as v2, so upgrading from v1 directly to v3 means applying both sets of breaking changes:

  1. All v1 -> v2 changes — banking products/accounts rates and fees, transactions extended_data, and the removed identity customer field. Work through the Upgrade to v2 guide.
  2. All v2 -> v3 changes — the consents and end-users changes on this page.

You can validate both sets in one pass: test with X-Fiskil-Version: v3 and follow the migration checklist above, treating the endpoints from both guides as your affected list. There is no need to pin to v2 along the way.

6. Reference

Version switcher in docs: Toggle between v1, v2, and v3 in the top navigation to compare API reference shapes. This only affects docs — runtime behavior is controlled by the X-Fiskil-Version header or your Console pin.

How versioning works at Fiskil: For the versioning model, breaking-change policy, and support timeline, see API Versioning.

Need help? Use the AI chat in the bottom-right corner — it has context on all specs. For anything it can't resolve, reach out to Fiskil support.

Was this page helpful?

ChangelogUpgrade to v2

On this page

1. Opt into v3 with a header2. Migration checklist3. Breaking changesGET /consent - response envelope changedGET /end-users - response envelope changedGET /consent & GET /end-users - error responses changed4. New in v3 (non-breaking)5. Coming from v1?6. Reference

Assistant