Altoviz Bank Accounts API

Bank accounts API

Operations 8

GET /v1/bankaccounts/providers List of supported bank account providers #
GET /v1/bankaccounts List bank accounts #
POST /v1/bankaccounts Create a bank account #
GET /v1/bankaccounts/{id} Get a bank account by ID #
PUT /v1/bankaccounts/{id} Update a bank account #
DELETE /v1/bankaccounts/{id} Delete a bank account #
POST /v1/bankaccounts/setasmain/{id} Make a bank account the main one #
GET /v1/bankaccounts/{id}/transactions List a bank account's transactions #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/altoviz-com:altoviz-com-bank-accounts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

altoviz-com-bank-accounts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Altoviz Bank Accounts API
  description: 'RESTful APIs for the Altoviz services


    ## Deprecations


    ### Product prices


    A product now stores its sale price both excluding and including tax, so both are

    returned, along with the margin figures derived from them: `taxExcludedPrice`,

    `taxIncludedPrice`, `margin`, `markupRate` (margin over cost, FR « taux de marge ») and

    `marginRate` (margin over sale price, FR « taux de marque »).


    Two fields are deprecated as a result:


    | Deprecated | Use instead |

    | --- | --- |

    | `unitPrice` | `taxExcludedPrice` |

    | `isUnitPriceTaxIncluded` | `taxIncludedPrice`, to send a tax-included price |


    **`unitPrice` is now always the tax-excluded price.** It previously held whichever half

    the product was priced in, which `isUnitPriceTaxIncluded` told you. For a product priced

    tax-included, `unitPrice` therefore returns a different number than it used to, and

    `isUnitPriceTaxIncluded` is now always `false`. If you read the flag before using the

    price, your result is unchanged. If you assumed the price was tax-included, read

    `taxIncludedPrice`.


    Writing is unaffected. Both fields are still accepted and behave exactly as before:

    `unitPrice` alone is read as tax-excluded, and setting `isUnitPriceTaxIncluded` to `true`

    still means the price you are sending includes tax. `margin`, `markupRate` and

    `marginRate` are derived by the server and ignored if sent.'
  contact:
    name: Altoviz
    email: contact@altoviz.com
  license:
    name: Altoviz license
    url: https://altoviz.com/license
  version: v1
  x-logo:
    url: https://altoviz.com/altoviz-logo-ext-violet-262x72.png
    altText: Altoviz logo
servers:
- url: https://api.altoviz.com
  description: Altoviz
security:
- {}
tags:
- name: Bank Accounts
  description: Bank accounts API
