NAV Navbar
Logo

Introduction

Quovo’s API provides methods for retrieving data from financial institutions on behalf of clients, advisors, and other users. This documentation includes detailed explanations of API endpoints and common data definitions. Please note that this documentation does not list all API endpoints. Additionally, you may not have access to all of the listed endpoints depending on the services you’ve purchased from Quovo.

Making Requests

The base URL for all Quovo API requests is https://api.quovo.com/v3

The API is built on RESTful principles with resource-oriented URL endpoints. HTTP status codes are used to indicate any API errors and all responses are returned in JSON format. All requests must be made over an HTTPS connection to ensure a secure transmission of data. Following a RESTful structure, requests should hit API endpoints using the appropriate HTTP method, which will depend on the desired action:

Method Description
GET Use the GET method to retrieve information about your users, their accounts, and any associated financial data. This will always be a read-only request, so queried objects will never be modified by a GET request.
POST Use a POST method to create a new object, such as a new user or connection. Request parameters should be given in JSON format. The response body will typically return the newly created resource.
PUT Use a PUT method to update an object, such as updating connection credentials. As with a POST request, parameters should be given in JSON format. If successful, the response body will typically return the modified object.
DELETE Use a DELETE method to delete an object, such as deleting one of your users. Successful DELETE requests will typically return an empty response body.

Responses

{
    "users": [
        {
            "email": "testuser@quovo.com",
            "id": 162703,
            "name": "Quovo Testuser",
            "username": "quovo_test_user",
            "value": 173471.15110
        },
        {
            "email": "another.testuser@quovo.com",
            "id": 162713,
            "name": "Quovo Testuser II",
            "username": "quovo_test_user_2",
            "value": 2944.11
        }
    ]
}

All non-empty response bodies, including errors, will be formatted as JSON objects. In general, a successful GET request (or any other request that retrieves data) will return an object with the data contained inside a single key-value pair. This key is always associated with the relevant endpoint. For example, GET /v3/users will return an object with users as the key and the list of users as its value.

If you are fetching multiple entries, such as the previous /v3/users example, the data will be returned as a list. If you are fetching a single entry, such as GET /v3/users/162703, the data will be returned as a single object.

{
    "user": {
        "email": "testuser@quovo.com",
        "id": 162703,
        "name": "Quovo Testuser",
        "username": "quovo_test_user",
        "value": 173471.15110
    }
}

Additionally, Quovo’s APIs use standard HTTP status codes to indicate the status of a request.

Below is a brief overview of the most common status codes:

Code Definition
200 OK - The request was successful and there is relevant data in the response body.
201 Created - Returned after a new object was created. Typically, the newly created object will be available in the response body.
204 No Content - Usually returned on a DELETE request. This indicates that the object was successfully removed, but there is no actual data to return.
400 Bad Request - There was an issue with the given parameters. This could be due to a missing required field, a malformed parameter, etc.
401 Unauthorized - The API credentials or access token used are incorrect.
403 Forbidden - You do not have access to the requested endpoint or action.
404 Not Found - Returned if the given resource either does not exist or you do not have access to it.
409 Conflict - This indicates that you are trying to perform an action that would interrupt or conflict with another ongoing action. For example, requesting a new sync for a connection that already has an ongoing sync will return a “Conflict”.
500 Internal Server Error - There are internal or API-related errors on Quovo’s side. Additional requests will not resolve the issue.
503 Service Unavailable - The targeted endpoint is currently unavailable. This is caused by temporary issues; access to the endpoint will return momentarily.

Errors

{
    "id": "bad_request",
    "message": "[institution_id]: Missing required parameter in the JSON body or the post body",
    "status": 400
}

If there is an error with your request, a JSON containing an error ID and message will be returned.

The status will always match the returned HTTP status code. While there are unique error IDs and messages, most invalid request errors (400s) will return an id of either invalid_parameter or bad_request. The associated message will detail simple request errors such as missing required fields or improperly formatted date parameters.

Pagination

{
    "transactions": [
        {
            "account_id": 9218058,
            "cashflow_category": null,
            "cashflow_subcategory": null,
            "connection_id": 4558694,
            "currency": null,
            "date": "2017-09-26",
            "fees": 0,
            "forex_rate": 1,
            "id": 1621191049,
            "is_cancel": false,
            "is_pending": false,
            "memo": "Buy stock",
            "price": 188.01,
            "quantity": 25,
            "subtype": "BUYL",
            "symbol": "AVB",
            "symbol_name": "AvalonBay Communities Inc.",
            "type": "B",
            "user_id": 162703,
            "value": -4700.25
        },
    ],
    "cursor": {
        "next": 1621191151,
        "prev": null
    }
}

Pagination is used for any endpoint with a sufficiently large set of data, mainly the /v3/holdings and /v3/transactions endpoints. Cursors are used as pointers to the next or previous sets of objects. When your request requires pagination, you will receive a partial set of data alongside a cursor object, which will contain a next and prev field.

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/accounts/9218058/transactions?cursor=1621191151"

You can then pass cursor.next or cursor.prev to traverse the full data set. For example, to retrieve the next set of transactions, you would pass cursor.next when requesting transactions (GET /v3/accounts/9218058/transactions?cursor=1621191151). If either cursor.prev or cursor.next are null, you have reached the start or end of the data set, respectively.

Authentication

curl -X POST --user "my_api_username:my_api_password" -H "Content-Type: application/json" \
    -d '{"name": "main_token"}' \
    "https://api.quovo.com/v3/tokens"
{
    "access_token": {
        "created": "2018-01-31T17:45:09Z",
        "expires": "2018-01-31T18:45:09Z",
        "name": "main_token",
        "token": "a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e"
    }
}

To verify incoming API requests, Quovo’s APIs use access tokens, similar to OAuth application-only authentication.

Use the /v3/tokens endpoint to manage your access tokens. To authenticate to the /v3/tokens endpoint, you will need API user credentials. This is one of the few API endpoints where you will need to use your API user credentials; most other endpoints are authenticated through access tokens.

Pass your API credentials to the /v3/tokens endpoint using Client-side Basic Auth.

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" \
    -d '{"username": "quovo_myfirstuser", "name": "Test User 1", "email": "fakeemail@quovo.com"}' \
    "https://api.quovo.com/v3/users"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json

Once you have an access token, you can authenticate to any other API endpoint. Pass the access token in the request header in the format Authorization: Bearer {token}, where {token} is your newly created access token.

/accounts

A Quovo “account” represents the individual financial accounts held under a Connection to a financial institution. A connection may contain multiple accounts. For example, a single bank connection might include a savings account, a checking account, and a mortgage.

Response Fields

{
    "accounts": [
        {
            "category": "Investment",
            "connection_id": 877247,
            "id": 746745,
            "institution_id": 21534,
            "institution_name": "Test Investment Institution",
            "is_disabled": false,
            "is_taxable": true,
            "name": "Investment Account",
            "nickname": "My account II",
            "owner_type": "Individual Account",
            "type": "Brokerage Account",
            "type_confidence": "High",
            "user_id": 162703,
            "username": "quovo_test_user",
            "value": 73479.091633
        },
        {
            "category": "Banking",
            "connection_id": 878793,
            "id": 750007,
            "institution_id": 21700,
            "institution_name": "Test Bank Institution",
            "is_disabled": false,
            "is_taxable": true,
            "name": "Checking Account",
            "nickname": null,
            "owner_type": "Individual Account",
            "type": "Checking",
            "type_confidence": "High",
            "user_id": 162703,
            "username": "quovo_test_user",
            "value": 101596.462388
        }
    ]
}
Name Type Description
category string A grouping of the account according to broader industry attributes, as identified by Quovo. Possible values include “Banking”, “Investment”, “Insurance”, and “Loan”. Categories contain more granular account “types”, while types can only have one category. See a full mapping of type to category here.
connection_id integer The Quovo connection to which the account belongs.
id integer The unique Quovo identifier for the account.
institution_id integer The financial institution with which the account’s connection is associated.
institution_name string The name of the associated financial institution.
is_disabled boolean Disabled accounts will not yield any data, including transactions and holdings. Disabled account values will also be excluded when calculating a total connection or user value. You may want to set an account’s is_disabled state to true if the end user wants to only view a subset of accounts within a connection, for privacy purposes. Note that connections can also be disabled, in which case all accounts within that connection will be disabled as well; however, the connection is_disabled state is only controlled by Quovo, and disabled accounts in a disabled connection cannot have their disabled state changed via the API.
is_taxable boolean Indicates whether a specific account type is considered to be taxable or non-taxable. The values conform to standard tax treatment for account types (e.g., IRAs are generally understood to be non-taxable). Note that this information is generally most useful in the context of investment accounts.
name string The account’s “name” as found at the financial institution. This field often contains the full account number. Note: Because of the sensitive nature of users’ financial institution account numbers, the name field is obfuscated by default. Unobfuscated account numbers can be retrieved using the /auth endpoint.
nickname string A descriptive name for the account. While there is a nickname taken from the financial institution, this field may be updated.
owner_type string The ownership type of the account. Possible values are “Individual Account”, “Joint Account”, and “Trust Account.”
type string The type of account as identified by Quovo, based on its holdings, transactions, and tax eligibility. This field may also be updated. There are a large number of possible values for account type. Detailed descriptions of our account types, including our Canadian account types, can be found in our data dictionary.
type_confidence string The level of confidence in the accuracy of the account type. Confidence levels are split into four tiers: “Very High”, “High”, “Moderate”, and “Low”. This value can be used to decide whether you should use the type, or ignore it due to its low confidence level.
user_id integer The Quovo user to whom the account and its connection belong.
username string The username of the associated Quovo user.
value decimal The total value of the account. Quovo calculates this value by summing all holdings within an account (if more than one holding exists) after every good sync completes. Note that this value may be negative for loans. Because of intraday price updates, it may be best to calculate the account’s value manually by fetching the account’s holdings and summing their individual values.

Get accounts

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/750007"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/accounts"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/878793/accounts"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch accounts across all connections and users

GET https://api.quovo.com/v3/accounts

Fetch a specific account

GET https://api.quovo.com/v3/accounts/{account_id}

Fetch accounts for a user

GET https://api.quovo.com/v3/users/{user_id}/accounts

Fetch accounts for a connection

GET https://api.quovo.com/v3/connections/{connection_id}/accounts

Modify an account

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"is_disabled": true}' "https://api.quovo.com/v3/accounts/750007"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Modify an existing account

PUT https://api.quovo.com/v3/accounts/{account_id}

Request Parameters

Name Type Description
is_disabled boolean Set an account to become disabled. Disabled accounts will not yield any data, i.e. their transactions and holdings will not be returned. Their values will also be excluded when calculating total connection and user value. This may be useful if the end user wants to only utilize a subset of accounts within in a connection.
nickname string Set or update an alternate name for the account. This ability to edit may be helpful for end users to better tag and identify their accounts.
type string Override the account’s type as set by Quovo. This field can only be set to one of Quovo’s standard account types. Note that the account’s category will automatically update to reflect the new type.

/auth

The /auth endpoint will yield information needed for money movement and account ownership verification. This includes bank account numbers, routing numbers, account owner details, and other details like current balances. Note: the information in this endpoint may be highly sensitive and access may be restricted by Quovo.

Response Fields

