Tink Data API

Read consented bank data from 6,000+ European banks. Lists accounts, balances, transactions, account parties, identities, investment holdings, and loan accounts. Includes on-demand balance refresh, credentials management, and provider-consent inspection.

Tink Data API is one of 9 APIs that Tink publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include Accounts, Transactions, Balances, Identities, and Investments. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, sample payloads, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

tink-data-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Tink Data API
  description: >
    Tink Data API exposes aggregated PSD2 and non-PSD2 account information
    for consented users across 6,000+ European banks: accounts, balances,
    transactions, identities, account parties, investment holdings, and loan
    accounts. Used for one-time access reports as well as continuous-access
    products like Money Manager and Risk Insights.
  version: '2.0'
  contact:
    name: Tink Developer Support
    url: https://docs.tink.com/resources/transactions
servers:
  - url: https://api.tink.com
    description: Tink EU Production
  - url: https://api.us.tink.com
    description: Tink US Production
security:
  - BearerAuth: []
tags:
  - name: Accounts
    description: User bank accounts and balances.
  - name: Transactions
    description: User bank transactions.
  - name: Identities
    description: Account holder identities returned by the bank.
  - name: Investments
    description: Investment accounts and holdings.
  - name: Loans
    description: Loan accounts.
  - name: BalanceRefresh
    description: On-demand balance refresh.
