# Retrieve recurring expenses for a link Retrieve recurring expense insights for checking and savings accounts from a specific link. You can receive insights for a period of up to 365 days, depending on the transaction history available for each institution. Endpoint: POST /api/recurring-expenses/ Version: 1.222.0 Security: basicAuth ## Query parameters: - `omit` (string) Omit certain fields from being returned in the response. For more information, see our Filtering responses DevPortal article. - `fields` (string) Return only the specified fields in the response. For more information, see our Filtering responses DevPortal article. ## Request fields (application/json): - `link` (string, required) The you want to retrieve information for. Example: "c81a1dea-6dd6-4999-8b9f-541ee8197058" - `token` (string) The MFA token generated by the institution which is required to continue a session. Example: "1234ab" - `save_data` (boolean) Indicates whether or not to persist the data in Belvo. By default, this is set to and we return a 201 Created response. When set to , the data won't be persisted and we return a 200 OK response. Example: true - `date_from` (string) The date from which you want to start getting data for, in format. âš ī¸ The value of cannot be greater than . Example: "2020-08-05" - `date_to` (string) The date you want to stop getting data for, in format. âš ī¸ The value of cannot be greater than today's date (in other words, no future dates). Example: "2020-10-05" ## Response 200 fields (application/json): - `id` (string) Belvo's unique identifier for the current item. Example: "0d3ffb69-f83b-456e-ad8e-208d0998d71d" - `account` (object,null, required) Details regarding the account. : For our recurring expenses resource, this account relates to the account that was analyzed to generate the recurring expenses report. - `account.link` (string,null) The the data belongs to. Example: "30cb4806-6e00-48a4-91c9-ca55968576c8" - `account.institution` (object) Details regarding the institution. - `account.institution.name` (string) The name of the institution, as designated by Belvo. Example: "erebor_mx_retail" - `account.institution.type` (string) The type of institution. We return one of the following values: - - - Enum: "bank", "fiscal", "employment" - `account.collected_at` (string, required) The ISO-8601 timestamp when the data point was collected. Example: "2022-02-09T08:45:50.406032Z" - `account.created_at` (string) The ISO-8601 timestamp of when the data point was created in Belvo's database. Example: "2022-02-09T08:45:50.406032Z" - `account.category` (string,null, required) The type of account. We return one of the following enum values: - - - - - - - - Enum: "CHECKING_ACCOUNT", "CREDIT_CARD", "INVESTMENT_ACCOUNT", "LOAN_ACCOUNT", "PENSION_FUND_ACCOUNT", "SAVINGS_ACCOUNT", "UNCATEGORIZED", null - `account.balance_type` (string,null, required) Indicates whether this account is either an or a . You can consider the balance of an as being positive, while the balance of a as negative. Example: "ASSET" - `account.type` (string,null, required) The account type, as designated by the institution. Example: "Cuentas de efectivo" - `account.name` (string,null, required) The account name, as given by the institution. Example: "Cuenta Perfiles- M.N. - MXN-666" - `account.number` (string,null, required) The account number, as designated by the institution. Example: "4057068115181" - `account.balance` (object, required) Details regarding the current and available balances for the account. - `account.balance.current` (number,null, required) The current balance is calculated differently according to the type of account. - : The user's account balance at the timestamp. - : The amount the user has spent in the current card billing period (see for information on when the current billing period finishes). - : The amount remaining to pay on the users's loan. Example: 5874.13 - `account.balance.available` (number,null) The balance that the account owner can use. - : The available balance may be different to the balance due to pending transactions. - : The credit amount the user still has available for the current period. The balance may be different to the balance due to pending transactions or future instalments. - : The present value required to pay off the loan, as provided by the institution. If the institution does not provide this value, we return . Example: 5621.12 - `account.currency` (string,null, required) The currency of the account. For example: - 🇧🇷 BRL (Brazilian Real) - 🇨🇴 COP (Colombian Peso) - 🇲đŸ‡Ŋ MXN (Mexican Peso) Please note that other currencies other than in the list above may be returned. Example: "MXN" - `account.public_identification_name` (string,null, required) The public name for the type of identification. For example: . â„šī¸ For 🇧🇷 Brazilian savings and checking accounts, this field will be . Example: "CLABE" - `account.public_identification_value` (string,null, required) The value for the . â„šī¸ For 🇧🇷 Brazilian savings and checking accounts, this field will be the agency and bank account number, separated by a slash. For example: . Example: "150194683119900273" - `account.last_accessed_at` (string,null, required) The ISO-8601 timestamp of Belvo's most recent successful access to the institution for the given link. Example: "2021-03-09T10:28:40.000Z" - `account.credit_data` (object,null, required) The credit options associated with this account. - `account.credit_data.credit_limit` (number,null, required) The maximum amount of credit the owner can receive. Example: 192000 - `account.credit_data.cutting_date` (string,null, required) The closing date of the credit period, in format. Example: "2019-12-11" - `account.credit_data.next_payment_date` (string, required) The due date for the next payment , in format. Example: "2019-12-13" - `account.credit_data.minimum_payment` (number,null, required) The minimum amount to be paid on the . Example: 2400.3 - `account.credit_data.no_interest_payment` (number,null, required) The minimum amount required to pay to avoid generating interest. Example: 2690.83 - `account.credit_data.interest_rate` (number,null, required) The annualized interest rate of the credit. Example: 4 - `account.credit_data.monthly_payment` (number,null) - `account.credit_data.last_payment_date` (string,null) - `account.credit_data.last_period_balance` (string,null) - `account.loan_data` (object,null, required) The loan options associated with this account. - `account.loan_data.contract_amount` (number,null) The initial total loan amount, calculated by the institution, when the contract was signed. This amount includes the principal + interest + taxes + fees. Example: 202000 - `account.loan_data.principal` (number,null, required) Total amount of the loan (the amount the user receives). Example: 192000 - `account.loan_data.loan_type` (string,null) The type of the loan, according to the institution. Example: "Consignado" - `account.loan_data.payment_day` (string,null) The day of the month by which the owner needs to pay the loan (). Example: "27" - `account.loan_data.outstanding_principal` (number,null) Outstanding loan amount, that is, how much remains to pay on the principal (not including interest). Example: 142023 - `account.loan_data.outstanding_balance` (number,null, required) The amount remaining to pay in total, including interest. Example: 182000 - `account.loan_data.monthly_payment` (number,null, required) The recurrent monthly payment, if applicable. Example: 1000 - `account.loan_data.interest_rates` (array,null, required) Breakdown of the interest applied to the loan. - `account.loan_data.interest_rates.name` (string,null, required) The name of the type of interest rate applied to the loan. Example: "jurosEfetivo" - `account.loan_data.interest_rates.type` (string,null, required) The period that the interest is applied to the loan. We return one of the following values: - - Enum: "MONTHLY", "YEARLY" - `account.loan_data.interest_rates.value` (number,null, required) The interest rate (in percent or currency value). Example: 7.85 - `account.loan_data.fees` (array,null) Breakdown of the fees applied to the loan. - `account.loan_data.fees.type` (string, required) The type of fee. We return one of the following values: - - - Enum: "OPERATION_FEE", "INSURANCE_FEE", "OTHERS" - `account.loan_data.fees.value` (number, required) The total value of the fee. Same currency of the Loan. Example: 5.6 - `account.loan_data.number_of_installments_total` (integer,null) The total number of installments required to pay the loan. Example: 60 - `account.loan_data.number_of_installments_outstanding` (integer,null) The number of installments left to pay. Example: 48 - `account.loan_data.contract_start_date` (string,null) The date when the loan contract was signed , in format. Example: "2020-03-01" - `account.loan_data.contract_end_date` (string) The date when the loan is expected to be completed, in format. Example: "2027-10-01" - `account.loan_data.contract_number` (string,null) The contract number of the loan, as given by the institution. Example: "890ASLDJF87SD00" - `account.loan_data.credit_limit` (number,null) Please see instead. - `account.loan_data.last_period_balance` (number,null) Please see instead. - `account.loan_data.interest_rate` (number,null) Please see the object instead. - `account.loan_data.limit_day` (string,null) Please see instead. - `account.loan_data.cutting_day` (string,null) The closing day of the month for the loan. - `account.loan_data.cutting_date` (string,null) The closing date of the loan period, in format. - `account.loan_data.last_payment_date` (string,null) The date when the last loan payment was made, in format. - `account.loan_data.next_payment_date` (string,null) Please use instead, in format. - `account.loan_data.no_interest_payment` (number,null) The minimum amount required to pay to avoid generating interest. - `account.funds_data` (array,null) One or more funds that contribute to the the pension account. - `account.funds_data.name` (string,null) The pension fund name. Example: "FIX X" - `account.funds_data.type` (string,null) Type of pension fund. Example: "CNPJ" - `account.funds_data.public_identifications` (array,null) The fund's public IDs. - `account.funds_data.public_identifications.name` (string, required) The type of identification number for the fund. Example: "CNPJ" - `account.funds_data.public_identifications.value` (string,null, required) The fund's identification number. Example: "05.954.445/0221-68" - `account.funds_data.balance` (number,null) The amount in the fund. Example: 88427.94 - `account.funds_data.percentage` (number,null) How much this fund, as a percentage, contributes to the pension account's total. Example: 100 - `account.bank_product_id` (string,null) - `account.internal_identification` (string,null) - `name` (string,null, required) The name for the recurring expense. â„šī¸ : This information is taken from the description section of a transaction and then normalized to provide you with an easy-to-read name. As such, sometimes the name will reflect the merchant the payment is made to (for example, Netflix.com), while for other recurring expenses, this could be something like "Monthly payment to John". Example: "Netflix" - `transactions` (array, required) An array of minified transaction objects used to evaluate the recurring expense. If no transactions were found, we return an empty array. - `transactions.amount` (number, required) The transaction amount. Example: 2145.45 - `transactions.description` (string,null, required) The description of the transaction provided by the institution. Usually, this is the text that the end user would see in the bank statement. The description can be an empty string. For EYOD Risk Insights, the description is the one that you provided in the initial request. Example: "Netflix.com/march" - `transactions.value_date` (string, required) The date when the transaction occurred, in format. Example: "2019-10-23" - `frequency` (string, required) The frequency at which this recurring expense occurs. â„šī¸ Belvo only identifies frequencies. Enum: "MONTHLY" - `average_transaction_amount` (number, required) The average transaction amount of the recurring expense. Example: 32.9 - `median_transaction_amount` (number, required) The median transaction amount of the recurring expense. Example: 32.9 - `days_since_last_transaction` (integer, required) Number of days since the last recurring expense occurred. Based on the frequency, you can infer how many days until the next charge will occur. Example: 5 - `category` (string, required) The transaction category for the recurring expense. For more information on the available categories, please see our Transaction categorization documentation. - (Netflix, Spotify, Gym Memberships) - (electricity, telephone, internet) - (credit card cash advances, student loan, watercraft lease) - (home, car, and health & life insurance) - (Uber trip, airbnb, parking) - (service fee, donation, court taxes) Enum: "Bills & Utilities", "Credits & Loans", "Insurance", "Online Platforms & Leisure", "Transport & Travel", "Taxes" - `payment_type` (string,null, required) The type of recurring expense. We return one of the following values: - - Enum: "SUBSCRIPTION", "REGULAR" ## Response 201 fields (application/json): - `id` (string) Belvo's unique identifier for the current item. Example: "0d3ffb69-f83b-456e-ad8e-208d0998d71d" - `account` (object,null, required) Details regarding the account. : For our recurring expenses resource, this account relates to the account that was analyzed to generate the recurring expenses report. - `account.link` (string,null) The the data belongs to. Example: "30cb4806-6e00-48a4-91c9-ca55968576c8" - `account.institution` (object) Details regarding the institution. - `account.institution.name` (string) The name of the institution, as designated by Belvo. Example: "erebor_mx_retail" - `account.institution.type` (string) The type of institution. We return one of the following values: - - - Enum: "bank", "fiscal", "employment" - `account.collected_at` (string, required) The ISO-8601 timestamp when the data point was collected. Example: "2022-02-09T08:45:50.406032Z" - `account.created_at` (string) The ISO-8601 timestamp of when the data point was created in Belvo's database. Example: "2022-02-09T08:45:50.406032Z" - `account.category` (string,null, required) The type of account. We return one of the following enum values: - - - - - - - - Enum: "CHECKING_ACCOUNT", "CREDIT_CARD", "INVESTMENT_ACCOUNT", "LOAN_ACCOUNT", "PENSION_FUND_ACCOUNT", "SAVINGS_ACCOUNT", "UNCATEGORIZED", null - `account.balance_type` (string,null, required) Indicates whether this account is either an or a . You can consider the balance of an as being positive, while the balance of a as negative. Example: "ASSET" - `account.type` (string,null, required) The account type, as designated by the institution. Example: "Cuentas de efectivo" - `account.name` (string,null, required) The account name, as given by the institution. Example: "Cuenta Perfiles- M.N. - MXN-666" - `account.number` (string,null, required) The account number, as designated by the institution. Example: "4057068115181" - `account.balance` (object, required) Details regarding the current and available balances for the account. - `account.balance.current` (number,null, required) The current balance is calculated differently according to the type of account. - : The user's account balance at the timestamp. - : The amount the user has spent in the current card billing period (see for information on when the current billing period finishes). - : The amount remaining to pay on the users's loan. Example: 5874.13 - `account.balance.available` (number,null) The balance that the account owner can use. - : The available balance may be different to the balance due to pending transactions. - : The credit amount the user still has available for the current period. The balance may be different to the balance due to pending transactions or future instalments. - : The present value required to pay off the loan, as provided by the institution. If the institution does not provide this value, we return . Example: 5621.12 - `account.currency` (string,null, required) The currency of the account. For example: - 🇧🇷 BRL (Brazilian Real) - 🇨🇴 COP (Colombian Peso) - 🇲đŸ‡Ŋ MXN (Mexican Peso) Please note that other currencies other than in the list above may be returned. Example: "MXN" - `account.public_identification_name` (string,null, required) The public name for the type of identification. For example: . â„šī¸ For 🇧🇷 Brazilian savings and checking accounts, this field will be . Example: "CLABE" - `account.public_identification_value` (string,null, required) The value for the . â„šī¸ For 🇧🇷 Brazilian savings and checking accounts, this field will be the agency and bank account number, separated by a slash. For example: . Example: "150194683119900273" - `account.last_accessed_at` (string,null, required) The ISO-8601 timestamp of Belvo's most recent successful access to the institution for the given link. Example: "2021-03-09T10:28:40.000Z" - `account.credit_data` (object,null, required) The credit options associated with this account. - `account.credit_data.credit_limit` (number,null, required) The maximum amount of credit the owner can receive. Example: 192000 - `account.credit_data.cutting_date` (string,null, required) The closing date of the credit period, in format. Example: "2019-12-11" - `account.credit_data.next_payment_date` (string, required) The due date for the next payment , in format. Example: "2019-12-13" - `account.credit_data.minimum_payment` (number,null, required) The minimum amount to be paid on the . Example: 2400.3 - `account.credit_data.no_interest_payment` (number,null, required) The minimum amount required to pay to avoid generating interest. Example: 2690.83 - `account.credit_data.interest_rate` (number,null, required) The annualized interest rate of the credit. Example: 4 - `account.credit_data.monthly_payment` (number,null) - `account.credit_data.last_payment_date` (string,null) - `account.credit_data.last_period_balance` (string,null) - `account.loan_data` (object,null, required) The loan options associated with this account. - `account.loan_data.contract_amount` (number,null) The initial total loan amount, calculated by the institution, when the contract was signed. This amount includes the principal + interest + taxes + fees. Example: 202000 - `account.loan_data.principal` (number,null, required) Total amount of the loan (the amount the user receives). Example: 192000 - `account.loan_data.loan_type` (string,null) The type of the loan, according to the institution. Example: "Consignado" - `account.loan_data.payment_day` (string,null) The day of the month by which the owner needs to pay the loan (). Example: "27" - `account.loan_data.outstanding_principal` (number,null) Outstanding loan amount, that is, how much remains to pay on the principal (not including interest). Example: 142023 - `account.loan_data.outstanding_balance` (number,null, required) The amount remaining to pay in total, including interest. Example: 182000 - `account.loan_data.monthly_payment` (number,null, required) The recurrent monthly payment, if applicable. Example: 1000 - `account.loan_data.interest_rates` (array,null, required) Breakdown of the interest applied to the loan. - `account.loan_data.interest_rates.name` (string,null, required) The name of the type of interest rate applied to the loan. Example: "jurosEfetivo" - `account.loan_data.interest_rates.type` (string,null, required) The period that the interest is applied to the loan. We return one of the following values: - - Enum: "MONTHLY", "YEARLY" - `account.loan_data.interest_rates.value` (number,null, required) The interest rate (in percent or currency value). Example: 7.85 - `account.loan_data.fees` (array,null) Breakdown of the fees applied to the loan. - `account.loan_data.fees.type` (string, required) The type of fee. We return one of the following values: - - - Enum: "OPERATION_FEE", "INSURANCE_FEE", "OTHERS" - `account.loan_data.fees.value` (number, required) The total value of the fee. Same currency of the Loan. Example: 5.6 - `account.loan_data.number_of_installments_total` (integer,null) The total number of installments required to pay the loan. Example: 60 - `account.loan_data.number_of_installments_outstanding` (integer,null) The number of installments left to pay. Example: 48 - `account.loan_data.contract_start_date` (string,null) The date when the loan contract was signed , in format. Example: "2020-03-01" - `account.loan_data.contract_end_date` (string) The date when the loan is expected to be completed, in format. Example: "2027-10-01" - `account.loan_data.contract_number` (string,null) The contract number of the loan, as given by the institution. Example: "890ASLDJF87SD00" - `account.loan_data.credit_limit` (number,null) Please see instead. - `account.loan_data.last_period_balance` (number,null) Please see instead. - `account.loan_data.interest_rate` (number,null) Please see the object instead. - `account.loan_data.limit_day` (string,null) Please see instead. - `account.loan_data.cutting_day` (string,null) The closing day of the month for the loan. - `account.loan_data.cutting_date` (string,null) The closing date of the loan period, in format. - `account.loan_data.last_payment_date` (string,null) The date when the last loan payment was made, in format. - `account.loan_data.next_payment_date` (string,null) Please use instead, in format. - `account.loan_data.no_interest_payment` (number,null) The minimum amount required to pay to avoid generating interest. - `account.funds_data` (array,null) One or more funds that contribute to the the pension account. - `account.funds_data.name` (string,null) The pension fund name. Example: "FIX X" - `account.funds_data.type` (string,null) Type of pension fund. Example: "CNPJ" - `account.funds_data.public_identifications` (array,null) The fund's public IDs. - `account.funds_data.public_identifications.name` (string, required) The type of identification number for the fund. Example: "CNPJ" - `account.funds_data.public_identifications.value` (string,null, required) The fund's identification number. Example: "05.954.445/0221-68" - `account.funds_data.balance` (number,null) The amount in the fund. Example: 88427.94 - `account.funds_data.percentage` (number,null) How much this fund, as a percentage, contributes to the pension account's total. Example: 100 - `account.bank_product_id` (string,null) - `account.internal_identification` (string,null) - `name` (string,null, required) The name for the recurring expense. â„šī¸ : This information is taken from the description section of a transaction and then normalized to provide you with an easy-to-read name. As such, sometimes the name will reflect the merchant the payment is made to (for example, Netflix.com), while for other recurring expenses, this could be something like "Monthly payment to John". Example: "Netflix" - `transactions` (array, required) An array of minified transaction objects used to evaluate the recurring expense. If no transactions were found, we return an empty array. - `transactions.amount` (number, required) The transaction amount. Example: 2145.45 - `transactions.description` (string,null, required) The description of the transaction provided by the institution. Usually, this is the text that the end user would see in the bank statement. The description can be an empty string. For EYOD Risk Insights, the description is the one that you provided in the initial request. Example: "Netflix.com/march" - `transactions.value_date` (string, required) The date when the transaction occurred, in format. Example: "2019-10-23" - `frequency` (string, required) The frequency at which this recurring expense occurs. â„šī¸ Belvo only identifies frequencies. Enum: "MONTHLY" - `average_transaction_amount` (number, required) The average transaction amount of the recurring expense. Example: 32.9 - `median_transaction_amount` (number, required) The median transaction amount of the recurring expense. Example: 32.9 - `days_since_last_transaction` (integer, required) Number of days since the last recurring expense occurred. Based on the frequency, you can infer how many days until the next charge will occur. Example: 5 - `category` (string, required) The transaction category for the recurring expense. For more information on the available categories, please see our Transaction categorization documentation. - (Netflix, Spotify, Gym Memberships) - (electricity, telephone, internet) - (credit card cash advances, student loan, watercraft lease) - (home, car, and health & life insurance) - (Uber trip, airbnb, parking) - (service fee, donation, court taxes) Enum: "Bills & Utilities", "Credits & Loans", "Insurance", "Online Platforms & Leisure", "Transport & Travel", "Taxes" - `payment_type` (string,null, required) The type of recurring expense. We return one of the following values: - - Enum: "SUBSCRIPTION", "REGULAR" ## Response 403 fields (application/json): - `code` (string) A unique error code () that allows you to classify and handle the error programmatically. â„šī¸ Check our DevPortal for more information on how to handle 403 access_to_resource_denied. Example: "access_to_resource_denied" - `message` (string) A short description of the error. For errors, the description is: - . Example: "You don't have access to this resource." - `request_id` (string) A 32-character unique ID of the request (matching a regex pattern of: ). Provide this ID when contacting the Belvo support team to accelerate investigations. Example: "9e7b283c6efa449c9c028a16b5c249fb" ## Response 404 fields (application/json): - `code` (string) A unique error code () that allows you to classify and handle the error programmatically. Example: "not_found" - `message` (string) A short description of the error. For errors, the description is: - Example: "Not found" - `request_id` (string) A 32-character unique ID of the request (matching a regex pattern of: ). Provide this ID when contacting the Belvo support team to accelerate investigations. Example: "9e7b283c6efa449c9c028a16b5c249fb" ## Response 408 fields (application/json): - `code` (string) A unique error code () that allows you to classify and handle the error programmatically. â„šī¸ Check our DevPortal for more information on how to handle 408 request_timeout errors. Example: "request_timeout" - `message` (string) A short description of the error. For errors, the description is: - . Example: "The request timed out, you can retry asking for less data by changing your query parameters" - `request_id` (string) A 32-character unique ID of the request (matching a regex pattern of: ). Provide this ID when contacting the Belvo support team to accelerate investigations. Example: "9e7b283c6efa449c9c028a16b5c249fb" ## Response 428 fields (application/json): - `code` (string) A unique error code () that allows you to classify and handle the error programmatically. â„šī¸ Check our DevPortal for more information on how to handle 428 token_required errors. Example: "token_required" - `message` (string) A short description of the error. For errors, the description is: - . Example: "A MFA token is required by the institution to login" - `request_id` (string) A 32-character unique ID of the request (matching a regex pattern of: ). Provide this ID when contacting the Belvo support team to accelerate investigations. Example: "9e7b283c6efa449c9c028a16b5c249fb" - `session` (string) A 32-character unique ID of the login session (matching a regex pattern of: ). Example: "2675b703b9d4451f8d4861a3eee54449" - `expiry` (integer) Session duration time in seconds. Example: 9600 - `link` (string) Unique identifier created by Belvo, used to reference the current Link. Example: "30cb4806-6e00-48a4-91c9-ca55968576c8" - `token_generation_data` (object) Details on how to generate the token. - `token_generation_data.instructions` (string) Instructions for token generation. Example: "Use this code to generate the token" - `token_generation_data.type` (string) Type of the data to generate the token (QR code, numeric challenge). Example: "numeric" - `token_generation_data.value` (string) Value to use to generate the token. Example: "12345" - `token_generation_data.expects_user_input` (boolean) Indicates whether the user needs to provide input in order to complete the authentication. When set to , your user may need to: - confirm the login on another device - scan a QR code You will still need to make a PATCH call to complete the request. Example: true ## Response 500 fields (application/json): - `code` (string) A unique error code () that allows you to classify and handle the error programmatically. â„šī¸ Check our DevPortal for more information on how to handle 500 unexpected_error errors. Example: "unexpected_error" - `message` (string) A short description of the error. For errors, the description is: - . Example: "Belvo is unable to process the request due to an internal system issue or to an unsupported response from an institution" - `request_id` (string) A 32-character unique ID of the request (matching a regex pattern of: ). Provide this ID when contacting the Belvo support team to accelerate investigations. Example: "9e7b283c6efa449c9c028a16b5c249fb"