{
    "auth": {
        "account_name": "597716304411",
        "account_number": "597716304411",
        "available_balance": 2103.01,
        "category": "Banking",
        "connection_id": 1029277,
        "id": 1056003,
        "institution_id": 21700,
        "institution_name": "Test Bank Institution",
        "last_good_auth": "2016-07-29T17:13:48Z",
        "owner_details": {
            "address": {
                 "data": {
                     "city": "New York",
                     "state": "NY",
                     "street": "29 West 30th Street 2nd Floor",
                     "zip": "10001-4404"
                 },
                 "error": null
            },
            "dob": {
                "data": "1947-01-08",
                "error": null
            },
            "email": {
                "data": "nice.email@example.com",
                "error": null
            },
            "phone": {
                "data": "5556430695",
                "error": null
            },
            "owner_names": {
                "data": ["Shelia Riggs"],
                "error": null
            }
        },
        "present_balance": 2113.06,
        "routing": "306061549",
        "type": "Checking",
        "type_confidence": "High",
        "user_id":  162703,
        "username": "quovo_test_user",
        "wire_routing": null
    }
}
Name Type Description
account_name string The primary identifier of the account as given by the financial institution. The account name will be present for all account types, and may be the same as the account number.
account_number string The account number as represented at the financial institution. The account number is only present for “Checking” or “Savings” account types. Use the account number when transferring funds from an account.
available_balance decimal The total balance of the account, which does include any pending transactions.
category string A grouping of the account according to broader industry attributes, as identified by Quovo. Possible values include “Banking”, “Investment”, “Insurance”, and “Loan”. Categories can have multiple corresponding account types, while account types can only have one category.
connection_id integer The Quovo connection to which the account belongs.
id integer The unique Quovo identifier for the account.
institution_id integer The financial institution with which the account’s connection is associated.
institution_name string The name of the associated financial institution.
last_good_auth string A timestamp (UTC) of the last time an auth sync completed successfully, i.e. returned a status of “good” with valid accounts. The account’s balance will generally correspond to this datetime.
owner_details object Additional details about the account owners, such as their name(s) address. These fields are restricted by default. See below for the fields in the owner_details object.
present_balance decimal The current balance of the account, which does not include any pending transactions.
routing string A nine-digit sequence used to identity the financial institution. This is also known as the ABA number. Note that for Canadian accounts, the EFT number is supplied here.
type string The type of account as identified by Quovo, based on its holdings, transactions, and tax eligibility. Possible values for type include “Checking”, “Savings” and more.
type_confidence string The level of confidence in the accuracy of the account type. Confidence levels are split into four tiers: “Very High”, “High”, “Moderate”, and “Low”. This value can be used to decide whether you should use the type, or ignore it due to its low confidence level.
user_id integer The Quovo user to whom the account and its connection belong.
username string The username of the associated Quovo user.
wire_routing string A nine-digit numeric code used for wire transfers or routing.

owner_details Object

Name Type Description
address object The mailing address connected to the bank account. See below for the fields in the address object.
dob string The date of birth of the account owner.
email string The email address associated with the bank account.
owner_names array The account owners’ names as represented at the financial institution.
phone string The telephone number associated with the bank account.

address Object

Name Type Description
city string The city of the address.
state string The state of the address, represented as the two-letter state abbreviation.
street string Any part of the address that does not fall under the other fields, including the street number and street name.
zip string The postal zip code of the address. This may include the additional “+4” digits, e.g., “12345-6789” vs “12345”.

Get Auth info for an account

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/1056003/auth"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Retrieve account verification info for an account

GET https://api.quovo.com/v3/accounts/{account_id}/auth

/auth_deposits

star Premium

Quovo provides Auth Deposit verification for any institution not covered by instant connection verification. Auth Deposits leverage Quovo connection aggregation to automatically verify that microdeposits (sent by Quovo) have cleared at a specified bank connection.

Response Fields

{
    "auth_deposits": [
        {
            "account_id": 1760061,
            "connection_id": 1163268,
            "connection_status": "good",
            "created": "2017-08-25T16:51:13Z",
            "error": null,
            "id": 42521,
            "status": "verified",
            "updated": "2017-08-26T16:58:07Z"
        },
        {
            "account_id": 5511435,
            "connection_id": 3531576,
            "connection_status": "good",
            "created": "2017-08-30T17:12:06Z",
            "error": {
                "id": "invalid_connection_number",
                "message": "The connection number is not recognized by the end institution."
            },
            "id": 31339,
            "status": "failed",
            "updated": "2017-09-05T17:12:06Z"
        }
    ]
}
Name Type Description
account_id integer The Quovo account the Auth Deposits are targeting.
connection_id integer The Quovo connection to which the associated account belongs.
connection_status string The sync status of the connection.
created string A timestamp (UTC) that indicates when the Auth Deposit process was initiated.
error object An object containing an id and message field. This illustrates why a microdeposit might have failed, e.g. invalid_routing_number or invalid_bank_connection.
id integer The ID of the Auth Deposit. This is created and assigned by Quovo.
status string The current status of the Auth Deposit. This status will update as the deposit moves through the transfer flow. Detailed descriptions of our Auth Deposit statuses can be found in our data dictionary.
updated string A timestamp (UTC) that indicates the last time the Auth Deposit was updated.

Check Auth Deposits

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/auth_deposits"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/accounts/1760061/auth_deposits"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/auth_deposits/42525"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch the status of all Auth Deposits across all accounts

GET https://api.quovo.com/v3/auth_deposits

Fetch the status of Auth Deposits on a single account

GET https://api.quovo.com/v3/accounts/{account_id}/auth_deposits

Fetch the status of a single Auth Deposit

GET https://api.quovo.com/v3/auth_deposits/{auth_deposit_id}

Request Parameters

Name Type Description
status string Filter results by the Auth Deposits’ status field. All Auth Deposits returned will have the given status.
updated_after string Filter results by the Auth Deposits’ updated field. All Auth Deposits returned will have been updated after the given datetime (in ISO 8601 format).

Initiate Auth Deposits

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    -H "Content-Type: application/json" \
    -d '{"account_number": "569339485397", "routing": "306061549"}' \
    "https://api.quovo.com/v3/accounts/1760061/auth_deposits"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created

Initiate the Auth Deposit process on a account

POST https://api.quovo.com/v3/accounts/{account_id}/auth_deposits

Request Parameters

Name Type Description
account_number* string The bank account number as represented at the financial institution.
routing* string A nine-digit sequence used to identity the financial institution. This is also known as the ABA number.

Verify Auth Deposits

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    -H "Content-Type: application/json" \
    -d '{"amounts": [0.06, 0.02]}' \
    "https://api.quovo.com/v3/auth_deposits/42535"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Manually verify the Auth Deposits sent

POST https://api.quovo.com/v3/auth_deposits/{auth_deposit_id}

Request Parameters

Name Type Description
amounts* array An array containing all of the deposit values.

Auth Deposit Error Codes

These error codes typically only appear if the Auth Deposit’s status is deposit_failed. The error will further detail why the ACH transfer failed.

Id Description
invalid_account_number The account number is not recognized by the end institution. The Auth Deposit process should be reinitiated with a corrected bank account number.
invalid_bank_account The targeted bank account cannot complete ACH transfers at this time. This usually indicates the bank account is unsuitable for any incoming ACH transfers and cannot be used for Auth Deposit verification.
invalid_routing_number The routing number does not belong to a valid ACH-enabled institution. The Auth Deposit process should be reinitiated with a corrected routing number.
process_error Quovo encountered an error attempting the ACH transfer. We will attempt to resolve the issue and automatically resend the microdeposits.

/balance_estimate

star Premium

The /balance_estimate endpoint provides predictions of what a synced account’s balances will be on a given date. The estimated future balance is presented in a histogram with up to 10 bins, with each bin including an upper bound, a lower bound, and a probability the balance falls in the bin. Note: this endpoint is restricted for API users by default. Contact us if you would like more information about Balance Estimate or if you would like access to this endpoint.

Response Fields

{
    "balance_estimate": {
        "account_id": 10518110,
        "current_balance": 11423.43,
        "current_date": "2018-03-28",
        "estimate_date": "2018-05-01",
        "future_balance_distribution": [
            {
                "upper": 10012.16,
                "lower": 7777.52,
                "percent": 0.041
            },
            {
                "upper": 12246.8,
                "lower": 10012.16,
                "percent": 0.049
            },
            {
                "upper": 14481.44,
                "lower": 12246.8,
                "percent": 0.068
            },
            {
                "upper": 16716.08,
                "lower": 14481.44,
                "percent": 0.146
            },
            {
                "upper": 18950.72,
                "lower": 16716.08,
                "percent": 0.428
            },
            {
                "upper": 21185.36,
                "lower": 18950.72,
                "percent": 0.135
            },
            {
                "upper": 23420,
                "lower": 21185.36,
                "percent": 0.068
            },
            {
                "upper": 25654.64,
                "lower": 23420,
                "percent": 0.029
            },
            {
                "upper": 27889.28,
                "lower": 25654.64,
                "percent": 0.023
            },
            {
                "upper": 30123.92,
                "lower": 27889.28,
                "percent": 0.013
            }
        ],
        "median_future_balance": 17746.13
    }
}
Name Type Description
account_id integer The Quovo account the estimation was run on.
current_balance decimal The current balance of the account.
current_date string The date the estimation was run on.
estimate_date string The future date the balance estimate will be based on.
future_balance_distribution array A breakdown of the possible balances.
median_future_balance decimal The future account balance estimated by the Balance Estimator.

future_balance_distribution Object

Name Type Description
upper decimal The upper bound of the balance in the given bin
lower decimal the lower bound of the balance in the given bin
percent decimal The likelihood the estimated balance falls in this bin

Get a balance estimate

Retrieve a balance estimation for an account

GET https://api.quovo.com/v3/accounts/{account_id}/balance_estimate?date={date}

Pass the date you would like to estimate the balance for as the parameter date in YYYY-MM-DD form.

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/123454321/balance_estimate?date=2018-05-04"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Request Parameters

Name Type Description
date string The date you want the balance estimated for

/challenges

Challenges are the multi-factor authentication (MFA) questions that institutions may require answering before a connection can be successfully synced. “What was your first pet’s name?” is a common example of an MFA question. There are many types of MFA questions, such as multiple-choice MFA or two-step real-time verification. These different challenge types are explained more in-depth below.

Response Fields

{
    "challenges": [
        {
              "connection_id": 878793,
              "expires": "2018-03-28T14:00:40Z",
              "id": 60677,
              "should_answer": true,
              "type": "question",
              "question": "What city is your place of birth?"
        }
    ]
}
Name Type Description
connection_id integer The Quovo connection to which the challenge belongs.
choices array (Only available if the challenge type is “choices”) A list of possible MFA answers; used for MFA with a multiple-choice portion. See below for the fields in the choices objects.
id integer The unique Quovo identifier for this challenge.
expires string A timestamp for when (if at all) the challenge will expire and can no longer be answered by the user. Once the challenge has expired you will need to re-sync the connection to retrieve a new challenge.
image object (Only available if the challenge type is “image”) An object that contains a data URI or image URL that should be displayed to the end user; used for MFA that displays an image alongside its MFA question. See below for the fields in the image object.
image_choices array (Only available if the challenge type is “image_choices”) A combination of “choices” and “image”. This field contains a list of image objects that should be displayed to the end user. See below for the fields in the image objects.
question string The full text of the MFA question.
should_answer boolean If should_answer is true, this MFA challenge is either unanswered or was answered incorrectly. This challenge should be displayed to the end user so that they can update it with the appropriate answer. Note: Multiple challenges may have should_answer set to true, which means multiple MFA challenges need to be answered before continuing.
type string Indicates the type of MFA challenge, which will necessitate different workflows. These different MFA types are explained in more depth here.

choices Object

Name Type Description
category string Sometimes, multiple-choice options are grouped into separate categories. For example, some real-time MFA questions have a “Phone” vs a “Text” category. When not null, these categories must be displayed to the end user. The same value might appear twice under multiple categories, e.g., the same Phone number used in both the “Phone” and “Text” categories.
key integer A helper field that is equivalent to the index of the choice (starting at index 0). Multiple-choice challenges must be answered with this index or key.
value string A possible answer for the multiple-choice MFA.

