English Version
📈 Mutual Funds – Integration Guide
Introduction
The Mutual Funds (FCI) module allows you to offer your users the ability to invest, query, and manage Adcap Asset Management funds directly from your platform, without having to build the operational infrastructure from scratch.
Through API Broker's APIs, your team can integrate in a single connection: the list of available funds, real-time net asset values, subscription and redemption operations, and the portfolio query for each user. The integration is 100% via API and webhooks, and API Broker's support team accompanies the entire process, from development to go-live.
Intended for product, technology, and business teams who want to incorporate mutual funds as a feature within their app, wallet, or financial platform.
Module Features
Available funds query
Complete list of funds with their characteristics: name, type (Fixed Income, Money Market, etc.), currency, strategy, and investment horizon.
Prices and net asset values (NAV)
Real-time or end-of-day values. Also allows retrieving historical data to display performance or calculate annualized rates.
Subscriptions
Your users can invest in a fund by submitting a request from their brokerage account. The operation is executed using the available balance or, in certain cases, from a bank account.
Redemptions
Allows requesting total or partial redemptions of a fund. The order status can be queried in real time or received via webhook.
Portfolio query
Your users can view which funds they are subscribed to, the number of shares, and the current valuation of their portfolio.
Placement Methods: ACDI and SIMPLE
To understand how the module operates, it is key to distinguish the two available placement methods. The method determines who executes the subscription and from/to where the funds move.
ACDI Method
Under this scheme, Adcap Securities acts as an Integral Placement and Distribution Agent (ACDI) and subscribes to the fund on behalf of the account holders. This is the standard method for individuals.
- Subscriptions: funds are deducted from the available balance in the user's brokerage account.
- Redemptions: funds are credited to the user's brokerage account.
- Direct bank transfers are not allowed under this method.
- Does not require a shareholder number from the fund manager.
SIMPLE Method
The account holder subscribes directly to the fund, without ACDI intermediation. This is the method used for legal entities.
- Subscriptions: can be made from the brokerage account balance or via a bank transfer from a same-name account of the user.
- Redemptions: funds can be credited to the brokerage account or transferred to a same-name bank account.
- Requires the user to have a shareholder number assigned by the fund manager.
General rule: individuals operate via ACDI; legal entities operate via SIMPLE. For accounts that have a shareholder number, both methods are optional in the request. If
method_typeis not provided, API Broker assigns the default method according to operational rules.
Integration Flow
a. User and Account Onboarding
Onboarding is a prerequisite for operating mutual funds. The user must have an active brokerage account before they can subscribe to or redeem funds.
| Step | Endpoint |
|---|---|
| Person registration | POST /v2/persons |
| Document upload (individuals) | POST /identity-documents |
| Corporate documentation upload (legal entities) | POST /contracts |
| Brokerage account creation | POST /v2/investment-accounts |
| Bank account registration | POST /bank-accounts |
Expected result: person_id, investment_account_id, bank_account_id.
Important: for legal entities, the system automatically generates a shareholder account in addition to the brokerage account. This enables the SIMPLE method.
API Broker notifies asynchronously when the brokerage account and/or the shareholder account have been created:
- Webhook:
investment_account_update
b. Fund Deposit (Cash In)
The user transfers funds to an Adcap Securities collection account (CBU available in ARS and USD). Through the banking integration, API Broker identifies the deposit and credits the balance to the brokerage account.
API Broker notifies the partner with the details of the received transfer:
- Webhook:
deposit_create - Includes:
investment_account_id, currency, amount, and credit date.
{
"topic": "deposit_create",
"items": [{
"investment_account_id": 43101,
"currency_id": "ARS",
"amount": 10.0,
"trade_date": "2024-09-03",
"status_id": "COMPLETED",
"deposit_id": 631184,
"tax_identification_value": "20415653825"
}]
}c. Fund and Price Query
Before subscribing, the user can explore the available funds and their current values.
| Action | Endpoint |
|---|---|
| List of available funds | GET /instruments/mutual-funds/all |
| Net asset value (NAV) | GET /prices/mutual-funds-prices/{mutual_fund_id} |
| Price history | GET /prices/mutual-funds-history/{mutual_fund_id} |
d. Subscriptions
The user selects a fund and instructs the subscription:
POST /market/fund-requests
Required fields:
{
"investment_account_id": 12345,
"mutual_fund_id": 10,
"fund_operation_type": "subscription",
"currency_id": "ARS",
"amount": 150000,
"external_id": "client-op-0001"
}| Field | Description |
|---|---|
investment_account_id | Account holder code in API Broker |
mutual_fund_id | Code of the fund to subscribe to |
fund_operation_type | "subscription" to subscribe |
currency_id | Operation currency (see master-tables) |
amount | Amount to invest |
external_id | Unique ID sent by the partner to prevent duplicates |
Optional fields (for accounts with a shareholder number):
| Field | Description |
|---|---|
method_type | "ACDI" or "SIMPLE". If not provided, API Broker assigns the default method |
bank_account_id | Source bank account for the funds. Only compatible with the SIMPLE method |
e. Redemptions
Same endpoint as subscription, changing the operation type:
POST /market/fund-requests
fund_operation_type = "redemption"
The redemption can be instructed by amount (amount) or by number of shares (share_quantity). To redeem by shares, send "by_share_quantity": true.
Use cases by method:
| Scenario | ACDI | SIMPLE | SIMPLE + bank account |
|---|---|---|---|
| Subscription | Deducts from brokerage balance | Deducts from brokerage balance | Debits from bank account |
| Redemption | Credits to brokerage account | Credits to brokerage account | Transfers to bank account |
Default logic when the account has a shareholder number:
| Partner request | Behavior in API Broker |
|---|---|
No method_type | Uses SIMPLE method by default |
method_type: ACDI | Operates via ACDI |
method_type: SIMPLE + bank_account_id | Operates against bank account |
method_type: SIMPLE without bank_account_id | Operates against brokerage balance |
f. Request Status Query
Beyond webhooks, it is possible to query the status and details of a mutual fund request at any time directly by its request_id.
GET /market/fund-requests/{request_id}
| Field | Description |
|---|---|
request_id | Request ID returned when it was created with POST /market/fund-requests |
Possible responses:
| Code | Description |
|---|---|
200 | Details and current status of the request |
403 | No permissions to access the request |
404 | Request not found |
422 | Validation error |
500 | Internal server error |
When to use it: this endpoint is useful for reconciliation, user support, or when the webhook was not received correctly. It allows verifying the exact status of the operation at any time.
g. Tickets / Settlement Confirmations Query
Once a subscription or redemption request has been processed, the fund manager generates a ticket (settlement confirmation). These tickets can be queried to obtain the operational details of the settlement: shares, price, settlement date, and amounts.
GET /markets/mutual-fund-confirmations
Recommended query parameters:
| Parameter | Description |
|---|---|
investment_account_id | Filters tickets for a specific brokerage account |
mutual_fund_id | Filters by fund |
from_date / to_date | Settlement date range |
Use cases: show the user their operation receipt, perform accounting reconciliation, or verify the price and number of settled shares. Tickets are available once the operation reaches
SETTLEDstatus.
h. Account Statement Query
Allows obtaining the complete account statement of a brokerage account: monetary position (available balances) and fund holdings.
GET /portfolio/account-statements/{investment_account_id}
Path parameters:
| Parameter | Type | Description |
|---|---|---|
investment_account_id | integer | Brokerage account ID |
Optional query parameters:
| Parameter | Default | Description |
|---|---|---|
position_discriminator_bcra | true | Discriminates position according to BCRA criteria |
compromised_holdings | false | Includes compromised holdings (pending operations) |
include_remunerated_balance | false | Includes remunerated balance separately from the available balance |
Responses:
| Code | Description |
|---|---|
200 | Account statement with monetary position and available holdings |
422 | Validation error |
When to use it: to show the user their available balance before subscribing, or to display the details of their mutual fund portfolio with updated valuation.
i. Withdrawal (Cash Out)
Once the redemption has been settled (status = SETTLED), the partner can instruct the withdrawal of funds to a user's bank account.
POST /withdraw-requests
Withdrawals are asynchronous. API Broker notifies status changes via webhook:
- Webhook:
withdraw_request_update - States:
IN_PROGRESS→COMPLETED/REJECTED
{
"topic": "withdraw_request_update",
"items": [{
"amount": 100,
"status_id": "COMPLETED",
"currency_id": "ARS",
"bank_account_id": 121535,
"withdraw_request_id": 984479,
"investment_account_id": 74659
}]
}Main Endpoints
| Method | Endpoint | Description |
|---|---|---|
POST | /v2/persons | Person registration |
POST | /identity-documents | Document upload (individuals) |
POST | /contracts | Corporate documentation (legal entities) |
POST | /v2/investment-accounts | Brokerage account creation |
POST | /bank-accounts | Bank account registration |
GET | /instruments/mutual-funds/all | List of available funds |
GET | /prices/mutual-funds-prices | Net asset values |
GET | /prices/mutual-funds-history/:id | Price history |
POST | /market/fund-requests | Subscribe / redeem |
POST | /receipts/withdraw-requests | Fund withdrawal |
GET | /portfolio/account-statements/{investment_account_id} | Account statement (monetary position and holdings) |
GET | /markets/mutual-fund-confirmations | Mutual fund settlement tickets / confirmations |
GET | /market/fund-requests/{request_id} | Status and details of a mutual fund request |
Webhooks to Implement
Your platform must expose a URL to receive the following events:
deposit_create
deposit_createTriggered when API Broker credits a deposit to a user's brokerage account. Includes investment_account_id, currency, amount, and credit date.
investment_account_update
investment_account_updateTriggered when the brokerage account and/or the shareholder account are created in the broker-dealer or the fund management company. Allows knowing when the user is enabled to operate.
withdraw_request_update
withdraw_request_updateTriggered on each status change of a withdrawal. Includes the updated status (IN_PROGRESS, COMPLETED, REJECTED), amount, and destination account.
Key Points to Remember
- Onboarding is a prerequisite: the user needs an active
investment_account_idto operate mutual funds. - Legal entities automatically get a shareholder account: this enables the SIMPLE method and operations to/from a bank account.
- ACDI and SIMPLE are not freely interchangeable: if the user does not have a shareholder number, they can only operate via ACDI.
method_typeis optional but important: if not provided, API Broker assigns the default according to operational rules. Understanding those rules avoids unexpected behavior.bank_account_idonly works with SIMPLE: it is not compatible with the ACDI method.- Withdrawals require settled funds: a withdrawal cannot be instructed until the redemption has
status = SETTLED. - Webhooks are mandatory:
deposit_createandwithdraw_request_updateare critical events in the flow. Your platform must have a URL available to receive them. external_idprevents duplicates: always send a unique identifier per operation to avoid double processing.
Updated 6 months ago