paths:
  /data/v2/accounts:
    get:
      summary: Tink List Accounts
      description: List all bank accounts the user has consented to share with the calling application.
      operationId: listAccounts
      tags:
        - Accounts
      parameters:
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/PageToken'
      responses:
        '200':
          description: Accounts returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountList'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /data/v2/accounts/{account_id}/balances:
    get:
      summary: Tink Get Account Balances
      description: Retrieve balance snapshots for a single account, including booked and available balance.
      operationId: getAccountBalances
      tags:
        - Accounts
      parameters:
        - $ref: '#/components/parameters/AccountIdParam'
      responses:
        '200':
          description: Balances returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BalanceList'
  /data/v2/accounts/{account_id}/parties:
    get:
      summary: Tink List Account Parties
      description: List the legal parties (account holders) attached to an account, as returned by the bank.
      operationId: listAccountParties
      tags:
        - Accounts
      parameters:
        - $ref: '#/components/parameters/AccountIdParam'
      responses:
        '200':
          description: Account parties returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartyList'
  /data/v2/transactions:
    get:
      summary: Tink List Transactions
      description: >
        List bank transactions across all consented accounts with optional
        filters by date range, account, status, and amount.
      operationId: listTransactions
      tags:
        - Transactions
      parameters:
        - in: query
          name: accountIdIn
          schema:
            type: string
        - in: query
          name: bookedDateGte
          schema:
            type: string
            format: date
        - in: query
          name: bookedDateLte
          schema:
            type: string
            format: date
        - in: query
          name: statusIn
          schema:
            type: string
            enum: [BOOKED, PENDING, UNDEFINED]
        - $ref: '#/components/parameters/PageSize'
        - $ref: '#/components/parameters/PageToken'
      responses:
        '200':
          description: Transactions returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionList'
  /data/v2/identities:
    get:
      summary: Tink List Identities
      description: List identity records returned by banks for the consented user.
      operationId: listIdentities
      tags:
        - Identities
      responses:
        '200':
          description: Identities returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IdentityList'
  /data/v2/investment-accounts:
    get:
      summary: Tink List Investment Accounts
      description: List investment accounts the user has consented to share.
      operationId: listInvestmentAccounts
      tags:
        - Investments
      responses:
        '200':
          description: Investment accounts returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvestmentAccountList'
  /data/v2/investment-accounts/{id}/holdings:
    get:
      summary: Tink List Investment Holdings
      description: List individual holdings within an investment account, including instrument, quantity, and market value.
      operationId: listInvestmentHoldings
      tags:
        - Investments
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Holdings returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HoldingList'
  /data/v2/loan-accounts:
    get:
      summary: Tink List Loan Accounts
      description: List loan accounts the user has consented to share, including outstanding balance, interest rate, and term.
      operationId: listLoanAccounts
      tags:
        - Loans
      responses:
        '200':
          description: Loan accounts returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoanAccountList'
  /data/v2/loan-accounts/{accountId}:
    get:
      summary: Tink Get A Loan Account
      description: Retrieve detailed information for a single loan account.
      operationId: getLoanAccount
      tags:
        - Loans
      parameters:
        - in: path
          name: accountId
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Loan account returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoanAccount'
  /api/v1/balance-refresh:
    post:
      summary: Tink Create A Balance Refresh
      description: >
        Trigger an on-demand refresh of account balances for a connected
        credentials object. Used by Balance Check to fetch fresh data outside
        of the bank's standard polling cadence.
      operationId: createBalanceRefresh
      tags:
        - BalanceRefresh
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BalanceRefreshRequest'
      responses:
        '202':
          description: Balance refresh accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BalanceRefreshStatus'
  /api/v1/balance-refresh/{balanceRefreshId}:
    get:
      summary: Tink Get A Balance Refresh Status
      description: Retrieve the status of a previously triggered balance refresh.
      operationId: getBalanceRefresh
      tags:
        - BalanceRefresh
      parameters:
        - in: path
          name: balanceRefreshId
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Balance refresh status returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BalanceRefreshStatus'
  /api/v1/credentials/list:
    get:
      summary: Tink List User Credentials
      description: List bank credential objects (consents) attached to the current user.
      operationId: listCredentials
      tags:
        - Accounts
      responses:
        '200':
          description: Credentials returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CredentialsList'
  /api/v1/credentials/{credentialsId}:
    delete:
      summary: Tink Delete User Credentials
      description: Delete a credentials object and revoke the underlying bank consent.
      operationId: deleteCredentials
      tags:
        - Accounts
      parameters:
        - in: path
          name: credentialsId
          required: true
          schema:
            type: string
      responses:
        '204':
          description: Credentials deleted.
  /api/v1/provider-consents:
    get:
      summary: Tink List Provider Consents
      description: List all active bank-provider consents for the current user.
      operationId: listProviderConsents
      tags:
        - Accounts
      responses:
        '200':
          description: Provider consents returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProviderConsentList'
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
  parameters:
    PageSize:
      in: query
      name: pageSize
      schema:
        type: integer
        format: int32
        maximum: 200
    PageToken:
      in: query
      name: pageToken
      schema:
        type: string
    AccountIdParam:
      in: path
      name: account_id
      required: true
      schema:
        type: string
  schemas:
    AccountList:
      type: object
      properties:
        accounts:
          type: array
          items:
            $ref: '#/components/schemas/Account'
        nextPageToken:
          type: string
    Account:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        type:
          type: string
          enum: [CHECKING, SAVINGS, CREDIT_CARD, LOAN, INVESTMENT, OTHER]
        balances:
          $ref: '#/components/schemas/Balances'
        identifiers:
          type: object
          properties:
            iban:
              type: object
              properties:
                iban:
                  type: string
                bban:
                  type: string
            sortCode:
              type: object
              properties:
                code:
                  type: string
                accountNumber:
                  type: string
        currencyCode:
          type: string
        customerSegment:
          type: string
          enum: [PERSONAL, BUSINESS, UNDEFINED]
        financialInstitutionId:
          type: string
        dates:
          type: object
          properties:
            lastRefreshed:
              type: string
              format: date-time
    Balances:
      type: object
      properties:
        booked:
          $ref: '#/components/schemas/Money'
        available:
          $ref: '#/components/schemas/Money'
    BalanceList:
      type: object
      properties:
        balances:
          type: array
          items:
            $ref: '#/components/schemas/Money'
    Money:
      type: object
      properties:
        amount:
          type: object
          properties:
            value:
              type: object
              properties:
                scale:
                  type: string
                unscaledValue:
                  type: string
            currencyCode:
              type: string
    TransactionList:
      type: object
      properties:
        transactions:
          type: array
          items:
            $ref: '#/components/schemas/Transaction'
        nextPageToken:
          type: string
    Transaction:
      type: object
      properties:
        id:
          type: string
        accountId:
          type: string
        amount:
          $ref: '#/components/schemas/Money'
        descriptions:
          type: object
          properties:
            original:
              type: string
            display:
              type: string
        dates:
          type: object
          properties:
            booked:
              type: string
              format: date
            value:
              type: string
              format: date
        status:
          type: string
          enum: [BOOKED, PENDING, UNDEFINED]
        categories:
          type: object
          properties:
            pfm:
              type: object
              properties:
                id:
                  type: string
                name:
                  type: string
        merchantInformation:
          type: object
          properties:
            merchantCategoryCode:
              type: string
            merchantName:
              type: string
        types:
          type: object
          properties:
            type:
              type: string
            financialInstitutionTypeCode:
              type: string
    PartyList:
      type: object
      properties:
        parties:
          type: array
          items:
            $ref: '#/components/schemas/Party'
    Party:
      type: object
      properties:
        name:
          type: string
        role:
          type: string
          enum: [HOLDER, AUTHORIZED_USER, UNDEFINED]
        partyType:
          type: string
          enum: [PERSON, ORGANIZATION]
    IdentityList:
      type: object
      properties:
        identities:
          type: array
          items:
            $ref: '#/components/schemas/Identity'
    Identity:
      type: object
      properties:
        id:
          type: string
        name:
          type: object
          properties:
            fullName:
              type: string
            firstName:
              type: string
            lastName:
              type: string
        dateOfBirth:
          type: string
          format: date
        emailAddresses:
          type: array
          items:
            type: object
            properties:
              value:
                type: string
        addresses:
          type: array
          items:
            type: object
            properties:
              fullAddress:
                type: string
              country:
                type: string
              city:
                type: string
              postalCode:
                type: string
    InvestmentAccountList:
      type: object
      properties:
        investmentAccounts:
          type: array
          items:
            $ref: '#/components/schemas/InvestmentAccount'
    InvestmentAccount:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        marketValue:
          $ref: '#/components/schemas/Money'
        cashBalance:
          $ref: '#/components/schemas/Money'
    HoldingList:
      type: object
      properties:
        holdings:
          type: array
          items:
            $ref: '#/components/schemas/Holding'
    Holding:
      type: object
      properties:
        id:
          type: string
        instrument:
          type: object
          properties:
            isin:
              type: string
            name:
              type: string
            type:
              type: string
              enum: [STOCK, FUND, BOND, ETF, OTHER, UNDEFINED]
        quantity:
          type: string
        marketValue:
          $ref: '#/components/schemas/Money'
        purchasePrice:
          $ref: '#/components/schemas/Money'
    LoanAccountList:
      type: object
      properties:
        loanAccounts:
          type: array
          items:
            $ref: '#/components/schemas/LoanAccount'
    LoanAccount:
      type: object
      properties:
        id:
          type: string
        accountName:
          type: string
        loanType:
          type: string
          enum: [MORTGAGE, BLANCO, MEMBERSHIP, AUTO, STUDENT, OTHER, UNDEFINED]
        outstandingBalance:
          $ref: '#/components/schemas/Money'
        interestRate:
          type: number
          format: double
        terms:
          type: object
          properties:
            endDate:
              type: string
              format: date
            durationMonths:
              type: integer
              format: int32
    BalanceRefreshRequest:
      type: object
      properties:
        credentialsId:
          type: string
    BalanceRefreshStatus:
      type: object
      properties:
        balanceRefreshId:
          type: string
        status:
          type: string
          enum: [QUEUED, IN_PROGRESS, FINISHED, FAILED]
        statusMessage:
          type: string
    CredentialsList:
      type: object
      properties:
        credentials:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              providerName:
                type: string
              status:
                type: string
                enum: [CREATED, AUTHENTICATING, UPDATING, UPDATED, AUTHENTICATION_ERROR, TEMPORARY_ERROR, DELETED]
              statusUpdated:
                type: integer
                format: int64
              userId:
                type: string
              sessionExpiryDate:
                type: integer
                format: int64
    ProviderConsentList:
      type: object
      properties:
        providerConsents:
          type: array
          items:
            type: object
            properties:
              credentialsId:
                type: string
              providerName:
                type: string
              status:
                type: string
              statusUpdated:
                type: integer
                format: int64
              sessionExpiryDate:
                type: integer
                format: int64
              accountIds:
                type: array
                items:
                  type: string
    Error:
      type: object
      properties:
        errorMessage:
          type: string
        errorCode:
          type: string
  responses:
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'