image Object

Name Type Description
html string A full <img> element that should be displayed to the end user.
source string The image URL or data URI of the image. While the html field will contain the same URL, source can be used instead if you cannot safely display the raw html, or if you need to attach different attributes to the <img> element.

Get MFA Challenges

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/880701/challenges"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch challenges for a connection

GET https://api.quovo.com/v3/connections/{connection_id}/challenges

Answer MFA Challenges

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"answers": [{"challenge_id" 60677, "answer": "New York City"}]}' "https://api.quovo.com/v3/connections/880701/challenges"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Answer available MFA Challenges for a connection

PUT https://api.quovo.com/v3/connections/{connection_id}/challenges

Request Parameters

Name Type Description
answers* string The answer(s) to the MFA Challenge(s). This parameter must be an array of objects each containing a challenge_id and answer field, where challenge_id is the targeted challenge’s id.

Challenge Types

The different MFA Challenge types represent the different workflows or display options you will need to support for syncing all connections. While most MFA challenges only require displaying the question (“question” type), some institutions have different requirements. Note: Institutions regularly change their methods for credential authentication, so this list may change over time, and challenge types may change even at the same institution.

Type Description
choices A multiple-choice MFA challenge. Display the choices found in the choices field of the challenge object to the end user. When answering “choices” MFA, send the index (starting at index 0) or key of the choice.
image An MFA challenge that has an associated image to display. Check the image field in the challenge object for the image URL or data URI.
image_choices A combination of “choices” and “image”. There are multiple images to display, while the end user should only select one.
question A typical MFA challenge. Only the question needs to be presented to the end user.

/connections

A “connection” at Quovo represents a user’s access to a financial institution. Connections are “synced” to retrieve data relating to the financial accounts that the user holds at the institution. Note that users often hold multiple connections at different institutions, or even multiple connections to the same institution.

Response Fields

{
    "connections": [
        {
            "auto_updates": true,
            "config_instructions": null,
            "created": "2016-03-26T13:45:00Z",
            "id": 877247,
            "institution_id": 21534,
            "institution_name": "Test Investment Institution",
            "is_disabled": false,
            "last_good_sync": "2018-03-28T14:00:40Z",
            "last_sync": "2018-03-28T14:00:40Z",
            "status": "good",
            "user_id": 162703,
            "username": "quovo_test_user",
            "value": 73479.096133
        },
        {
            "auto_updates": true,
            "config_instructions": null,
            "created": "2016-03-28T16:58:30Z",
            "id": 877504,
            "institution_id": 21700,
            "institution_name": "Test Bank Institution",
            "is_disabled": false,
            "last_good_sync": "2018-03-28T16:58:30Z",
            "last_sync": "2018-03-28T16:58:30Z",
            "status": "good",
            "user_id": 162703,
            "username": "quovo_test_user",
            "value": 1744.14
        }
    ]
}
Name Type Description
auto_updates boolean A flag that indicates whether Quovo will sync the connection nightly or not. This field will only appear if you have the /auth endpoint enabled.
config_instructions string Institution-specific instructions for the end user, which need to be completed before the connection can successfully sync. The end user will usually need to perform some action on their institution’s website, such as enabling an option in their user settings.
created string A timestamp (UTC) for when the connection was added to Quovo. Note that the creation time may not coincide with when a connection was successfully (or unsuccessfully) synced.
id integer The unique Quovo identifier for the connection.
institution_id integer The Quovo institution associated with this connection.
institution_name string The name of the associated financial institution.
is_disabled boolean If a connection is disabled, it cannot be synced, and its associated accounts cannot have data retrieved for them. Note: disabled connections are set by Quovo, while disabled accounts can be set using the API.
last_good_sync string A timestamp (UTC) of the last time a sync completed successfully, i.e. returned a status of “good”.
last_sync string A timestamp (UTC) of the last time there was a sync attempt. This is set regardless if the sync returned a “good” or non-“good” status.
status string The status of the last completed sync attempt, which indicates whether the connection was successfully synced, or if additional steps need to be completed. Detailed descriptions of connection statuses can be found in our data dictionary. Note: the connection status will not change while there is an ongoing sync attempt; it will continue to show the status of the last completed sync.
user_id integer The user that owns the connection.
username string The username of the associated user.
value decimal The total value of all accounts within this connection, which is calculated after the completion of any successful sync.

Get connections

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/877247"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/connections"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch all connections across all users

GET https://api.quovo.com/v3/connections

Fetch a specific connection

GET https://api.quovo.com/v3/connections/{connection_id}

Fetch a user’s connections

GET https://api.quovo.com/v3/users/{user_id}/connections

Create a connection

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"institution_id": 21534}' "https://api.quovo.com/v3/users/162703/connections"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created
{
    "connection": {
        "config_instructions": null,
        "created": "2016-03-28T16:58:30Z",
        "id": 877504,
        "institution_id": 21700,
        "institution_name": "Test Bank Institution",
        "is_disabled": false,
        "last_good_sync": "2018-03-28T16:58:30Z",
        "last_sync": "2018-03-28T16:58:30Z",
        "status": "good",
        "user_id": 162703,
        "username": "quovo_test_user",
        "value": 1744.14
    }
}

Create a new Quovo connection

POST https://api.quovo.com/v3/users/{user_id}/connections

Request Parameters

Name Type Description
institution_id* integer The Quovo ID for the associated financial institution.
username string The end user’s login username; generally the same one they use to login directly on their institution’s website.
passcode string The end user’s login passcode; generally the same one they use to login directly on their institution’s website.

Modify a connection

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"username": "testusername", "passcode": "newpasscode"}' "https://api.quovo.com/v3/connections/878793"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Modify an existing connection

PUT https://api.quovo.com/v3/connections/{connection_id}

Request Parameters

Name Type Description
institution_id integer The Quovo ID for the associated financial institution.
username string The end user’s login username; generally the same one they use to login directly on their institution’s website. If you would like to modify the login username on this connection, you will also have to pass the login passcode, regardless if it is being changed or not. Note that both username and passcode need to be updated together – one parameter cannot be updated alone.
passcode string The end user’s login passcode; generally the same one they use to login directly on their institution’s website. If you would like to modify the login passcode on this connection, you will also have to pass the login username, regardless if it is being changed or not. Note that both username and passcode need to be updated together – one parameter cannot be updated alone.

Delete a connection

curl -X DELETE -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/877247"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Status: 204 No Content

Delete an existing Quovo connection

DELETE https://api.quovo.com/v3/connections/{connection_id}

/expenses

star Premium

The /expenses endpoint provides a high level overview of a user’s or an account’s recurring expenses, as well as a detailed list of all the corresponding transactions. Recurring expenses are grouped by “streams,” or clusters of expense transactions that show up from the same source with similar frequencies. Note: this endpoint is restricted for API users by default. Contact us if you would like more information about Expenses or if you would like access to this endpoint.

Response Fields

{
    "expenses": {
        "summary": {
            "end_date": "2018-02-12",
            "num_transactions": 54,
            "start_date": "2017-02-12",
            "total_irregular_expenses": 0,
            "total_regular_expenses": -46235.74
        },
        "streams": [
            {
                "account_id": 1056003,
                "cashflow_category": "Bills/Utilities",
                "cashflow_subcategory": "Internet",
                "connection_id": 1029277,
                "first_date": "2016-11-04",
                "frequency": "monthly",
                "id": 1,
                "last_date": "2016-12-02",
                "mean_value": -89.48,
                "median_value": -87.3,
                "memo": "COMCAST 012345 SPA WEB ID: 123ACH_DEBIT",
                "num_transactions": 3,
                "num_weeks": 21,
                "periodicity": 25.5,
                "rank": "primary",
                "stdev_value": 13.07,
                "total_value": -536.91,
                "transactions": [
                    {
                        "currency": null,
                        "date": "2016-11-04",
                        "id": 123456765,
                        "value": -79.96
                    },
                    {
                        "currency": null,
                        "date": "2016-12-04",
                        "id": 123456764,
                        "value": -107.86
                    },
                    {
                        "currency": null,
                        "date": "2017-1-04",
                        "id": 123456763,
                        "value": -86.93
                    }
                ],
                "user_id": 162703
            }
        ]
    }
}
Name Type Description
summary object A combined summary of all expense streams. See below for the fields in the summary object.
stream array An array containing the individual expense streams. See below for the fields in a stream object.

summary Object

Name Type Description
end_date string ​ The date of the last expense transaction.  
num_transactions integer The total number of expense transactions across all streams.
start_date string The date of the first expense transaction. 
total_irregular_expenses decimal The sum of all non-recurring expense streams.
total_regular_expenses decimal The sum of all recurring expense streams.

stream Object

Name Type Description
account_id integer The Quovo account to which the expense stream belongs.
cashflow_category string The cashflow category of the stream, such as “Entertainment” or “Rent”. This field generally only applies to cash transactions in bank and credit/debit card accounts. See here for full a list of cashflow categories.
cashflow_subcategory string A more granular description of cash transactions than cashflow_category. For example, a cashflow_category of “Food and Beverages” can have an associated cashflow_subcategory of “Restaurants” or “Bars.” Every cashflow subcategory will only ever belong to a single category. See here for a full list of cashflow subcategories.
connection_id integer The Quovo connection to which the expense stream belongs.
first_date string The date of the first transaction in the stream.
frequency decimal The average time period between each transaction. This value will either be “daily”, “weekly”, “biweekly”, “monthly”, “semi_monthly”, “multiple_months”, or “irregular”.
id integer The Quovo identifier for the stream. Note: this ID may change between subsequent API calls.
last_date string The date of the last transaction in the stream.
mean_value decimal The mean value of all transactions within the stream.
median_value decimal The median value of all transactions within the stream.
memo string The most common memo among the stream’s transactions.
num_transactions integer The total number of transactions in the stream.
num_weeks integer The number of weeks between the first and last transactions in the expense stream.
periodicity decimal The average number of days between two transactions in the stream.
rank string The rank of the expense stream. This value will be “primary”, “secondary”, or “irregular”. “primary” means the stream has the most recurring transactions as well as the largest total value (in absolute terms). “secondary” simply means the stream has recurring expenses, while “irregular” means the stream does not.
stdev_value decimal The standard deviation of all transactions within the stream.
total_value decimal The total value of all transactions in the stream.
transactions array The individual transactions and expenses within the stream.
user_id integer The Quovo user to which the expense stream belongs.

transaction Object

Name Type Description
currency string An ISO 4217 code for transactions that are in a foreign currency at the institution. currency will be null for any transactions priced in USD. Note that Quovo represents all monetary values in their local currency.
date string The date the transaction was made.
id bigint The unique Quovo identifier for the transaction.
value decimal The value or amount of the transaction. Note: this field will always be negative since expenses subtract from an account’s total balance.

Get expenses

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/expenses"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/1056003/expenses"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch expenses for a user

GET https://api.quovo.com/v3/users/{user_id}/expenses

Fetch expenses for an account

GET https://api.quovo.com/v3/accounts/{account_id}/expenses

Request Parameters

Name Type Description
end_date string ​ The date of the last transaction you would like to fetch. No transactions after this date will be returned.
min_expense_months string The minimum number of months of transactions the associated expense stream must contain.
max_expense_value string The maximum value the associated expense stream must have. Since expenses have negative values, this can also be interpreted as the minimum absolute value the expense stream must have.
start_date string The date of the first transaction you would like to fetch. No transactions before this date will be returned.

/expense_transactions

star Premium

The /expense_transactions endpoint provides a detailed overview of all the expense-related transactions for a user or an account, as well as which expense streams they fall under. Note: this endpoint is restricted for API users by default. Contact us if you would like more information about Expense Transactions or if you would like access to this endpoint.

Response Fields

