Create a Purchase Order

Ensure the following before placing a purchase order
  1. Your investor is kyc compliant
  2. You have an investment account created for your investor

1. Get fund scheme details and check purchase eligibility

Once you have decided to place a purchase order against a particular scheme, fetch the scheme details using the Get fund scheme , and ensure that the scheme is eligible for purchase. Here are the checks that you must do.

  1. The scheme must be active (i.e. active=true)
  2. Lumpsum purchases must be allowed (i.e. purchase_allowed=true)
  3. If a fresh purchase is being made, i.e. a purchase without providing a folio number, ensure that purchase amount is within the range of min_initial_investment and max_initial_investment and the denomination of the amount must be according to initial_investment_multiples of a scheme.
  4. If an additional purchase is being made, i.e. a purchase in an existing folio, ensure that purchase amount is within the range of min_additional_investment and max_additional_investment and the denomination of the amount must be according to additional_investment_multiples of a scheme.

2. Create a purchase order

FP uses MF Purchase object to represent all the mutual fund purchase orders. You need to create a MF Purchase as a first step for placing a one time purchase order.Call the Create mf purchase with the following json. Use the investment account of the investor for whom you are placing the order for.

{
  "mf_investment_account": "mfia_367a75826694614a539c0f82b196027",
  "scheme": "INF173K01FE6",
  "amount": 10000
}

A MF Purchase gets created for which you need to make a payment. Keep a note of the object id and old_id; you will need these for making payments and checking the status of the order later on.

# Displaying only a part of the object(response) for brevity
{
  "object": "mf_purchase",
  "id": "mfp_177177219f634373b01072986d2eea7d",
  "old_id": 9123,
  "mf_investment_account": "mfia_367a75826694614a539c0f82b196027",
  "amount": 10000
}

Note: If you are placing a purchase order against an existing folio, you can also provide folio_number while creating a purchase order.

3. Send OTP to mobile/email and obtain consent for nomination details before creating payment for new folio creation

This step is applicable only for new folio creation. i.e. if it is a new investment under a new folio

For what purpose must the consent be taken?

The investor has two options to manage nominations while creating a new folio.

  1. Either provide nominee details (upto 3) OR
  2. Opt out of nomination

Irrespective of the option chosen, obtaining consent from the investor for the nomination option is mandatory.

How should consent be taken?

If nominee details are provided, ensure that all the holders know their nomination preferences so that they can give consent.

  1. Nominee Name
  2. Nominee DOB (Mandatory & Applicable in case the Nominee is a Minor)
  3. Allocation Percentage
  4. Nominee Relationship
  5. Name of the Guardian (Mandatory & Applicable in case the Nominee is a Minor)
  6. Guardian’s Relationship with Nominee (Mandatory & Applicable in case the Nominee is a Minor)
  7. Nominee Pan (Optional)
  8. Guardian Pan (Optional. Can provide this value if nominee is a minor)

On the other hand, if nominee details are not provided, ensure that all holders know that they are opting out of the nomination facility.

  • Send OTP to both Mobile number/Email address. This must be the mobile number/email address stored against the primary investor linked to the investment account associated with the purchase order. If there are multiple holders, send OTP to Mobile number/Email addresses of all holders.
  • Accept OTP from all the holders and verify the OTP and ensure that the correct OTP is entered.
  • Store all the consent-related information for audit purposes.

4. Update the purchase order with investor consent

As per SEBI regulations, investor consent must be obtained by -

  1. Sending a One-Time Password to the investor at his/her email/phone number registered against the folio if a purchase order has been placed against a folio. Call the Fetch folios API and fetch the email address and mobile number against the folio.
  2. Sending a One-Time Password to the investor at his/her email/phone number available in the Investor Object or the Investor Profile.

Once the consent has been collected, the email and mobile used to collect that consent needs to be added to the purchase object by using Update a Purchase Order .

If the order gateway is BSE, you need to change the order state to confirmed along with the consent details using Update a MF Purchase . Once the order is confirmed, FP will try to submit the order to BSE asynchronously in the background. Once the order submission is successful, the purchase order state changes from confirmed to submitted. Please ensure that orders are in submitted state before you can accept payments.

5. Collect payments against purchase orders

Option 1
Option 2
Option 3

Collect amount via Netbanking/UPI

To make a payment using internet banking or upi, make a request to Create payment with the following json. Use the order's old_id from the previous step. Use the id of the bank account belonging to the investor, with which you want him to make the payment. You can provide multiple order ids of `pending` purchase orders created against the same investment account and create a single payment.

{
  "amc_order_ids": [9123],
  "bank_account_id": 23
}

Look for token_url in the response and redirect your investor to it to complete his payment. After your investor finishes the payment, FP redirects him to the postback URL configured on your account or to the payment_postback_url provided in the request. You'll receive success or failure in the status param. As a good security practice, do not completely rely on the status received in the postback call. Instead check the status of the payment from your server before giving a final confirmation to your investor.
Learn more about payment states.
Upon successful payment collection, the orders willl be marked as confirmed if the gateway is rta and orders will be submitted to order gateway eventually for further processing.

Collect amount via e-mandates

To make a payment against one-time RTA purchase orders using e-mandates, make a request to Create a NACH payment with the following json. Use the order's old_id from the previous step. Use the id of the mandate belonging to the investor, with which you want the investor to make the payment.

{
  "mandate_id": 23
  "amc_order_ids": [9123],
}

For more details, please check this link.Upon successful payment collection, the orders willl be marked as confirmed if the gateway is rta and orders will be submitted to order gateway eventually for further processing.

Collect payments on your own.

After you have collected the money from your investor and initiated a transfer of that amount to AMC's bank account, provide the transfer details using the Create a MF Settlement Detail with the following json:

{
  "mf_purchase": "mfp_177177219f634373b01072986d2eea7d",
  "payment_type": "netbanking",
  "bank_account_number": "999900002222",
"bank_ifsc": "UTIB0003098",
"beneficiary_account_number": "1233453",
"beneficiary_account_title": "MF Collection A/c",
"beneficiary_bank_name": "Amc Bank Name" 
}

Collect payments on your own

Once you provided the transfer initiation details, confirm the purchase order by calling the Update mf purchase with the following json:

{
  "id": "mfp_177177219f634373b01072986d2eea7d",
  "state": "confirmed"
}

5. Track the order

Once the payment collection is successful, you don't have to take further actions. After the order is processed successfully (typically takes one day) - units are allotted and the object state will move to successful. You can track a single purchase order using fetch mf purchase to check the state of the order or you can check the status of multiple orders at once using MF Purchase List API.

For a successful order, review the following key attributes of the mf_purchase object:
allotted_units: the number of units issued for the purchase amount
purchased_price: the price per unit at which the units are issued
folio_number: the folio (aka mutual fund account) in which the units are issued. You'll need this to place additional purchases and redemption orders

Testing

In sandbox, use the simulation to simulate successful and failed orders to help you during the integration process. Use the following json to simulate the order to successful state.

{
  "status": "SUCCESSFUL"
}

A testing folio number is issued during simulation, which you can use to place additional purchase orders or redemption orders.