Metadata-Version: 2.4
Name: lunchmoney-python-async
Version: 2.26.0
Summary: Lunch Money API - v2
Home-page: 
Author: OpenAPI Generator community
Author-email: OpenAPI Generator Community <devsupport@lunchmoney.app>
License: Apache 2.0
Project-URL: Repository, https://github.com/juftin/lunchmoney-clients
Keywords: OpenAPI,OpenAPI-Generator,Lunch Money API - v2
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: urllib3<3.0.0,>=2.1.0
Requires-Dist: python-dateutil>=2.8.2
Requires-Dist: aiohttp>=3.8.4
Requires-Dist: aiohttp-retry>=2.8.3
Requires-Dist: pydantic>=2
Requires-Dist: typing-extensions>=4.7.1
Dynamic: author

# lunchmoney-python-async
### Introduction

Welcome to the Lunch Money v2 API reference. This is the **v2.11.0** spec.

The API is available at `https://api.lunchmoney.dev/v2`. Get your access token from the [Lunch Money developers page](https://my.lunchmoney.app/developers).


**Try it from these docs**

These docs are interactive — use **Test request** on any endpoint to call the API from this page.
Choose a LIVE or MOCK service from the Server dropdown.
Requests sent to `https://api.lunchmoney.dev/v2` can <span class=\"red-text\"><strong>change or delete</strong></span> your data and are <span class=\"red-text\"><strong>permanent</strong></span>.
See the [Getting Started Guide](https://lunchmoney.dev/v2/getting-started) before using the live API.

**Static mock server**

Explore without risk to real data. Select `https://mock.lunchmoney.dev/v2` in the Server dropdown to work with static mock data.
POST, PUT, and DELETE requests will return realistic responses, but do not change the mock data.


**Client Libraries & SDKs**

An official TypeScript SDK is available on [NPM](https://www.npmjs.com/package/@lunch-money/v2-api-spec) and [GitHub](https://github.com/lunch-money/lunch-money-js-v2). For Python or other languages, see [lunchmoney-clients](https://github.com/juftin/lunchmoney-clients) or generate a client from [this OpenAPI spec](/v2/openapi).

**Migrating from v1**

The v2 API is not backwards compatible with v1. See the [Migration Guide](https://lunchmoney.dev/v2/migration-guide) for details.

**Useful links**
- [Getting Started Guide](https://lunchmoney.dev/v2/getting-started)
- [v2 API Overview](https://lunchmoney.dev/v2/overview)
- [Version History](https://lunchmoney.dev/v2/version-history)
- [Migration Guide](https://lunchmoney.dev/v2/migration-guide)
- [Rate Limits](https://lunchmoney.dev/v2/rate-limits)

This Python package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:

- API version: 2.11.0
- Package version: 2.26.0
- Generator version: 7.17.0
- Build package: org.openapitools.codegen.languages.PythonClientCodegen

## Requirements.

Python 3.9+

## Installation & Usage
### pip install

If the python package is hosted on a repository, you can install directly using:

```sh
pip install git+https://github.com/juftin/lunchmoney-clients.git
```
(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/juftin/lunchmoney-clients.git`)

Then import the package:
```python
import lunchmoney
```

### Setuptools

Install via [Setuptools](http://pypi.python.org/pypi/setuptools).

```sh
python setup.py install --user
```
(or `sudo python setup.py install` to install the package for all users)

Then import the package:
```python
import lunchmoney
```

### Tests

Execute `pytest` to run the tests.

## Getting Started

Please follow the [installation procedure](#installation--usage) and then run the following:

```python

import lunchmoney
from lunchmoney.rest import ApiException
from pprint import pprint

# Defining the host is optional and defaults to https://api.lunchmoney.dev/v2
# See configuration.py for a list of all supported configuration parameters.
configuration = lunchmoney.Configuration(
    host = "https://api.lunchmoney.dev/v2"
)

# The client must configure the authentication and authorization parameters
# in accordance with the API server security policy.
# Examples for each auth method are provided below, use the example that
# satisfies your auth use case.

# Configure Bearer authorization (JWT): bearerSecurity
configuration = lunchmoney.Configuration(
    access_token = os.environ["BEARER_TOKEN"]
)


# Enter a context with an instance of the API client
async with lunchmoney.ApiClient(configuration) as api_client:
    # Create an instance of the API class
    api_instance = lunchmoney.BalanceHistoryApi(api_client)
    id = 56 # int | Historical balance entry identifier to delete.

    try:
        # Delete a balance history entry
        await api_instance.delete_balance_history_entry(id)
    except ApiException as e:
        print("Exception when calling BalanceHistoryApi->delete_balance_history_entry: %s\n" % e)

```

## Documentation for API Endpoints

All URIs are relative to *https://api.lunchmoney.dev/v2*

Class | Method | HTTP request | Description
------------ | ------------- | ------------- | -------------
*BalanceHistoryApi* | [**delete_balance_history_entry**](docs/BalanceHistoryApi.md#delete_balance_history_entry) | **DELETE** /balance_history/entries/{id} | Delete a balance history entry
*BalanceHistoryApi* | [**delete_balance_history_for_account**](docs/BalanceHistoryApi.md#delete_balance_history_for_account) | **DELETE** /balance_history/{account_type}/{account_id} | Delete all balance history for an account
*BalanceHistoryApi* | [**delete_balance_history_for_crypto_synced**](docs/BalanceHistoryApi.md#delete_balance_history_for_crypto_synced) | **DELETE** /balance_history/crypto_synced/{account_id}/{symbol} | Delete all balance history for a synced crypto symbol
*BalanceHistoryApi* | [**get_balance_history**](docs/BalanceHistoryApi.md#get_balance_history) | **GET** /balance_history | Get balance history
*BalanceHistoryApi* | [**get_balance_history_for_account**](docs/BalanceHistoryApi.md#get_balance_history_for_account) | **GET** /balance_history/{account_type}/{account_id} | Get balance history for an account
*BalanceHistoryApi* | [**get_balance_history_for_crypto_synced**](docs/BalanceHistoryApi.md#get_balance_history_for_crypto_synced) | **GET** /balance_history/crypto_synced/{account_id}/{symbol} | Get balance history for a synced crypto symbol
*BalanceHistoryApi* | [**update_balance_history_details**](docs/BalanceHistoryApi.md#update_balance_history_details) | **PUT** /balance_history/deleted/{account_id}/details | Update details for a deleted account
*BalanceHistoryApi* | [**upsert_balance_history_for_account**](docs/BalanceHistoryApi.md#upsert_balance_history_for_account) | **PUT** /balance_history/{account_type}/{account_id} | Upsert balance history for an account
*BalanceHistoryApi* | [**upsert_balance_history_for_crypto_synced**](docs/BalanceHistoryApi.md#upsert_balance_history_for_crypto_synced) | **PUT** /balance_history/crypto_synced/{account_id}/{symbol} | Upsert balance history for a synced crypto symbol
*BudgetsApi* | [**delete_budget**](docs/BudgetsApi.md#delete_budget) | **DELETE** /budgets | Delete budget
*BudgetsApi* | [**get_budget_settings**](docs/BudgetsApi.md#get_budget_settings) | **GET** /budgets/settings | Get budget period settings
*BudgetsApi* | [**upsert_budget**](docs/BudgetsApi.md#upsert_budget) | **PUT** /budgets | Upsert budget
*CategoriesApi* | [**create_category**](docs/CategoriesApi.md#create_category) | **POST** /categories | Create a new category or category group
*CategoriesApi* | [**delete_category**](docs/CategoriesApi.md#delete_category) | **DELETE** /categories/{id} | Delete a category or category group
*CategoriesApi* | [**get_all_categories**](docs/CategoriesApi.md#get_all_categories) | **GET** /categories | Get all categories
*CategoriesApi* | [**get_category_by_id**](docs/CategoriesApi.md#get_category_by_id) | **GET** /categories/{id} | Get a single category
*CategoriesApi* | [**update_category**](docs/CategoriesApi.md#update_category) | **PUT** /categories/{id} | Update an existing category or category group
*CryptoManualApi* | [**create_crypto_manual**](docs/CryptoManualApi.md#create_crypto_manual) | **POST** /crypto/manual | Create a manual crypto balance
*CryptoManualApi* | [**create_cryptocurrency**](docs/CryptoManualApi.md#create_cryptocurrency) | **POST** /cryptocurrencies | Add a new supported cryptocurrency
*CryptoManualApi* | [**delete_crypto_manual**](docs/CryptoManualApi.md#delete_crypto_manual) | **DELETE** /crypto/manual/{id} | Delete a manual crypto balance
*CryptoManualApi* | [**get_all_crypto_manual**](docs/CryptoManualApi.md#get_all_crypto_manual) | **GET** /crypto/manual | Get all manual crypto balances
*CryptoManualApi* | [**get_all_cryptocurrencies**](docs/CryptoManualApi.md#get_all_cryptocurrencies) | **GET** /cryptocurrencies | Get all supported cryptocurrencies
*CryptoManualApi* | [**get_crypto_manual_by_id**](docs/CryptoManualApi.md#get_crypto_manual_by_id) | **GET** /crypto/manual/{id} | Get a single manual crypto balance
*CryptoManualApi* | [**update_crypto_manual**](docs/CryptoManualApi.md#update_crypto_manual) | **PUT** /crypto/manual/{id} | Update a manual crypto balance
*CryptoSyncedApi* | [**get_all_crypto_synced**](docs/CryptoSyncedApi.md#get_all_crypto_synced) | **GET** /crypto/synced | Get all synced crypto accounts
*CryptoSyncedApi* | [**get_crypto_synced_balance_by_symbol**](docs/CryptoSyncedApi.md#get_crypto_synced_balance_by_symbol) | **GET** /crypto/synced/{id}/{symbol} | Get a synced crypto balance by symbol
*CryptoSyncedApi* | [**get_crypto_synced_by_id**](docs/CryptoSyncedApi.md#get_crypto_synced_by_id) | **GET** /crypto/synced/{id} | Get a single synced crypto account
*CryptoSyncedApi* | [**refresh_crypto_synced**](docs/CryptoSyncedApi.md#refresh_crypto_synced) | **POST** /crypto/synced/{id}/refresh | Refresh balances for a synced crypto account
*ManualAccountsApi* | [**create_manual_account**](docs/ManualAccountsApi.md#create_manual_account) | **POST** /manual_accounts | Create a manual account
*ManualAccountsApi* | [**delete_manual_account**](docs/ManualAccountsApi.md#delete_manual_account) | **DELETE** /manual_accounts/{id} | Delete a manual account
*ManualAccountsApi* | [**get_all_manual_accounts**](docs/ManualAccountsApi.md#get_all_manual_accounts) | **GET** /manual_accounts | Get all manual accounts
*ManualAccountsApi* | [**get_manual_account_by_id**](docs/ManualAccountsApi.md#get_manual_account_by_id) | **GET** /manual_accounts/{id} | Get a single manual account
*ManualAccountsApi* | [**update_manual_account**](docs/ManualAccountsApi.md#update_manual_account) | **PUT** /manual_accounts/{id} | Update an existing manual account
*MeApi* | [**get_me**](docs/MeApi.md#get_me) | **GET** /me | Get current user
*PlaidAccountsApi* | [**get_all_plaid_accounts**](docs/PlaidAccountsApi.md#get_all_plaid_accounts) | **GET** /plaid_accounts | Get all accounts synced via Plaid
*PlaidAccountsApi* | [**get_plaid_account_by_id**](docs/PlaidAccountsApi.md#get_plaid_account_by_id) | **GET** /plaid_accounts/{id} | Get a single account that is synced via Plaid
*PlaidAccountsApi* | [**trigger_plaid_account_fetch**](docs/PlaidAccountsApi.md#trigger_plaid_account_fetch) | **POST** /plaid_accounts/fetch | Trigger Fetch from Plaid
*RecurringItemsApi* | [**get_all_recurring**](docs/RecurringItemsApi.md#get_all_recurring) | **GET** /recurring_items | Get all recurring items
*RecurringItemsApi* | [**get_recurring_by_id**](docs/RecurringItemsApi.md#get_recurring_by_id) | **GET** /recurring_items/{id} | Get a single recurring item
*SummaryApi* | [**get_budget_summary**](docs/SummaryApi.md#get_budget_summary) | **GET** /summary | Get summary
*TagsApi* | [**create_tag**](docs/TagsApi.md#create_tag) | **POST** /tags | Create a new tag
*TagsApi* | [**delete_tag**](docs/TagsApi.md#delete_tag) | **DELETE** /tags/{id} | Delete a tag
*TagsApi* | [**get_all_tags**](docs/TagsApi.md#get_all_tags) | **GET** /tags | Get All Tags
*TagsApi* | [**get_tag_by_id**](docs/TagsApi.md#get_tag_by_id) | **GET** /tags/{id} | Get a single tag
*TagsApi* | [**update_tag**](docs/TagsApi.md#update_tag) | **PUT** /tags/{id} | Update an existing tag
*TransactionsApi* | [**delete_transaction_by_id**](docs/TransactionsApi.md#delete_transaction_by_id) | **DELETE** /transactions/{id} | Delete a transaction
*TransactionsApi* | [**get_transaction_by_id**](docs/TransactionsApi.md#get_transaction_by_id) | **GET** /transactions/{id} | Get a single transaction
*TransactionsApi* | [**update_transaction**](docs/TransactionsApi.md#update_transaction) | **PUT** /transactions/{id} | Update an existing transaction
*TransactionsBulkApi* | [**create_new_transactions**](docs/TransactionsBulkApi.md#create_new_transactions) | **POST** /transactions | Insert one or more transactions.
*TransactionsBulkApi* | [**delete_transactions**](docs/TransactionsBulkApi.md#delete_transactions) | **DELETE** /transactions | Bulk delete existing transactions
*TransactionsBulkApi* | [**get_all_transactions**](docs/TransactionsBulkApi.md#get_all_transactions) | **GET** /transactions | Get all transactions
*TransactionsBulkApi* | [**update_transactions**](docs/TransactionsBulkApi.md#update_transactions) | **PUT** /transactions | Update multiple transactions
*TransactionsFilesApi* | [**attach_file_to_transaction**](docs/TransactionsFilesApi.md#attach_file_to_transaction) | **POST** /transactions/{transaction_id}/attachments | Attach a file to a transaction
*TransactionsFilesApi* | [**delete_transaction_attachment**](docs/TransactionsFilesApi.md#delete_transaction_attachment) | **DELETE** /transactions/attachments/{file_id} | Delete a file attachment
*TransactionsFilesApi* | [**get_transaction_attachment_url**](docs/TransactionsFilesApi.md#get_transaction_attachment_url) | **GET** /transactions/attachments/{file_id} | Get a url to download a file attachment
*TransactionsGroupApi* | [**group_transactions**](docs/TransactionsGroupApi.md#group_transactions) | **POST** /transactions/group | Create a transaction group
*TransactionsGroupApi* | [**ungroup_transactions**](docs/TransactionsGroupApi.md#ungroup_transactions) | **DELETE** /transactions/group/{id} | Delete a transaction group
*TransactionsSplitApi* | [**split_transaction**](docs/TransactionsSplitApi.md#split_transaction) | **POST** /transactions/split/{id} | Split a transaction
*TransactionsSplitApi* | [**unsplit_transaction**](docs/TransactionsSplitApi.md#unsplit_transaction) | **DELETE** /transactions/split/{id} | Unsplit a previously split transactions


## Documentation For Models

 - [AccountTypeEnum](docs/AccountTypeEnum.md)
 - [BalanceHistoryAccountObject](docs/BalanceHistoryAccountObject.md)
 - [BalanceHistoryAccountObjectSource](docs/BalanceHistoryAccountObjectSource.md)
 - [BalanceHistoryEntry](docs/BalanceHistoryEntry.md)
 - [BalanceHistoryListResponseObject](docs/BalanceHistoryListResponseObject.md)
 - [BalanceHistorySourceCryptoManual](docs/BalanceHistorySourceCryptoManual.md)
 - [BalanceHistorySourceCryptoSynced](docs/BalanceHistorySourceCryptoSynced.md)
 - [BalanceHistorySourceDeleted](docs/BalanceHistorySourceDeleted.md)
 - [BalanceHistorySourceManual](docs/BalanceHistorySourceManual.md)
 - [BalanceHistorySourcePlaid](docs/BalanceHistorySourcePlaid.md)
 - [BalanceHistoryUpdateItemObject](docs/BalanceHistoryUpdateItemObject.md)
 - [BalanceHistoryUpdateItemObjectBalance](docs/BalanceHistoryUpdateItemObjectBalance.md)
 - [BudgetInvalidPeriodErrorObject](docs/BudgetInvalidPeriodErrorObject.md)
 - [BudgetObject](docs/BudgetObject.md)
 - [BudgetSettingsResponseObject](docs/BudgetSettingsResponseObject.md)
 - [BudgetUpsertResponseObject](docs/BudgetUpsertResponseObject.md)
 - [CategoryObject](docs/CategoryObject.md)
 - [ChildCategoryObject](docs/ChildCategoryObject.md)
 - [ChildTransactionObject](docs/ChildTransactionObject.md)
 - [CreateCategoryRequestObject](docs/CreateCategoryRequestObject.md)
 - [CreateCategoryRequestObjectChildrenInner](docs/CreateCategoryRequestObjectChildrenInner.md)
 - [CreateCryptoManualRequestObject](docs/CreateCryptoManualRequestObject.md)
 - [CreateCryptoManualRequestObjectBalance](docs/CreateCryptoManualRequestObjectBalance.md)
 - [CreateCryptocurrencyRequestObject](docs/CreateCryptocurrencyRequestObject.md)
 - [CreateManualAccountRequestObject](docs/CreateManualAccountRequestObject.md)
 - [CreateManualAccountRequestObjectBalance](docs/CreateManualAccountRequestObjectBalance.md)
 - [CreateManualAccountRequestObjectClosedOn](docs/CreateManualAccountRequestObjectClosedOn.md)
 - [CreateNewTransactionsRequest](docs/CreateNewTransactionsRequest.md)
 - [CreateTagRequestObject](docs/CreateTagRequestObject.md)
 - [CryptoCurrencyObject](docs/CryptoCurrencyObject.md)
 - [CryptoCurrencyResponseObject](docs/CryptoCurrencyResponseObject.md)
 - [CryptoManualListResponseObject](docs/CryptoManualListResponseObject.md)
 - [CryptoManualObject](docs/CryptoManualObject.md)
 - [CryptoSyncedBalance](docs/CryptoSyncedBalance.md)
 - [CryptoSyncedListResponseObject](docs/CryptoSyncedListResponseObject.md)
 - [CurrencyEnum](docs/CurrencyEnum.md)
 - [CurrentBalanceHistoryEntry](docs/CurrentBalanceHistoryEntry.md)
 - [DeleteCategoryResponseWithDependencies](docs/DeleteCategoryResponseWithDependencies.md)
 - [DeleteCategoryResponseWithDependenciesDependents](docs/DeleteCategoryResponseWithDependenciesDependents.md)
 - [DeleteTagResponseWithDependencies](docs/DeleteTagResponseWithDependencies.md)
 - [DeleteTagResponseWithDependenciesDependents](docs/DeleteTagResponseWithDependenciesDependents.md)
 - [DeleteTransactionsRequest](docs/DeleteTransactionsRequest.md)
 - [ErrorResponseObject](docs/ErrorResponseObject.md)
 - [ErrorResponseObjectErrorsInner](docs/ErrorResponseObjectErrorsInner.md)
 - [GetAllCategories200Response](docs/GetAllCategories200Response.md)
 - [GetAllManualAccounts200Response](docs/GetAllManualAccounts200Response.md)
 - [GetAllPlaidAccounts200Response](docs/GetAllPlaidAccounts200Response.md)
 - [GetAllRecurring200Response](docs/GetAllRecurring200Response.md)
 - [GetAllTags200Response](docs/GetAllTags200Response.md)
 - [GetAllTransactions200Response](docs/GetAllTransactions200Response.md)
 - [GetAllTransactionsCreatedSinceParameter](docs/GetAllTransactionsCreatedSinceParameter.md)
 - [GetTransactionAttachmentUrl200Response](docs/GetTransactionAttachmentUrl200Response.md)
 - [GroupTransactionsRequest](docs/GroupTransactionsRequest.md)
 - [HistoricalBalanceHistoryEntry](docs/HistoricalBalanceHistoryEntry.md)
 - [InsertTransactionObject](docs/InsertTransactionObject.md)
 - [InsertTransactionObjectAmount](docs/InsertTransactionObjectAmount.md)
 - [InsertTransactionsResponseObject](docs/InsertTransactionsResponseObject.md)
 - [ManualAccountObject](docs/ManualAccountObject.md)
 - [PlaidAccountObject](docs/PlaidAccountObject.md)
 - [RecurringObject](docs/RecurringObject.md)
 - [RecurringObjectMatches](docs/RecurringObjectMatches.md)
 - [RecurringObjectMatchesFoundTransactionsInner](docs/RecurringObjectMatchesFoundTransactionsInner.md)
 - [RecurringObjectOverrides](docs/RecurringObjectOverrides.md)
 - [RecurringObjectTransactionCriteria](docs/RecurringObjectTransactionCriteria.md)
 - [SkippedExistingExternalIdObject](docs/SkippedExistingExternalIdObject.md)
 - [SplitTransactionObject](docs/SplitTransactionObject.md)
 - [SplitTransactionObjectAmount](docs/SplitTransactionObjectAmount.md)
 - [SplitTransactionRequest](docs/SplitTransactionRequest.md)
 - [SummaryCategoryObject](docs/SummaryCategoryObject.md)
 - [SummaryCategoryOccurrenceObject](docs/SummaryCategoryOccurrenceObject.md)
 - [SummaryCategoryTotalsObject](docs/SummaryCategoryTotalsObject.md)
 - [SummaryRecurringTransactionObject](docs/SummaryRecurringTransactionObject.md)
 - [SummaryResponseObject](docs/SummaryResponseObject.md)
 - [SummaryRolloverPoolAdjustmentObject](docs/SummaryRolloverPoolAdjustmentObject.md)
 - [SummaryRolloverPoolObject](docs/SummaryRolloverPoolObject.md)
 - [SummaryTotalsBreakdownObject](docs/SummaryTotalsBreakdownObject.md)
 - [SummaryTotalsObject](docs/SummaryTotalsObject.md)
 - [SyncedCryptoAccount](docs/SyncedCryptoAccount.md)
 - [TagObject](docs/TagObject.md)
 - [TransactionAttachmentObject](docs/TransactionAttachmentObject.md)
 - [TransactionObject](docs/TransactionObject.md)
 - [UpdateBalanceHistoryDetailsRequestObject](docs/UpdateBalanceHistoryDetailsRequestObject.md)
 - [UpdateBalanceHistoryDetailsResponseObject](docs/UpdateBalanceHistoryDetailsResponseObject.md)
 - [UpdateCategoryRequestObject](docs/UpdateCategoryRequestObject.md)
 - [UpdateCryptoManualRequestObject](docs/UpdateCryptoManualRequestObject.md)
 - [UpdateCryptoManualRequestObjectBalance](docs/UpdateCryptoManualRequestObjectBalance.md)
 - [UpdateManualAccountRequestObject](docs/UpdateManualAccountRequestObject.md)
 - [UpdateManualAccountRequestObjectBalance](docs/UpdateManualAccountRequestObjectBalance.md)
 - [UpdateManualAccountRequestObjectClosedOn](docs/UpdateManualAccountRequestObjectClosedOn.md)
 - [UpdateTagRequestObject](docs/UpdateTagRequestObject.md)
 - [UpdateTransactionObject](docs/UpdateTransactionObject.md)
 - [UpdateTransactionObjectAmount](docs/UpdateTransactionObjectAmount.md)
 - [UpdateTransactions200Response](docs/UpdateTransactions200Response.md)
 - [UpdateTransactionsRequest](docs/UpdateTransactionsRequest.md)
 - [UpdateTransactionsRequestTransactionsInner](docs/UpdateTransactionsRequestTransactionsInner.md)
 - [UpsertBalanceHistoryRequestObject](docs/UpsertBalanceHistoryRequestObject.md)
 - [UpsertBudget400Response](docs/UpsertBudget400Response.md)
 - [UpsertBudgetRequestObject](docs/UpsertBudgetRequestObject.md)
 - [UpsertBudgetRequestObjectAmount](docs/UpsertBudgetRequestObjectAmount.md)
 - [UserObject](docs/UserObject.md)


<a id="documentation-for-authorization"></a>
## Documentation For Authorization


Authentication schemes defined for the API:
<a id="bearerSecurity"></a>
### bearerSecurity

- **Type**: Bearer authentication (JWT)


## Author

devsupport@lunchmoney.app