{
    "expense_transactions": [
        {
            "account_id": 1056003,
            "cashflow_category": "Bills/Utilities",
            "cashflow_subcategory": "Cell phone",
            "connection_id": 1029277,
            "currency": null,
            "date": "2016-11-04",
            "frequency": "monthly",
            "id": 98765432,
            "memo": "COMCAST 012345 SPA WEB ID: 123ACH_DEBIT",
            "stream_id": 1,
            "user_id": 162703,
            "value": -79.96
        },
        {
            "account_id": 1056003,
            "cashflow_category": "Bills/Utilities",
            "cashflow_subcategory": "Cell phone",
            "connection_id": 1029277,
            "currency": null,
            "date": "2016-12-04",
            "frequency": "monthly",
            "id": 98765432,
            "memo": "COMCAST 012345 SPA WEB ID: 123ACH_DEBIT",
            "stream_id": 1,
            "user_id": 162703,
            "value": -107.86
        },
        {
            "account_id": 1056003,
            "cashflow_category": "Bills/Utilities",
            "cashflow_subcategory": "Cell phone",
            "category": "Bills/Utilities",
            "connection_id": 1029277,
            "currency": null,
            "date": "2017-1-04",
            "frequency": "monthly",
            "id": 98765432,
            "memo": "COMCAST 012345 SPA WEB ID: 123ACH_DEBIT",
            "stream_id": 1,
            "user_id": 162703,
            "value": -86.93
        }
    ]
}
Name Type Description
account_id integer The Quovo account to which the transaction belongs.
cashflow_category string The cashflow category of the transaction, such as “Entertainment” or “Rent”. This field generally only applies to cash transactions in bank and credit/debit card accounts. See here for full a list of cashflow categories.
cashflow_subcategory string A more granular description of cash transactions than cashflow_category. For example, a cashflow_category of “Food and Beverages” can have an associated cashflow_subcategory of “Restaurants” or “Bars.” Every cashflow subcategory will only ever belong to a single category. See here for a full list of cashflow subcategories.
category string The type of expense made, such as “Bills/Utilities” or “Rent”.
connection_id integer The Quovo connection to which the transaction belongs.
currency string An ISO 4217 code for transactions that are in a foreign currency at the institution. currency will be null for any transactions priced in USD. Note that Quovo represents all monetary values in their local currency.
date string The date of the transaction.
frequency string The average time period between each transaction in the associated expense stream. This value will either be “daily”, “weekly”, “biweekly”, “monthly”, “semi_monthly”, “multiple_months”, or “irregular”.
id bigint The unique Quovo identifier for the transaction.
memo string The memo associated with the transaction.
stream_id integer The Quovo identifier for the transaction’s expense stream. Note: this ID may change between subsequent API calls.
user_id integer The Quovo user to which the account belongs.
value decimal The value or amount of the transaction. Note: this field will be negative as each transaction is an expense.

Get expense transactions

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/expense_transactions"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/1056003/expense_transactions"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch expense transactions for a user

GET https://api.quovo.com/v3/users/{user_id}/expense_transactions

Fetch expense transactions for an account

GET https://api.quovo.com/v3/accounts/{account_id}/expense_transactions

Request Parameters

Name Type Description
end_date string ​ The date of the last expense transaction you would like to fetch. No transactions after this date will be returned.
min_expense_months string The minimum number of months of transactions the associated expense stream must contain.
max_expense_value string The maximum value the associated expense stream must have. Since expenses have negative values, this can also be interpreted as the minimum absolute value the expense stream must have.
start_date string The date of the first expense transaction you would like to fetch. No transactions before this date will be returned.

/extras

star Premium

Extras are any supplementary details about a Quovo account. This includes information about credit cards and loans such as the annual percentage rate (APR), interest rate, loan type, and loan origination date. The fields available for each account will differ based on its financial institution, and may even differ from account to account on the same institution. Note: all /extras fields are restricted by default.

Response Fields

{
    "extras": {
        "account_id": 750007,
        "interest_rate": "5.00000",
        "last_payment": 1021.45,
        "loan_type": "Mortgage",
        "original_principal": 125661,
        "origination_date": "2014-02-18"
    }
}
Name Type Description
account_id integer The Quovo account to which the extra details apply.
cash_apr string The interest rate on cash advances. Note: This is not the purchase APR.
credit_limit decimal The maximum amount of credit extended by the institutiton to the borrower.
death_benefit decimal The amount owed to the beneficiary of an annuity or life insurance policy upon death of the insured.
disbursement_dates array The dates on which funds will be disbursed.
due_date string The due date for the next payment.
guarantor string The guarantor of the student loan.
interest_rate string The interest rate on loans. For credit cards, this is the purchase APR.
is_overdue boolean true if a payment is currently overdue.
last_payment decimal The amount of the last payment.
last_payment_date string The date of the last payment.
last_statement_balance decimal The outstanding balance on the last statement.
last_statement_date string The date of the last statement.
loan_account_number string The account number of the loan.
loan_status string The status of the loan, e.g., “Repayment” or “Deferment”.
loan_type string The type of loan, e.g., “Auto Loan” or “Consolidation Loans”.
maturity_date string The date on which the loan should be paid in full.
min_payment decimal The minimum payment due for the next billing cycle.
original_principal decimal The original principal balance of the loan.
origination_date string The date on which the loan was initially lent.
outstanding_interest decimal The dollar amount of the accrued interest balance.
repayment_plan_type string The type of repayment plan, e.g., “Standard”, “Income”.
sequence_number string The sequence number of the student loan.
surrender_value decimal The amount owed to the contract owner upon early termination of an annuity or life insurance policy.
ytd_interest_paid decimal The year to date (YTD) interest paid.
ytd_principal_paid decimal The year to date (YTD) principal paid.

Get Extras

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/750007/extras"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch supplementary details on an account.

GET https://api.quovo.com/v3/accounts/{account_id}/extras

/holdings

Holdings are the individual financial holdings within an account. Bank accounts and loans typically only have a single holding: cash; however, investment accounts may have many distinct holdings.

Response Fields

{
    "holdings": [
        {
            "account_id": 746745,
            "basic_asset_class": "Equity",
            "connection_id": 877247,
            "currency": null,
            "forex_rate": 1.0,
            "id": 237432133,
            "price": 53.54,
            "quantity": 9.0,
            "symbol": "MSFT",
            "symbol_name": "Microsoft Corporation",
            "type": "Equity",
            "type_confidence": "Very High",
            "user_id": 162703,
            "value": 481.86
        },
        {
            "account_id": 746745,
            "basic_asset_class": "Equity",
            "connection_id": 877247,
            "currency": null,
            "forex_rate": 1.0,
            "id": 237432134,
            "price": 105.19,
            "quantity": 12.0,
            "symbol": "AAPL",
            "symbol_name": "Apple Inc",
            "type": "Equity",
            "type_confidence": "Very High",
            "user_id": 162703,
            "value": 1262.28
        }
    ]
}
Name Type Description
account_id integer The Quovo account to which the associated holding belongs.
basic_asset_class string A simplified classification of the holding’s asset class (generally relevant for investment positions). Note: Some holdings may have similar security types and asset classes (such as cash), while others will be quite different (such as ETFs and Mutual Funds) For a list of all available asset classes, see our data dictionary.
connection_id integer The Quovo connection to which the holding belongs.
currency string An ISO 4217 code for holdings that are held in a foreign currency at the institution. currency will be null for any security priced in USD. Note that Quovo represents all monetary values in their local currency.
forex_rate decimal The foreign exchange rate used to translate any foreign currency into USD. This rate will be 1.00 for any holding priced in USD. To convert prices and values from their local currency to USD, multiply price and value by the forex_rate (e.g., price * forex_rate == price_in_usd).
id integer A unique Quovo identifier for the holding. Note: IDs will change on every successful sync, so do not use IDs to track Quovo holdings.
price decimal The price per unit of this holding, either retrieved from the Quovo security master or as reported by the financial institution.
quantity decimal The number of units of this holding, as reported by the financial institution.
symbol string The public symbol for the relevant security in the holding. Quovo defaults to a “ticker symbol” but uses several fallback identifiers when a ticker is unavailable nor inapplicable: if a CUSIP is specified, it will be used instead; if the security is unique to a specific institution, the symbol will have a prefix of FI: to identify it as such (e.g., “FI:SVF-N”); if we are unable to identify the relevant security, the symbol will have a prefix of UN: (e.g., “UN:0000E3C9”). Any cash holding will use a symbol of CUR:USD.
symbol_name string The name of the associated security.
type string The security type of the holding, e.g., “Equity” or “Bond.” For a list of all available holding types, check the our data dictionary. Note that this information is most relevant for investment holdings.
type_confidence string The level of confidence in the accuracy of the holding’s type. Confidence levels are split into four tiers: “Very High”, “High”, “Moderate”, and “Low”. This value can be used to decide whether you should use the type, or ignore it due to its low confidence level.
user_id integer The Quovo user to which the account and connection belong.
value decimal The total value of the holding. Note that this value may be negative. In personal finance accounts, this represents the present balance, or the balance without accounting for pending transactions.

Get holdings

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/holdings"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/holdings"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/877247/holdings"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/746745/holdings"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch holdings across all accounts and connections

GET https://api.quovo.com/v3/holdings

Fetch holdings for a specific user

GET https://api.quovo.com/v3/users/{user_id}/holdings

Fetch holdings for a specific connection

GET https://api.quovo.com/v3/connections/{connection_id}/holdings

Fetch holdings for a specific account

GET https://api.quovo.com/v3/accounts/{account_id}/holdings

Request Parameters

Name Type Description
count integer The max number of holdings you would like to return for this request.
cursor integer This parameter is used for paginated results as a pointer to the next set of holdings. Review our Pagination section to learn more about paginated results.

/incomes

star Premium

The /incomes endpoint provides a high level overview of a user’s or an account’s recurring incomes, as well as a detailed list of all the corresponding transactions. Recurring incomes are grouped by “streams,” or clusters of deposit transactions that show up from the same source with similar frequencies. Note: this endpoint is restricted for API users by default. Contact us if you would like more information about Incomes or if you would like access to this endpoint.

Response Fields

{
    "incomes": {
        "summary": {
            "end_date": "2018-02-12",
            "num_transactions": 54,
            "start_date": "2017-02-12",
            "total_irregular_income": 0,
            "total_regular_income": 46235.74
        },
        "streams": [
            {
                "account_id": 1056003,
                "cashflow_category": "Paychecks/Salary",
                "cashflow_subcategory": "Paycheck",
                "connection_id": 1029277,
                "first_date": "2016-11-04",
                "frequency": "biweekly",
                "id": 15,
                "is_payroll_agency": true,
                "last_date": "2016-12-02",
                "mean_value": 1080.63,
                "median_value": 1046.21,
                "memo": "QUOVO INC PAYROLL PPD ID: 123431",
                "num_transactions": 3,
                "num_weeks": 6,
                "payee": "John Doe",
                "payer": "QUOVO INC",
                "periodicity": 13.36,
                "rank": "primary",
                "stdev_value": 263.01,
                "total_value": 3139.86,
                "transactions": [
                    {
                        "currency": null,
                        "date": "2016-11-04",
                        "id": 123456765,
                        "value": 1017.73
                    },
                    {
                        "currency": null,
                        "date": "2016-11-18",
                        "id": 123456764,
                        "value": 1028.43
                    },
                    {
                        "currency": null,
                        "date": "2016-12-02",
                        "id": 123456763,
                        "value": 1093.7
                    }
                ],
                "user_id": 162703
            }
        ]
    }
}
Name Type Description
summary object A combined summary of all income streams. See below for the fields in the summary object.
streams array An array containing the individual income streams. See below for the fields in a stream object.

summary Object

