Investor creation is asynchronous.
POST returns 201 immediately with
status: PENDING; registration with the exchange happens in the background.
An investor must reach status: REGISTERED before you can place an order for
them.Scope of this guide
This guide covers the two most common holding / tax-status combinations:
Joint / anyone-or-survivor holding and the other tax statuses (
MINOR,
HUF, COMPANY, TRUST) are planned and will be documented later.
Endpoint
201 with dto.InvestorData.
Example — resident individual, single holder
id is a short, human-quotable code —
I_<holding>_<tax status>_<6-digit sequence> (I_SI_IND_000042) — minted for
your account. It is the primary key, the foreign key every child resource
(investment account, mandate, order, payment) references, and it never
changes even if the tax status is later amended. See
friendly ID conventions.
Example — NRI single holder (NRE / NRO)
Same shape, with two differences:tax_statusisNRI_REPATRIABLE(NRE) orNRI_NON_REPATRIABLE(NRO).- At least one bank account must have
account_typeofNE(NRE) orNO(NRO) — otherwise the request is rejected withVALIDATION_FAILED(“NRI investors require an NRE (NE) or NRO (NO) account”).
address is the mandatory domestic Indian address and country is always
sent to the exchange as India. A separate overseas address for NRIs isn’t
exposed yet.Field reference
Top level
primary_holder
contact
address
demat
bank_accounts[]
nominees[]
fatca (optional but recommended)
euin (optional)
{ "declaration": true, "euin": "E123456" } — the Employee Unique
Identification Number of the advising employee.
Validation
Rejected synchronously with400 VALIDATION_FAILED and a details[] array:
primary_holder.name,primary_holder.dob,contact.email,contact.mobile,address.city,address.pincode— required.holding_typemust be one of the three enum values.SINGLEholding ⇒joint_holdersmust be empty.demat.modeCDSL/NSDL⇒dp_idandclient_idrequired.nomineespresent ⇒percentagesums to 100; a nominee with aguardianbut nodobis rejected.- NRI tax status ⇒ at least one
NE/NObank account.
Registration lifecycle
- PENDING — persisted locally, queued for the exchange.
- PROCESSING — the exchange call is in flight.
- REGISTERED — UCC registered. FATCA (if supplied) is submitted right
after; a FATCA failure is recorded in
provider_stepsbut does not blockREGISTERED. - REJECTED — terminal and persisted (not discarded). The exchange’s reason
is in
provider_remark, with a full attempt history inprovider_steps.
Track progress
PollGET /api/investors/v1/:id:
investor.registered / investor.rejected.
Retry after a rejection
PATCH /api/investors/v1/:id with the corrected fields (same schema). While
the investor is not yet REGISTERED, PATCH updates the stored draft and
re-queues it. Once REGISTERED, PATCH performs a synchronous UCC
modification instead.