paths:
  /v1/bankaccounts/providers:
    get:
      tags:
      - Bank Accounts
      summary: List of supported bank account providers
      operationId: GET_BankAccounts_Providers
      parameters:
      - name: query
        in: query
        description: query (full text search)
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BankProvider'
  /v1/bankaccounts:
    get:
      tags:
      - Bank Accounts
      summary: List bank accounts
      operationId: GET_BankAccounts_List
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BankAccount'
    post:
      tags:
      - Bank Accounts
      summary: Create a bank account
      description: 'Creates an account kept by hand. An account synchronized from a provider cannot be created

        here — the connection is established in the Altoviz application, and the provider fields are

        read-only throughout this API.'
      operationId: POST_BankAccounts_Post
      requestBody:
        description: Bank account to create
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BankAccountCreate'
          text/json:
            schema:
              $ref: '#/components/schemas/BankAccountCreate'
          application/*+json:
            schema:
              $ref: '#/components/schemas/BankAccountCreate'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/bankaccounts/{id}:
    get:
      tags:
      - Bank Accounts
      summary: Get a bank account by ID
      operationId: GET_BankAccounts_Get
      parameters:
      - name: id
        in: path
        description: Bank account ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    put:
      tags:
      - Bank Accounts
      summary: Update a bank account
      description: Refused with 400 on a connected account, whose contents Altoviz mirrors rather than owns.
      operationId: PUT_BankAccounts_Update
      parameters:
      - name: id
        in: path
        description: Bank account ID
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        description: Bank account
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BankAccountCreate'
          text/json:
            schema:
              $ref: '#/components/schemas/BankAccountCreate'
          application/*+json:
            schema:
              $ref: '#/components/schemas/BankAccountCreate'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
    delete:
      tags:
      - Bank Accounts
      summary: Delete a bank account
      description: 'Deleting a bank account is irreversible and reaches past the account itself. It removes

        every transaction the account holds, and — unless another account shares it — the accounting

        journal attached to it together with every accounting entry written in that journal. There is

        no undo, and no export is taken first.


        Three cases are refused rather than deleted, so the destructive path is narrow:

        — 409 when the account holds transactions already reconciled with a receipt, a supplier

        or colleague payment, or a miscellaneous operation. This API never overrides that check, so an

        account with any bookkeeping against it cannot be deleted here at all: detach or delete those

        settlements in the Altoviz application first, and consider whether you meant to.

        — 400 when the account is connected to a provider, i.e. its `provider` is set.

        — 400 when the account is the company''s main one.

        What survives the 409 gate is an account with no reconciled transactions, so in practice this

        deletes an account that was created by mistake or never used. If you only want it out of the

        way of day-to-day work, there is nothing to delete: leave it in place.'
      operationId: DELETE_BankAccounts_Delete
      parameters:
      - name: id
        in: path
        description: Bank account ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v1/bankaccounts/setasmain/{id}:
    post:
      tags:
      - Bank Accounts
      summary: Make a bank account the main one
      description: 'Exactly one account is the company''s main account, so this moves the designation rather than

        adding it: whichever account held it loses it in the same operation. Setting the account that

        already holds it changes nothing and still succeeds.


        Allowed on a connected account, unlike `PUT` and `DELETE`. Being the main account is

        Altoviz''s own designation, not something the provider owns.

        400 when the account''s type cannot be the main one: only an account kept by hand and a

        Linxo-synchronized account qualify. A Stripe, GoCardless, PayPal or SumUp account is a payment

        balance rather than a bank account, and is refused.

        The main account is what the application offers first when a settlement needs a bank account.

        It is unrelated to `defaultPaymentMethod`, which is per-account.'
      operationId: POST_BankAccounts_SetAsMain
      parameters:
      - name: id
        in: path
        description: Bank account ID
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BankAccount'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
  /v1/bankaccounts/{id}/transactions:
    get:
      tags:
      - Bank Accounts
      summary: List a bank account's transactions
      operationId: GET_BankAccounts_Transactions
      parameters:
      - name: id
        in: path
        description: Bank account ID
        required: true
        schema:
          type: integer
          format: int32
      - name: PageIndex
        in: query
        schema:
          type: integer
          format: int32
      - name: PageSize
        in: query
        schema:
          type: integer
          format: int32
      - name: OrderBy
        in: query
        schema:
          type: string
      - name: From
        in: query
        description: From (inclusive)
        schema:
          type: string
          format: date
      - name: To
        in: query
        description: To (inclusive)
        schema:
          type: string
          format: date
      - name: SearchTerm
        in: query
        description: Full-text search over the label and the amount
        schema:
          type: string
      - name: HideExcluded
        in: query
        description: Leave out the transactions that have been set aside. Off by default, so they are returned.
        schema:
          type: boolean
      - name: HideReconciliated
        in: query
        description: 'Leave out the transactions already matched to a settlement. Off by default, so they are

          returned.'
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          headers:
            x-page-prev:
              description: Relative URL of previous page when available
              schema:
                type: string
            x-page-next:
              description: Relative URL of next page when available
              schema:
                type: string
            x-page-count:
              description: Total number of pages
              schema:
                type: integer
                format: int32
            x-record-count:
              description: Total number of matching records
              schema:
                type: integer
                format: int32
            x-page-index:
              description: Current page index
              schema:
                type: integer
                format: int32
            x-page-size:
              description: Current page size
              schema:
                type: integer
                format: int32
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BankTransaction'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
components:
  schemas:
    BankTransaction:
      type: object
      properties:
        bankAccountId:
          type: integer
          description: Bank account ID
          format: int32
          readOnly: true
        category:
          type:
          - string
          - 'null'
          description: Category as the provider classifies it
          readOnly: true
        coming:
          type: boolean
          description: Whether the transaction is announced but not yet settled by the bank
          readOnly: true
        date:
          type: string
          description: Date the transaction counts under
          format: date-time
          readOnly: true
        fullLabel:
          type:
          - string
          - 'null'
          description: Full label as the bank sends it
          readOnly: true
        id:
          type: integer
          description: Bank transaction ID
          format: int32
          readOnly: true
        includedExternalFeesAmount:
          type: number
          description: Fees already included in Altoviz.Api.Models.BankTransaction.Value
          format: double
          readOnly: true
        isExcluded:
          type: boolean
          description: 'Whether the transaction has been set aside, so it is not offered for reconciliation and does

            not count towards the account''s pending total. Toggled by `Exclude` and `Include`.'
          readOnly: true
        isImported:
          type: boolean
          description: Whether the transaction came from a file import rather than a provider
          readOnly: true
        isReconciliated:
          type: boolean
          description: Whether the transaction is already matched to a settlement
          readOnly: true
        label:
          type:
          - string
          - 'null'
          description: Short label
          readOnly: true
        metadata:
          type:
          - object
          - 'null'
          additionalProperties:
            type:
            - string
            - 'null'
          description: Metadata carried with the transaction
          readOnly: true
        nature:
          $ref: '#/components/schemas/BankTransactionNature'
        notes:
          type:
          - string
          - 'null'
          description: Notes
          readOnly: true
        paymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        transactionId:
          type:
          - string
          - 'null'
          description: The transaction's identifier at the provider it was synchronized from
          readOnly: true
        value:
          type: number
          description: Amount. Negative for money leaving the account.
          format: double
          readOnly: true
        valueDate:
          type:
          - string
          - 'null'
          description: Value date
          format: date-time
          readOnly: true
      additionalProperties: false
      description: Bank transaction.
    BankAccount:
      type: object
      properties:
        accountNumber:
          type:
          - string
          - 'null'
          description: Accounting account number
          readOnly: true
        balance:
          type: number
          description: Current balance, derived from the initial balance and every transaction since
          format: double
          readOnly: true
        bankName:
          type:
          - string
          - 'null'
          description: Bank name
        bic:
          type:
          - string
          - 'null'
          description: BIC
        connected:
          type: boolean
          description: 'Whether this account is synchronized from a provider, which is exactly whether

            Altoviz.Api.Models.BankAccount.Provider is set.


            A connected account is read-only: `PUT` and `DELETE` on it are refused. Disconnect

            it in the Altoviz application first if you mean to take it over by hand.'
          readOnly: true
        currency:
          type:
          - string
          - 'null'
          description: ISO currency code. Defaults to EUR.
        defaultPaymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        iban:
          type:
          - string
          - 'null'
          description: IBAN
        id:
          type: integer
          description: Bank account ID
          format: int32
          readOnly: true
        initialBalance:
          type: number
          description: 'Balance the account held before the first transaction Altoviz knows about. The running

            `balance` is derived from it, so changing it moves every balance after it.'
          format: double
        isMain:
          type: boolean
          description: Whether this is the company's main account
          readOnly: true
        journalCode:
          type:
          - string
          - 'null'
          description: Accounting journal code
          readOnly: true
        lastUpdatedAt:
          type:
          - string
          - 'null'
          description: When the account was last synchronized with its provider
          format: date-time
          readOnly: true
        logoUri:
          type:
          - string
          - 'null'
          description: Bank logo URL
          readOnly: true
        metadata:
          type:
          - object
          - 'null'
          additionalProperties:
            type:
            - string
            - 'null'
          description: 'Metadata: free-form key/value pairs carried with the bank account, for an integration to keep

            its own identifiers and flags against it.


            Sent as a PATCH, not a replacement: keys you send are added or updated, keys you leave out

            keep whatever they held, and a key is removed only when you send it as `null`. Omitting

            the property entirely leaves the whole bag untouched, and `""` stores an empty value

            rather than removing the key.'
        name:
          type:
          - string
          - 'null'
          description: Name
        pendingTransactions:
          type: integer
          description: Transactions not yet reconciled with a document
          format: int32
          readOnly: true
        pendingTransactionsTotal:
          type: number
          description: Total value of the transactions not yet reconciled
          format: double
          readOnly: true
        provider:
          $ref: '#/components/schemas/BankAccountProvider'
        synchronizing:
          type: boolean
          description: Whether a synchronization is running
          readOnly: true
      additionalProperties: false
      description: Bank account
    BankAccountProvider:
      type: object
      properties:
        accountId:
          type:
          - string
          - 'null'
          description: The account's identifier at the provider
          readOnly: true
        accountStatus:
          type:
          - string
          - 'null'
          description: The connection's status as the provider last reported it
          readOnly: true
        bankName:
          type:
          - string
          - 'null'
          description: The bank name the provider reports, which may differ from the account's own
          readOnly: true
        type:
          $ref: '#/components/schemas/BankAccountType'
      additionalProperties: false
      description: 'The provider a bank account is synchronized from. Read-only throughout: a connection is

        established in the Altoviz application, never through this API.'
    Error:
      type: object
      properties:
        errors:
          type:
          - array
          - 'null'
          items:
            type: string
          description: List of error messages
        message:
          type:
          - string
          - 'null'
          description: Error message
      additionalProperties: false
      description: Error
    BankAccountCreate:
      type: object
      properties:
        bankName:
          type:
          - string
          - 'null'
          description: Bank name
        bic:
          type:
          - string
          - 'null'
          description: BIC
        currency:
          type:
          - string
          - 'null'
          description: ISO currency code. Defaults to EUR.
        defaultPaymentMethod:
          $ref: '#/components/schemas/PaymentMethod'
        iban:
          type:
          - string
          - 'null'
          description: IBAN
        initialBalance:
          type: number
          description: 'Balance the account held before the first transaction Altoviz knows about. The running

            `balance` is derived from it, so changing it moves every balance after it.'
          format: double
        metadata:
          type:
          - object
          - 'null'
          additionalProperties:
            type:
            - string
            - 'null'
          description: 'Metadata: free-form key/value pairs carried with the bank account, for an integration to keep

            its own identifiers and flags against it.


            Sent as a PATCH, not a replacement: keys you send are added or updated, keys you leave out

            keep whatever they held, and a key is removed only when you send it as `null`. Omitting

            the property entirely leaves the whole bag untouched, and `""` stores an empty value

            rather than removing the key.'
        name:
          type:
          - string
          - 'null'
          description: Name
      additionalProperties: false
      description: Bank account
    BankProvider:
      type: object
      properties:
        beta:
          type:
          - boolean
          - 'null'
          description: Beta
        branchName:
          type:
          - string
          - 'null'
          description: Bank provider branch name
        countryCodes:
          type:
          - array
          - 'null'
          items:
            type: string
          description: Bank provider country codes
        id:
          type:
          - string
          - 'null'
          description: Bank provider Id
        logoUri:
          type:
          - string
          - 'null'
          description: Bank provider logo URI
        markets:
          type:
          - array
          - 'null'
          items:
            type: string
          description: Bank provider markets
        name:
          type:
          - string
          - 'null'
          description: Bank provider name
      additionalProperties: false
      description: Bank provider
    BankAccountType:
      enum:
      - Standard
      - Stripe
      - GoCardless
      - Paypal
      - SumUp
      - Linxo
      - Other
      type: string
    ProblemDetails:
      type: object
      properties:
        detail:
          type:
          - string
          - 'null'
        instance:
          type:
          - string
          - 'null'
        status:
          type:
          - integer
          - 'null'
          format: int32
        title:
          type:
          - string
          - 'null'
        type:
          type:
          - string
          - 'null'
      additionalProperties: {}
    BankTransactionNature:
      enum:
      - Transfer
      - Order
      - Check
      - CashDeposit
      - Payback
      - Withdrawal
      - Loan
      - BankFees
      - Card
      - CardSummary
      - Interest
      - Dividend
      - Other
      type: string
    PaymentMethod:
      enum:
      - Transfer
      - Order
      - Check
      - Cash
      - Card
      - Bill
      - Usec
      - Other
      type: string
  securitySchemes:
    ApiKey:
      type: apiKey
      description: 'API KEY generated in application. Example: "X-API-KEY: {apiKey}"'
      name: X-API-KEY
      in: header