Name Type Description
end_date string The date of the last income transaction.  
num_transactions integer The total number of income transactions across all streams.
start_date string The date of the first income transaction. 
total_irregular_income decimal The sum of all non-recurring income streams. This stream will include large one-time deposits such as bonuses.
total_regular_income decimal The sum of all recurring income streams.

stream Object

Name Type Description
account_id integer The Quovo account to which the income stream belongs.
cashflow_category string The cashflow category of the stream, such as “Entertainment” or “Rent”. This field generally only applies to cash transactions in bank and credit/debit card accounts. See here for full a list of cashflow categories.
cashflow_subcategory string A more granular description of cash transactions than cashflow_category. For example, a cashflow_category of “Food and Beverages” can have an associated cashflow_subcategory of “Restaurants” or “Bars.” Every cashflow subcategory will only ever belong to a single category. See here for a full list of cashflow subcategories.
connection_id integer The Quovo connection to which the income stream belongs.
first_date string The date of the first transaction in the stream.
frequency decimal The average time period between each transaction. This value will either be “daily”, “weekly”, “biweekly”, “monthly”, “semi_monthly”, “multiple_months”, or “irregular”.
is_payroll_agency boolean Indicates whether the deposits are directly from a payroll agency.
id integer The Quovo identifier for the stream. Note: this ID may change between subsequent API calls.
last_date string The date of the last transaction in the stream.
mean_value decimal The mean value of all transactions within the stream.
median_value decimal The median value of all transactions within the stream.
memo string The most common memo among the stream’s transactions.
num_transactions integer The total number of transactions in the stream.
num_weeks integer The number of weeks between the first and last transactions in the income stream.
payee string The person or organization receiving the direct deposits.
payer string The person or organization responsible for the direct deposits.
periodicity decimal The average number of days between two transactions in the stream.
rank string The rank of the income stream. This value will be “primary”, “secondary”, or “irregular”. “primary” means the stream has the most recurring transactions as well as the largest total value. “secondary” simply means the stream has recurring deposits, while “irregular” means the stream does not.
stdev_value decimal The standard deviation of all transactions within the stream.
total_value decimal The total value of all transactions in the stream.
transactions array The individual transactions and deposits within the income stream.
user_id integer The Quovo user to which the income stream belongs.

transaction Object

Name Type Description
currency string An ISO 4217 code for transactions that are in a foreign currency at the institution. currency will be null for any transactions priced in USD. Note that Quovo represents all monetary values in their local currency.
date string The date the transaction was made.
id bigint The unique Quovo identifier for the transaction.
value decimal The total value of the transaction.

Get incomes

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/incomes"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/1056003/incomes"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch Incomes for a user

GET https://api.quovo.com/v3/users/{user_id}/incomes

Fetch Incomes for an account

GET https://api.quovo.com/v3/accounts/{account_id}/incomes

Request Parameters

Name Type Description
end_date string ​ The date of the last transaction you would like to fetch. No transactions after this date will be returned.
min_income_months string The minimum number of months of transactions the associated income stream must contain.
min_income_value string The minimum value the associated income stream must have.
start_date string The date of the first transaction you would like to fetch. No transactions before this date will be returned.

/income_transactions

star Premium

The /income_transactions endpoint provides a detailed overview of all the income-related transactions for a user or an account, as well as which income streams they fall under. Note: this endpoint is restricted for API users by default. Contact us if you would like more information about Income Transactions or if you would like access to this endpoint.

Response Fields

{
    "income_transactions": [
        {
            "account_id": 1056003,
            "cashflow_category": "Paychecks/Salary",
            "cashflow_subcategory": "Paycheck",
            "connection_id": 1029277,
            "currency": null,
            "date": "2016-11-18",
            "frequency": "biweekly",
            "id": 98765432,
            "is_payroll_agency": true,
            "memo": "QUOVO INC PAYROLL PPD ID: 123431",
            "payee": "John Doe",
            "payer": "QUOVO INC",
            "stream_id": 1,
            "user_id": 162703,
            "value": 4512.89
        },
        {
            "account_id": 1056003,
            "cashflow_category": "Paychecks/Salary",
            "cashflow_subcategory": "Paycheck",
            "connection_id": 1029277,
            "currency": null,
            "date": "2016-11-02",
            "frequency": "biweekly",
            "id": 98765432,
            "is_payroll_agency": true,
            "memo": "QUOVO INC PAYROLL PPD ID: 123431",
            "payee": "John Doe",
            "payer": "QUOVO INC",
            "stream_id": 1,
            "user_id": 162703,
            "value": 4512.93
        },
        {
            "account_id": 1056003,
            "cashflow_category": "Paychecks/Salary",
            "cashflow_subcategory": "Paycheck",
            "connection_id": 1029277,
            "currency": null,
            "date": "2016-10-19",
            "frequency": "biweekly",
            "id": 98765432,
            "is_payroll_agency": true,
            "memo": "QUOVO INC PAYROLL PPD ID: 123431",
            "payee": "John Doe",
            "payer": "QUOVO INC",
            "stream_id": 1,
            "user_id": 162703,
            "value": 4459.88
        }
    ]
}
Name Type Description
account_id integer The Quovo account to which the transaction belongs.
cashflow_category string The cashflow category of the transaction, such as “Entertainment” or “Rent”. This field generally only applies to cash transactions in bank and credit/debit card accounts. See here for full a list of cashflow categories.
cashflow_subcategory string A more granular description of cash transactions than cashflow_category. For example, a cashflow_category of “Food and Beverages” can have an associated cashflow_subcategory of “Restaurants” or “Bars.” Every cashflow subcategory will only ever belong to a single category. See here for a full list of cashflow subcategories.
connection_id integer The Quovo connection to which the transaction belongs.
currency string An ISO 4217 code for transactions that are in a foreign currency at the institution. currency will be null for any transactions priced in USD. Note that Quovo represents all monetary values in their local currency.
date string The date of the transaction.
frequency string The average time period between each transaction in the associated income stream. This value will either be “daily”, “weekly”, “biweekly”, “monthly”, “semi_monthly”, “multiple_months”, or “irregular”.
id bigint The unique Quovo identifier for the transaction.
is_payroll_agency boolean Indicates whether the deposit is directly from a payroll agency.
memo string The memo associated with the transaction.
payee string The person or organization receiving the direct deposit.
payer string The person or organization responsible for the direct deposit.
stream_id integer The Quovo identifier for the transaction’s income stream. Note: this ID may change between subsequent API calls.
user_id integer The Quovo user to which the transaction belongs.
value decimal The value or amount of the transaction.

Get income transactions

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/income_transactions"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/1029277/income_transactions"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch income transactions for a user

GET https://api.quovo.com/v3/users/{user_id}/income_transactions

Fetch income transactions for an account

GET https://api.quovo.com/v3/users/{user_id}/income_transactions

Request Parameters

Name Type Description
end_date string ​ The date of the last income transaction you would like to fetch. No transactions after this date will be returned.
min_income_months string The minimum number of months of transactions the associated income stream must contain.
min_income_value string The minimum value the associated income stream must have.
start_date string The date of the first income transaction you would like to fetch. No transactions before this date will be returned.

/institution_requests

Use this endpoint to request a new financial institution outside of Quovo’s current universe of available institutions. We track these requests to help prioritize new institution builds. Note that the parameters are similar to syncing a new account, as Quovo needs these details to explore and test new connections.

Request a new institution

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e"  -H "Content-Type: application/json" -d '{"username": "testusername", "passcode": "testpasscode", "institution_name": "U.S. Bank", "institution_url": "usbank.com"}' "https://api.quovo.com/v3/users/523479/institution_requests"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 204 No Content

Request a new financial institution

POST https://api.quovo.com/v3/users/{user_id}/institution_requests

Request Parameters

Name Type Description
institution_name* string The name of the requested institution.
institution_url* string The URL of the requested institution; ideally the full URL where the end user actually logs in to view their account data.
username* string The end user’s login username; the same one they use to login directly on their institution’s website.
passcode* string The end user’s login passcode; the same one they use to login directly on their institution’s website.

/institutions

A specific financial institution (or related sub-portal) where users hold accounts. Each connection must belong to an institution in order to sync account data.

Response Fields

{
    "institutions": [
        {
            "access_info": {
                "passcode_description": null,
                "sync_notes": null,
                "username_description": null
            },
            "country_code": "USA",
            "details": {
                "auth_type": "instant",
                "popularity_score": 1
            },
            "id": 21534,
            "is_available": true,
            "is_test": true,
            "name": "Test Investment Institution",
            "website": "www.quovo.com"
        },
        {
            "access_info": {
                "passcode_description": null,
                "sync_notes": null,
                "username_description": null
            },
            "country_code": "USA",
            "details": {
                "auth_type": "instant",
                "popularity_score": 1
            },
            "id": 21700,
            "is_available": true,
            "is_test": true,
            "name": "Test Bank Institution",
            "website": "www.quovo.com"
        }
    ]
}
Name Type Description
access_info object Provides additional detail on login information and specific input fields for an institution. See below for the fields in the access_info object.
country_code string The country in which the institution resides (in ISO 3166-1 alpha-3 format).
details object Additional information about the institution and how it is categorized on Quovo. See below for the fields in the details object.
id integer The unique Quovo identifier for the financial institution.
is_available boolean is_available will be true if the institution is currently accepting sync requests.
is_test boolean Quovo provides a number of synthetic institutions to simulate various API responses and provide example account data. These are designed to be used for development purposes and should generally not be displayed to end users.
name string The name of the financial institution.
website string The financial institution’s website. This URL may be helpful to display to end users to help differentiate between similarly named institutions.

access_info Object

Name Type Description
passcode_description string Display text for the passcode field. This field is used when the “passcode” field at the institution represents unusual input data, such as a PIN number. If available, we recommend displaying this description to the end user instead of simply “Password” or “Passcode” to avoid syncing confusion.
sync_notes string Institution-specific information to help users successfully sync to the institution. These notes can and should be displayed, when available, to the end user.
username_description string Display text for the username field. This field is used when the “username” field at the institution represents unusual input data, such as Account Number. If available, we recommend displaying this description to the end user instead of “Username” to avoid syncing confusion.

details Object

Name Type Description
auth_type string Quovo’s method for retrieving account authentication information. This will either be “instant” or “avm” (Auto-Verified Microdeposits) if instant verification is not available for the institution.
popularity_score integer A measure of the institution’s popularity based on broad groupings of all Quovo institutions according to how often accounts are synced by other Quovo users. This score is useful for ordering available institutions, ensuring the larger, more commonly synced institutions are seen first. Scores range from 1-10, with 10 being the most popular and 1 being the least.

Get institutions

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/institutions"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/institutions/21534"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch all of Quovo’s supported institutions

GET https://api.quovo.com/v3/institutions

Fetch a single Quovo-supported institution

GET https://api.quovo.com/v3/institutions/{institution_id}

Search for institutions

curl -X GET \
    -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/institutions?query=chase"
curl -X GET \
    -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/institutions?auth_type=instant&query=chase"

The /institutions endpoint can also be used to search for specific institutions. By passing the query parameter, you can search against institutions’ names, websites, and other identifying characteristics. The returned search results are filtered and sorted by relevance to the search term, as well as overall popularity.

For example, if you wanted to search for “Chase”, call GET /v3/institutions?query=chase. If you wanted to search for a specific instant account verification-enabled institution, call GET /v3/institutions?auth_type=instant&query=chase call.

Test Institutions

There are several test institutions that can help you test your syncing workflows and treatment of account data. None of them require actual account credentials, so you can ensure your syncing process works correctly without using any personal information.

Use the GET /v3/institutions/{institution_id} call to see a more in-depth description and instructions for each test institution. For example, Test Workflow (Challenges) can either sync successfully or create an additional MFA question depending on the answer to the first MFA question.. Detailed descriptions of these test institutions can be found in our data dictionary.

/manual_accounts

A manual account is an end user-created account, used as a container for manual holdings. Unlike typical Quovo accounts, which are automatically created and updated when an account syncs, manual accounts are managed directly by the end user.

Response Fields

{
    "manual_accounts": [
        {
            "connection_id": 1010651,
            "id": 1042111,
            "institution_id": 21639,
            "institution_name": "Manually Entered Holdings",
            "is_disabled": false,
            "name": "Real Estate",
            "updated": "2016-07-17T12:12:31Z",
            "user_id": 162703,
            "username": "quovo_test_user",
            "value": 812500
        },
    ]
}
Name Type Description
connection_id integer The Quovo connection to which the manual account belongs.
id integer The unique Quovo identifier for the account.
institution_id integer The Quovo institution with which the account is associated. All manually-entered accounts will be on institution 21639.
institution_name string The name of the associated financial institution. All manually-entered accounts will be on the institution “Manually Entered Holdings”.
is_disabled boolean Disabled manual accounts will not yield any data, including transactions and holdings. Their values will also be excluded when calculating total connection and user value.
name string The full account name as entered by the end user. This value may be updated at any time.
updated string A timestamp of the last time the account was updated by the end user. This includes any time the account’s manual holdings were updated.
user_id integer The Quovo user to whom the account belongs.
username string The username of the associated Quovo user.
value decimal The total sum value of all manual holdings within the account. This value is calculated after any holding within the account is updated by the user.

Get manual accounts

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/manual_accounts"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/manual_accounts/1042111"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/manual_accounts"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/1010651/manual_accounts"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch all manual accounts across all users

GET https://api.quovo.com/v3/manual_accounts

Fetch a single manual account

GET https://api.quovo.com/v3/manual_accounts/{account_id}

Fetch the manual accounts for a specific user

GET https://api.quovo.com/v3/users/{user_id}/manual_accounts

Fetch the manual accounts for a specific connection

GET https://api.quovo.com/v3/connections/{connection_id}/manual_accounts

Create a manual account

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" \
    -d '{"name" : "Real Estate"}' \
    "https://api.quovo.com/v3/users/162703/manual_accounts"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created
{
    "manual_account": {
        "connection_id": 1010651,
        "id": 1042111,
        "institution_id": 21639,
        "institution_name": "Manually Entered Holdings",
        "is_disabled": false,
        "name": "Real Estate",
        "updated": "2016-07-17T12:12:31Z",
        "user_id": 162703,
        "username": "quovo_test_user",
        "value": 812500
    }
}

Create a manual account

POST https://api.quovo.com/v3/users/{user_id}/manual_accounts

Request Parameters

Name Type Description
name* string The name of the manual account. This will typically describe the holdings to be entered within the account, e.g., “Real Estate” or “My Boats”.

Update a manual account

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" \
    -d '{"name" : "Real Estate II"}' \
    "https://api.quovo.com/v3/manual_accounts/1042111"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Update an existing manual account

PUT https://api.quovo.com/v3/manual_accounts/{account_id}

Delete a manual account

curl -X DELETE -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/manual_accounts/1042111"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Status: 204 No Content

Delete an existing manual account

DELETE https://api.quovo.com/v3/manual_accounts/{account_id}

/manual_holdings

A manual holding is an end user-created holding, used to account for any untrackable holdings. They are strictly contained within manual accounts. Unlike typical Quovo holdings, which are automatically created and updated anytime an connection syncs, manual holdings are managed directly by the end user.

Response Fields

{
    "manual_holdings": [
        {
            "account_id": 1042111,
            "connection_id": 1010651,
            "currency": null,
            "id": 99102189,
            "price": 812500,
            "quantity": 1,
            "symbol": "UN:00070EF7",
            "symbol_name": "Quovo Condo (1042111)",
            "user_id": 162703,
            "value": 812500
        }
    ]
}
Name Type Description
account_id integer The Quovo manual account to which the holding belongs.
connection_id integer The Quovo connection to which the associated holding belongs.
currency string The currency of the price and value of the manual holding in ISO 4217 format.
id integer A unique Quovo identifier for the manual holding. Note: The ID may change after the holding is updated, so do not use IDs to track holdings.
price decimal The price per unit of the holding.
quantity decimal The number of units of the holding.
symbol string The Quovo-generated symbol for the holding. All manual holding symbols will have a prefix of UN:, like other unidentified holdings.
symbol_name string The name of the manual holding as entered by the end user.
user_id integer The Quovo user to whom the account and connection belong.
value decimal The total value of the holding.

Get manual holdings

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/manual_holdings"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/manual_holdings"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/1010651/manual_holdings"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/manual_accounts/1042111/manual_holdings"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch manual holdings across all users and connections

GET https://api.quovo.com/v3/manual_holdings

Fetch manual holdings for a specific user

GET https://api.quovo.com/v3/users/{user_id}/manual_holdings

Fetch manual holdings for a specific connection

GET https://api.quovo.com/v3/connections/{connection_id}/manual_holdings

Fetch manual holdings for a specific manual account

GET https://api.quovo.com/v3/manual_accounts/{manual_account_id}/manual_holdings

Create a manual holding

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" \
    -d '{"name": "Quovo Condo", "value": 812500, "quantity": 1, "price": 812500}' \
    "https://api.quovo.com/v3/manual_accounts/1042111/manual_holdings"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created
{
    "manual_holding": {
        "account_id": 1042111,
        "connection_id": 1010651,
        "currency": null,
        "id": 99102189,
        "price": 812500,
        "quantity": 1,
        "symbol": "UN:00070EF7",
        "symbol_name": "Quovo Condo (1042111)",
        "user_id": 162703,
        "value": 812500
    }
}

Create a new manual holding

POST https://api.quovo.com/v3/manual_accounts/{manual_account_id}/manual_holdings

Request Parameters

Name Type Description
name* string The name of the manual holding. This should describe what the holding represents, e.g. “My Condo” or “Boat 4”.
value* decimal The total value of the manual holding.
currency string The currency of the price and value of the holding in ISO 4217 format
price decimal The price per unit of the holding.
quantity decimal The number of units of the holding.

Update a manual holding

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" \
    -d '{"symbol": "UN:00070EF7", "value": 825500, "quantity": 1}' \
    "https://api.quovo.com/v3/manual_accounts/1042111/manual_holdings"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Update an existing manual holding

PUT https://api.quovo.com/v3/manual_accounts/{manual_account_id}/manual_holdings

Request Parameters

Name Type Description
symbol* string The holding to update. This should be the Quovo-generated symbol for the target holding.
currency string The currency of the price and value of the holding in ISO 4217 format
price decimal The updated price per unit of the holding.
quantity decimal The updated number of units of the holding.
value decimal The updated total value of the holding. Note: If value is given, an associated price or quantity must also be given.

Delete a manual holding

curl -X DELETE -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" \
    -d '{"symbol" : "UN:00070EF7"}' \
    "https://api.quovo.com/v3/manual_accounts/1042111/manual_holdings"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 204 No Content

Delete an existing manual holding

DELETE https://api.quovo.com/v3/manual_accounts/{manual_account_id}/manual_holdings

Request Parameters

Name Type Description
symbol* string The holding to delete. This should be the Quovo-generated symbol for the target holding.

/me

“Me” represents the API user, i.e. the user making the current request.

To authenticate to the /v3/me endpoint, pass your API user credentials using Client-side Basic Auth.

Response Fields

{
    "me": {
        "email": "test_user@example.com",
        "endpoints": [
            "accounts",
            "challenges",
            "connections",
            "holdings",
            "institution_requests",
            "institutions",
            "me",
            "sync",
            "terms_of_use",
            "tokens",
            "transactions",
            "ui_token",
            "users",
            "webhooks"
        ]
    }
}
Name Type Description
email string The email registered with your API user.
endpoints array An array of available API endpoints.

Get your API user info

curl -X GET --user "fake_username:fake_password" "https://api.quovo.com/v3/me"
Authorization: Basic ZmFrZV91c2VybmFtZTpmYWtlX3Bhc3N3b3Jk
Status: 200 OK
Content-Type: application/json

Fetch information about your Quovo API user

GET https://api.quovo.com/v3/me

Update your password

curl -X PUT --user "fake_username:fake_password" -H "Content-Type: application/json" -d '{"password": "new_password"}' "https://api.quovo.com/v3/me"
Authorization: Basic ZmFrZV91c2VybmFtZTpmYWtlX3Bhc3N3b3Jk
Content-Type: application/json
Status: 204 No Content

Update your API password

PUT https://api.quovo.com/v3/me

All future requests to /v3/tokens must use the new password to properly authenticate, although changing your password will not affect current, live access tokens.

New API passwords have several requirements:

Request Parameters

Name Type Description
password* string Your new API Password.

/microdeposit_accounts

star Premium

There may be scenarios where Quovo cannot automatically verify a bank account using Auth Deposits, e.g. the end user does not want to link their bank accounts or Quovo does not currently support the account’s institution. For these use cases, you can use the /microdeposit_accounts endpoint to begin a more manual verification process, similar to a “standard” microdeposits workflow. Using this endpoint, you can create accounts specifically for the microdeposits process.

Response Fields

{
    "microdeposit_accounts": [
        {
            "connection_id": 3773372,
            "id": 5982662,
            "institution_id": 22134,
            "institution_name": "Manual Auth Deposits",
            "name": "Microdeposit Bank Account",
            "updated": "2017-10-17T13:29:47Z",
            "user_id": 162703,
            "username": "quovo_test_user"
        },
        {
            "connection_id": 3773377,
            "id": 5982669,
            "institution_id": 22134,
            "institution_name": "Manual Auth Deposits",
            "name": "Microdeposit Bank Account",
            "updated": "2017-10-17T13:30:48Z",
            "user_id": 162703,
            "username": "quovo_test_user"
        },
        {
            "connection_id": 3773443,
            "id": 5982800,
            "institution_id": 22134,
            "institution_name": "Manual Auth Deposits",
            "name": "Microdeposit Bank Account",
            "updated": "2017-10-17T13:44:12Z",
            "user_id": 162703,
            "username": "quovo_test_user"
        }
    ]
}
Name Type Description
connection_id integer The Quovo connection to which the microdeposit account belongs.
id integer The unique Quovo identifier for the account.
institution_id integer The Quovo institution with which the account is associated. All microdeposit accounts will be on institution 22134.
institution_name string The name of the associated financial institution. All microdeposit accounts will be on the institution “Manual Auth Deposits”.
name string An account name as entered by the end user. The name will default to “Microdeposit Bank Account” if no name was given when creating the account.
updated string A timestamp (UTC) of the last time the microdeposit account was updated. This will usually be set to the account’s creation date.
user_id integer The Quovo user to whom the account belongs.
username string The username of the associated Quovo user.

Get microdeposit accounts

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/microdeposit_accounts"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/microdeposit_accounts/5982662"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/users/162703/microdeposit_accounts"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch microdeposit accounts across all users

GET https://api.quovo.com/v3/microdeposit_accounts

Fetch a single microdeposit account

GET https://api.quovo.com/v3/microdeposit_accounts/{account_id}

Fetch a user’s microdeposit accounts

GET https://api.quovo.com/v3/users/{user_id}/microdeposit_accounts

Create a microdeposit account

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/users/162703/microdeposit_accounts"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 201 Created
{
    "microdeposit_account": {
        "connection_id": 3773372,
        "institution_id": 22134,
        "institution_name": "Manual Auth Deposits",
        "id": 5982662,
        "last_change": "2017-10-17T13:29:47Z",
        "name": "Microdeposit Bank Account",
        "user_id": 162703,
        "username": "quovo_test_user"
    }
}

Create a microdeposit account

POST https://api.quovo.com/v3/users/{user_id}/microdeposit_accounts

Request Parameters

Name Type Description
account_name string (optional) The name of the microdeposit account. This will typically describe the user’s target bank account. If not given, the account’s name will default to “Microdeposit Bank Account”.

Delete a microdeposit account

curl -X DELETE -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" \
    "https://api.quovo.com/v3/microdeposit_accounts/5982662"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Status: 204 No Content

Delete an existing microdeposit account

DELETE https://api.quovo.com/v3/microdeposit_accounts/{account_id}

/sync

A sync represents an ongoing attempt to update a Quovo connection and retrieve new account data from an institution.

Quovo connections are refreshed nightly automatically, so there is no need to manually sync a connection after the initial sync.

Response Fields

{
    "sync": {
        "connection_id": 878793,
        "progress": {
            "message": "authenticating",
            "percent": 0.10,
            "state": "authenticating"
        },
        "status": "syncing"
    }
}
Name Type Description
connection_id integer The connection that is being synced.
config_instructions string (Only available if the final sync status is user_config) Institution-specific instructions for the end user, which need to be completed before the connection can successfully sync. The end user will usually need to perform some action on their institution’s website, such as enabling an option in their user settings.
progress object A nested object indicating current sync status. See the table below for the object fields and their descriptions.
status string The sync status of the connection. This field will simply be “syncing” while a sync is in progress. After the sync ends, this field will indicate whether the connection was synced successfully (“good”), if the connection has MFA challenges to answer, and more. See here for a full list of connection sync statuses.

progress Object

Name Type Description
message string A user-friendly message that indicates the current syncing progress.
percent decimal The percentage (from 0.00 to 1.00) of sync completion.
state string A more machine-friendly string that also indicates the current syncing progress. For a list of all possible sync states click here.

challenges Object

Name Type Description
choices array (Only available if the challenge type is “choices”) A list of possible MFA answers; used for MFA with a multiple-choice portion. See below for the fields in the choices objects.
id integer The unique Quovo identifier for this challenge.
expires string A timestamp for when the challenge question will expire and can no longer be answered by the user. Once the challenge has expired you will need to re-sync the connection to retrieve a new challenge.
image object (Only available if the challenge type is “image”) An object that contains a data URI or image URL that should be displayed to the end user; used for MFA that displays an image alongside its MFA question. See below for the fields in the image object.
image_choices array (Only available if the challenge type is “image_choices”) A combination of “choices” and “image”. This field contains a list of image objects that should be displayed to the end user. See below for the fields in the image objects.
question string The full text of the MFA question.
should_answer boolean If should_answer is true, this MFA challenge is either unanswered or was answered incorrectly. This challenge should be displayed to the end user so that they can update it with the appropriate answer. Note: Multiple challenges may have should_answer set to true, which means multiple MFA challenges need to be answered before continuing.
type string Indicates the type of MFA challenge, which will necessitate different workflows. These different MFA types are explained in more depth here.

Get Sync progress

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/878793/sync"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Check the ongoing sync progress of a connection

GET https://api.quovo.com/v3/connections/{connection_id}/sync

Initiate a Sync

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"username": "testusername", "passcode": "testpasscode"}' "https://api.quovo.com/v3/connections/878793/sync"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created

Initiate a new connection sync

POST https://api.quovo.com/v3/connections/{connection_id}/sync

Request Parameters

Name Type Description
answers string The answers to any MFA challenges. This parameter must be an array of objects each containing a challenge_id and answer field, where challenge_id is the targeted challenge’s id.
passcode string The end user’s login passcode; generally the same one they use to login directly on their institution’s website.
type string The type of sync you would like to trigger. Possible values are agg or auth. If you do not specify a type it will default to agg.
username string The end user’s login username; generally the same one they use to login directly on their institution’s website.

Update a connection’s credentials

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"username": "testusername", "passcode": "testpasscode"}' "https://api.quovo.com/v3/connections/878793/sync"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created

Update credentials and initiate a new connection sync

POST https://api.quovo.com/v3/connections/{connection_id}/sync

Request Parameters

Name Type Description
passcode* string The end user’s login passcode; generally the same one they use to login directly on their institution’s website.
type string The type of sync you would like to trigger. Possible values are agg or auth. If you do not specify a type it will default to agg.
username* string The end user’s login username; generally the same one they use to login directly on their institution’s website.

Answer a connection’s challenges

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"answers": [{"challenge_id": 60677, "answer": "New York City"}]}' "https://api.quovo.com/v3/connections/878793/sync"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created

Answer challenges and initiate a new connection sync

POST https://api.quovo.com/v3/connections/{connection_id}/sync

Request Parameters

Name Type Description
answers* string The answers to any MFA challenges. This parameter must be an array of objects each containing a challenge_id and answer field, where challenge_id is the targeted challenge’s id.
type string The type of sync you would like to trigger. Possible values are agg or auth. If you do not specify a type it will default to agg.

/terms_of_use

Terms of Use (“TOU”) is the agreement to use Quovo’s system according to our defined usage rules. These endpoints allow you to expose Quovo’s TOU to your end users, and, if necessary, log an acceptance of the TOU.

Response Fields

{
    "terms_of_use": {
        "has_accepted": false,
        "user_id": 162703
    }
}
Name Type Description
has_accepted boolean true if a user has accepted the TOU.
user_id integer The Quovo user associated with this TOU agreement

Check TOU Acceptance

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" "https://api.quovo.com/v3/users/162703/terms_of_use"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Check whether or not a user has accepted Quovo’s terms of use

GET https://api.quovo.com/v3/users/{user_id}/terms_of_use

Update TOU Acceptance

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"has_accepted": true}' "https://api.quovo.com/v3/users/162703/terms_of_use"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Update whether or not a user has accepted Quovo’s terms of use

PUT https://api.quovo.com/v3/users/{user_id}/terms_of_use

Request Parameters

Name Type Description
has_accepted* boolean If the user has accepted the TOU, pass true.

/tokens

Access tokens provide access to all other endpoints within the API. These tokens allow API users to authenticate and identify themselves without repeatedly passing their API credentials back and forth for every API call.

To authenticate to the /v3/tokens endpoint, pass your API user credentials using Client-side Basic Auth.

Response Fields

{
    "access_tokens": [
        {
            "created": "2016-03-30T03:00:00Z",
            "expires": "2016-03-30T04:00:00Z",
            "name": "test_token"
        },
        {
            "created": "2016-03-29T19:20:03Z",
            "expires": "2016-03-29T20:20:03Z",
            "name": "main_token"
        }
    ]
}
Name Type Description
created string A timestamp (UTC) that indicates when the access token was created.
expires string A timestamp (UTC) that indicates when the access token will expire. By default, access tokens expire after one hour.
name string The name of the access token (chosen by you when the token is created).

Get access tokens

curl -X GET --user "my_api_username:my_api_password" "https://api.quovo.com/v3/tokens"
Authorization: Basic ZmFrZXVzZXJuYW1lOmZha2VwYXNzd29yZA==
Content-Type: application/json
Status: 200 OK

Retrieve all of your access tokens

GET https://api.quovo.com/v3/tokens

Create an access token

curl -X POST --user "my_api_username:my_api_password" -H "Content-Type: application/json" -d '{"name": "main_token"}' "https://api.quovo.com/v3/tokens"
Authorization: Basic ZmFrZXVzZXJuYW1lOmZha2VwYXNzd29yZA==
Content-Type: application/json
Content-Type: application/json
Status: 201 Created

Create an access token

POST https://api.quovo.com/v3/tokens

Request Parameters

Name Type Description
name* string The unique name of the access token you are creating. This can be any string you choose, as long as it does not duplicate the names of your other existing active access tokens.
expires string The datetime string (UTC in ISO 8601 format) that indicates when the token will expire.

Update an access token

curl -X PUT --user "my_api_username:my_api_password" -H "Content-Type: application/json" -d '{"name": "main_token", "new_name": "test_token"}' "https://api.quovo.com/v3/tokens"
Authorization: Basic ZmFrZXVzZXJuYW1lOmZha2VwYXNzd29yZA==
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Update the name of an existing access token

PUT https://api.quovo.com/v3/tokens

Request Parameters

Name Type Description
name* string The name of the access token you want to update.
new_name* string The new, unique name for the selected access token. This can be any string you choose, as long as it does not duplicate the names of your other existing active access tokens.

Delete an Access Token

curl -X DELETE --user "my_api_username:my_api_password" -H "Content-Type: application/json" -d '{"name": "main_token"}' "https://api.quovo.com/v3/tokens"
Authorization: Basic ZmFrZXVzZXJuYW1lOmZha2VwYXNzd29yZA==
Content-Type: application/json
Status: 204 No Content

Delete an existing access token

DELETE https://api.quovo.com/v3/tokens

Request Parameters

Name Type Description
name* string The name of the access token you want to delete.

/transactions

Response Fields

{
    "transactions": [
        {
            "account_id": 746745,
            "cashflow_category": null,
            "cashflow_subcategory": null,
            "connection_id": 877247,
            "currency": null,
            "date": "2015-05-01",
            "fees": 0.0,
            "forex_rate": 1.0,
            "id": 199436905,
            "is_cancel": false,
            "is_pending": false,
            "memo": "Bought MSFT",
            "price": 40.0,
            "quantity": 9.0,
            "subtype": "BUYL",
            "symbol": "MSFT",
            "symbol_name": "Microsoft Corporation",
            "type": "B",
            "user_id": 162703,
            "value": -360.0
        },
        {
            "account_id": 746745,
            "cashflow_category": null,
            "cashflow_subcategory": null,
            "connection_id": 877247,
            "currency": null,
            "date": "2015-05-05",
            "fees": 0.0,
            "forex_rate": 1.0,
            "id": 199436906,
            "is_cancel": false,
            "is_pending": false,
            "memo": "Bought AAPL",
            "price": 600.96,
            "quantity": 11.0,
            "subtype": "BUYL",
            "symbol": "AAPL",
            "symbol_name": "Apple Inc",
            "type": "B",
            "user_id": 162703,
            "value": -6610.56
        }
    ]
}
Name Type Description
account_id integer The Quovo account to which the transaction belongs.
cashflow_category string The cashflow category of the transaction, such as “Entertainment” or “Rent”. This field generally only applies to cash transactions in bank and credit/debit card accounts. See here for full a list of cashflow categories.
cashflow_subcategory string A more granular description of cash transactions than cashflow_category. For example, a cashflow_category of “Food and Beverages” can have an associated cashflow_subcategory of “Restaurants” or “Bars.” Every cashflow subcategory will only ever belong to a single category. See here for a full list of cashflow subcategories.
connection_id integer The Quovo connection to which the transaction belongs.
currency string An ISO 4217 code for holdings that are held in a foreign currency at the institution. currency will be null for any security priced in USD. Note that Quovo represents all monetary values in their local currency.
date string The date of the transaction. For investment transactions, this value is generally the trade date (not the settlement date).
fees decimal The combined value of all fees (commission, bookkeeping, etc.) applied to the transaction.
forex_rate decimal The foreign exchange rate used to translate any foreign currency into USD. This rate will be 1.00 for any transaction priced in USD. To convert prices and values from their local currency to USD, multiply price and value by the forex_rate (e.g., price * forex_rate == price_in_usd).
id bigint The unique Quovo identifier for the transaction.
is_cancel boolean A flag that indicates if the transaction is a Cancel Transaction or not. Cancel Transactions occur when existing transactions are substantially updated or completely removed by the institution.
is_pending boolean A flag that indicates if the transaction is pending or not. Pending transactions are typically cash transactions that have not yet settled in a bank or credit card account.
memo string A descriptive, long-form text of the transaction, taken from the institution.
price decimal The price per unit of this transaction, as reported by the financial institution. This will be 0 for transactions such as cash deposits or withdrawals.
quantity decimal The number of units transferred, bought, or sold in this transaction, as reported by the financial institution. This will be 0 for transactions such as cash deposits or withdrawals.
subtype string A much more specific and fine-grained identifier of the transaction type. See here for a full list of transaction subtypes.
symbol string The public symbol for the relevant security in the holding. Quovo defaults to a “ticker symbol” but uses several fallback identifiers when a ticker is unavailable nor inapplicable: if a CUSIP is specified, it will be used instead; if the security is unique to a specific institution, the symbol will have a prefix of FI: to identify it as such (e.g., “FI:SVF-N”); if we are unable to identify the relevant security, the symbol will have a prefix of UN: (e.g., “UN:0000E3C9”). Any cash holding will use a symbol of CUR:USD.
symbol_name string The name of the associated security.
type string A broad type that helps identify the transaction subtype. See here for additional information on transaction types.
user_id integer The Quovo user to which the connection and account belong.
value decimal The total value of the transaction. For example, for a “buy” transaction of an investment, this value will generally be equal to quantity * price; for cash deposits, this value will be equal to the total value deposited.

Get transactions

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/transactions/199436905"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703/transactions"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/connections/877247/transactions"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/accounts/746745/transactions"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch a specific transaction

GET https://api.quovo.com/v3/transactions/{transaction_id}

Fetch transactions for a specific user

GET https://api.quovo.com/v3/users/{user_id}/transactions

Fetch transactions for a specific connection

GET https://api.quovo.com/v3/connections/{connection_id}/transactions

Fetch transactions for a specific account

GET https://api.quovo.com/v3/accounts/{account_id}/transactions

Request Parameters

Name Type Description
cursor integer This parameter is used for paginated results as a pointer to the next set of transactions. Review the Pagination section in the Introduction to learn more about paginated results.
count integer The max number of transactions you would like to return for this request.
start_date string All transactions returned will have a date greater than or equal to the given start_date.
end_date string All transactions returned will have a date less than or equal to the given end_date.
start_id integer All transactions returned will have an id greater than or equal to the given start_id.
end_id integer All transactions returned will have an id less than or equal to the given end_id.

Update a transaction

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"cashflow_category": "Entertainment", "ignore_matching": true}' "https://api.quovo.com/v3/transactions/20223796"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Update an existing historical transaction

PUT https://api.quovo.com/v3/transactions/{transaction_id}

Request Parameters

Name Type Description
cashflow_category string The updated cashflow category for the transaction. Only categories found within our total list of cashflow categories can be used.
cashflow_subcategory string The updated cashflow subcategory for the transaction. Only Quovo subcategories can be used.
ignore_matching boolean By default, updated cashflow categories and subcategories are applied to all transactions for that user with matching memos. If ignore_matching is true, we will instead only apply the updated category or subcategory to the selected transaction. This parameter is optional and will default to false.

/ui_token

Quovo has a suite of widgets, modules, and dashboards that were built to streamline specific Quovo workflows, including adding and syncing connections, viewing heldaway accounts, or leveraging Quovo’s insights to learn more about your user’s financial data. You can easily embed these products into any of your web or mobile applications.

Response Fields

{
    "ui_token": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvbmVfdGltZV91c2UiOnRydWUsImlwX3Jlc3RyaWN0ZWQiOmZhbHNlLCJzdWIiOiIxNjI3MDMiLCJleHAiOjE0ODQ5NTIyNTIsImlwIjoiMTI3LjAuMC4xIiwiaWF0IjoxNDg0OTQ4NjUyLCJ0eXBlIjoiaWZyYW1lIiwiaWQiOiJiM2U4OGNjOTE3NjIzMjIxMTRlNTZiNWQ0M2ZjOTU3ZmIwMjgyNzdkIiwidXNlciI6MTYyNzAzfQ.1maK8nlT0DWBw28SVVBEmofNtwQbc0FjrhFcM5_w_EU",
        "user_id": 162703
    }
}
Name Type Description
token string The single-use access token used to authenticate an end user within Connect.
user_id integer The Quovo user to whom the UI token belongs.

Creating a UI token

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" "https://api.quovo.com/v3/users/162703/ui_token"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created

Create a single-use UI token for a user

POST https://api.quovo.com/v3/users/{user_id}/ui_token

/users

Users are the owners of connections within Quovo. In most cases, they will reflect any end users within your internal system.

Response Fields

{
    "users": [
        {
            "email": "testuser@quovo.com",
            "id": 162703,
            "name": "Quovo Testuser",
            "username": "quovo_test_user",
            "value": 173471.15110
        },
        {
            "email": "another.testuser@quovo.com",
            "id": 162713,
            "name": "Quovo Testuser II",
            "username": "quovo_test_user_2",
            "value": 2944.11
        }
    ]
}
Name Type Description
email string The user’s email address.
id integer The unique Quovo identifier for this user.
name string The full name of the user.
username string The user’s Quovo username. Note: This is not a username used to log into a connection.
value decimal The total value of all accounts that belong to this user. Note: If the user does not own any connections and accounts, this may be null.

Get Users

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users"
curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/162703"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch all of your users

GET https://api.quovo.com/v3/users

Fetch a single user by id

GET https://api.quovo.com/v3/users/{user_id}

Fetch a single user by username

GET https://api.quovo.com/v3/users/?username={username}

Create a User

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"username": "quovo_myfirstuser", "name": "Test User 1", "email": "fakeemail@quovo.com"}' "https://api.quovo.com/v3/users"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created
{
    "user": {
        "email": "testuser@quovo.com",
        "id": 162703,
        "name": "Quovo Testuser",
        "username": "quovo_test_user",
        "value": 173471.15110
    }
}

Create a Quovo user

POST https://api.quovo.com/v3/users

Request Parameters

Name Type Description
username* string The user’s Quovo username. This is separate from the usernames used to log into connections. We suggest that you have a clear mapping from your internal username to the connected Quovo username.
email string The user’s email address.
name string The name of the user. ‘Firstname Lastname’ is common, but any descriptive identifier will do.

Modify an existing User

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"name": "An Actual Name", "email": "notafakeemail@quovo.com"}' "https://api.quovo.com/v3/users/165703"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Modify an existing user

PUT https://api.quovo.com/v3/users/{user_id}

Request Parameters

Name Type Description
email string The user’s email address.
name string The name of the user; ‘Firstname Lastname’ is common.

Delete a User

curl -X DELETE -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/users/523479"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Status: 204 No Content

Delete a Quovo User

DELETE https://api.quovo.com/v3/users/{user_id}

/webhooks

Webhooks are custom HTTP callbacks. They allow you to subscribe to specific “events” and receive a related JSON payload at a specified URL every time that event occurs. For example, you can subscribe to connection events and get notified every time a user adds a new connection.

The available events and actions for webhooks are:

Event Action Description
connection created Receive a payload anytime a connection is created.
connection deleted Receive a payload anytime a connection is deleted.
sync started Triggers when a connection sync starts. Note: this only applies to syncs that are initiated from the API or connect.
sync progressed Triggers when a sync progresses to the next step, e.g. moves from “authenticating” to “fetching accounts”. Note: this only applies to syncs that are initiated from the API or connect.
sync completed Triggers when a sync completes. Note: this only applies to syncs that are initiated from the API or connect.
accounts updated Receive a payload when a connection’s accounts are updated. This event fires before a sync completely finishes, sending updated account balances without waiting for holdings and transactions to fully load. Note: this only applies to syncs that are initiated from the API or connect.
institution_request created Receive a payload anytime a user submits a request for a new financial institution.

Response Fields

{
    "webhooks": [
        {
            "events": [
                "*"
            ],
            "is_active": true,
            "name": "main_webhook",
            "url": "https://quovo.com/webhooks",
            "version": "3.0"
        }
    ]
}
Name Type Description
events array A list of subscribed events. This may also just contain ["*"], which indicates the webhook is subscribed to all events.
is_active boolean Whether the webhook is enabled or not.
name string A unique name for the webhook.
url string The URL the webhook will POST data to. The given endpoint must follow HTTPS protocol.
version string The Quovo API version the webhook is associated with. Webhooks with a version of “3.0” will receive payloads in the API v3 format, while webhooks with a version of “2.0” will receive the v2 format.

Webhook Events

Event Action Description
connection created Receive a payload anytime a connection is created.
connection deleted Receive a payload anytime a connection is deleted.
sync started Triggers when a connection sync starts. Note: this only applies to syncs that are initiated from the API or a Quovo widget.
sync progressed Triggers when a sync progresses to the next step, e.g. moves from “authenticating” to “fetching accounts”. Note: this only applies to syncs that are initiated from the API or a Quovo widget.
sync completed Triggers when a sync completes. Note: this only applies to syncs that are initiated from the API or a Quovo widget.
accounts updated Receive a payload anytime a connection’s accounts are updated. This event fires before a sync completely finishes, sending updated account balances without needing to wait for holdings and transactions to fully load. Note: this only applies to syncs that are initiated from the API or a Quovo widget.
institution_request created Receive a payload anytime a user submits a request for a new financial institution.

Get all Webhooks

curl -X GET -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" "https://api.quovo.com/v3/webhooks"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 200 OK

Fetch your registered webhooks

GET https://api.quovo.com/v3/webhooks

Register a New Webhook​

curl -X POST -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"name": "main_webhook", "url": "https://quovo.com/webhooks", "secret": "mysupersecretsecret"}' "https://api.quovo.com/v3/webhooks"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 201 Created

Register new webhooks

POST https://api.quovo.com/v3/webhooks

Request Parameters

Name Type Description
events array A list of events you want to subscribe to. Defaults to ["*"], which means the webhook is subscribed to all events.
is_active boolean Whether the webhook is enabled or not. Pass false if you do not want the webhook to immediately start watching for events.
name* string A unique name for the webhook. Note: This is used to identify webhooks, so it cannot be modified after the webhook is created.
secret* string The string used to calculate the signature on each webhook delivery. This signature verifies incoming payloads are actually coming from Quovo, and not a third party.
url* string The URL the webhook should POST data to. The given endpoint must follow HTTPS protocol.
version string The Quovo API version the webhook is associated with. Webhooks with a version of “3.0” will receive payloads in the API v3 format, while webhooks with a version of “2.0” will receive the v2 format.

Modify a Webhook

curl -X PUT -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"name": "main_webhook", "secret": "mynewsecret"}' "https://api.quovo.com/v3/webhooks"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Content-Type: application/json
Status: 200 OK

Update an existing webhook

PUT https://api.quovo.com/v3/webhooks

Request Parameters

Name Type Description
events array A list of events you want to subscribe to. Defaults to ["*"], which means the webhook is subscribed to all events.
is_active boolean Whether the webhook is enabled or not. Pass false if you do not want the webhook to be watching for events.
secret string The string used to calculate the signature on each webhook delivery. This signature verifies incoming payloads are actually coming from Quovo, and not a third party.
name* string The name of the webhook you would like to update.
url string The URL the webhook should POST data to. The given endpoint must follow HTTPS protocol.
version string The Quovo API version the webhook is associated with. Webhooks with a version of “3.0” will receive payloads in the API v3 format, while webhooks with a version of “2.0” will receive the v2 format.

Delete a Webhook

curl -X DELETE -H "Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e" -H "Content-Type: application/json" -d '{"name": "main_webhook"}' "https://api.quovo.com/v3/webhooks"
Authorization: Bearer a724809d37d0a21b7e9257f45cee416f5aec61993ab4b09e
Content-Type: application/json
Status: 204 No Content

Delete an existing webhook

DELETE https://api.quovo.com/v3/webhooks

Request Parameters

Name Type Description
name* string The name of the webhook you would like to delete.