curl --request POST \
--url https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/suitability \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"isLicensedSecuritiesProfessional": false,
"isAffiliatedWithSecuritiesFirm": false,
"educationLevel": "higher_education",
"annualIncome": "100k_to_250k",
"netWorth": "500k_to_1m",
"investablePercentageOfNetWorth": "10_to_25",
"investmentApproach": "aggressive_growth",
"investmentHorizon": "3_to_5_years",
"lossTolerance": "over_30_percent",
"acceptsIlliquidity": true,
"occupation": "employee",
"declaresLawfulOriginOfFunds": true,
"isPoliticallyExposedPerson": false,
"assetExperience": {
"equities": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"fixedIncome": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"collectiveInvestment": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"optionsAndDerivatives": {
"experience": "none",
"knowledge": "none",
"tradingFrequency": "never"
},
"digitalAssets": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"privatePlacements": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
},
"realEstate": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
}
},
"declarations": {
"subscriberAgreementReviewed": true,
"formCrsReviewed": true,
"affirmationsConfirmed": true
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
isLicensedSecuritiesProfessional: false,
isAffiliatedWithSecuritiesFirm: false,
educationLevel: 'higher_education',
annualIncome: '100k_to_250k',
netWorth: '500k_to_1m',
investablePercentageOfNetWorth: '10_to_25',
investmentApproach: 'aggressive_growth',
investmentHorizon: '3_to_5_years',
lossTolerance: 'over_30_percent',
acceptsIlliquidity: true,
occupation: 'employee',
declaresLawfulOriginOfFunds: true,
isPoliticallyExposedPerson: false,
assetExperience: {
equities: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
fixedIncome: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
collectiveInvestment: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
optionsAndDerivatives: {experience: 'none', knowledge: 'none', tradingFrequency: 'never'},
digitalAssets: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
privatePlacements: {experience: 'none', knowledge: 'some', tradingFrequency: 'never'},
realEstate: {experience: 'none', knowledge: 'some', tradingFrequency: 'never'}
},
declarations: {
subscriberAgreementReviewed: true,
formCrsReviewed: true,
affirmationsConfirmed: true
}
})
};
fetch('https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/suitability', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/suitability"
payload = {
"isLicensedSecuritiesProfessional": False,
"isAffiliatedWithSecuritiesFirm": False,
"educationLevel": "higher_education",
"annualIncome": "100k_to_250k",
"netWorth": "500k_to_1m",
"investablePercentageOfNetWorth": "10_to_25",
"investmentApproach": "aggressive_growth",
"investmentHorizon": "3_to_5_years",
"lossTolerance": "over_30_percent",
"acceptsIlliquidity": True,
"occupation": "employee",
"declaresLawfulOriginOfFunds": True,
"isPoliticallyExposedPerson": False,
"assetExperience": {
"equities": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"fixedIncome": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"collectiveInvestment": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"optionsAndDerivatives": {
"experience": "none",
"knowledge": "none",
"tradingFrequency": "never"
},
"digitalAssets": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"privatePlacements": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
},
"realEstate": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
}
},
"declarations": {
"subscriberAgreementReviewed": True,
"formCrsReviewed": True,
"affirmationsConfirmed": True
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Send the investor's suitability
Records the investor’s suitability — Securitize’s investor profile: experience, finances, risk profile, experience per asset class, and your attestation that the investor reviewed Securitize’s documents — in one call, and answers the verdict in the same response. The same questionnaire serves individuals and entities, and it can be sent at any investor status. An investor you have limited access to can be sent too.
One suitability per investor, and it cannot be changed. The first complete submission — yours, another partner’s or the investor’s own on Securitize — is final. A later call writes nothing and answers 200 with the current state.
Read verificationStatus, not status. status says whether the questionnaire is completed; verificationStatus is Securitize’s verdict, the one that token whitelisting requires.
For an individual, the answers decide the verdict in the same response:
verified—investmentApproachisaggressive_growth,lossToleranceisover_30_percent,acceptsIlliquidityistrue, and bothisLicensedSecuritiesProfessionalandisAffiliatedWithSecuritiesFirmarefalse. Once the investor’s ownstatus(GET /investors/{investorId}) isverified, their Securitize Markets brokerage account is approved too.rejected—investmentApproachis notaggressive_growth,lossToleranceis notover_30_percent, oracceptsIlliquidityisfalse, whatever the other answers. A Securitize Markets brokerage account is not available to the investor; tell them: “Based on your answers, a Securitize Markets brokerage account is not available to you at this time.”processing— the answers above qualify, butisLicensedSecuritiesProfessionalorisAffiliatedWithSecuritiesFirmistrue. Securitize’s compliance team reviews the account and may contact the investor; theinvestor.suitability.updatedwebhook announces its decision.
Securitize can change which answers lead to each verdict: act on the verificationStatus you receive, not on the answers you sent. An entity’s suitability reads verified at once.
After a compact suitability. An individual who took the compact suitability can complete the full one with this call while its verdict is verified.
A verdict under review or not approved. While the full suitability is not complete and the investor’s verdict is processing or rejected — from a compact suitability, or set by Securitize’s compliance team — the call answers 422 with details.reason suitability_under_review or suitability_not_approved and stores nothing.
An invalid body answers 400 with every field to fix and stores nothing. The three declarations must be true: they attest that the investor was given and reviewed the current Securitize Markets, LLC Subscriber Agreement and Form CRS, as supplied to your account by Securitize, and confirmed the affirmations described on the field.
curl --request POST \
--url https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/suitability \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"isLicensedSecuritiesProfessional": false,
"isAffiliatedWithSecuritiesFirm": false,
"educationLevel": "higher_education",
"annualIncome": "100k_to_250k",
"netWorth": "500k_to_1m",
"investablePercentageOfNetWorth": "10_to_25",
"investmentApproach": "aggressive_growth",
"investmentHorizon": "3_to_5_years",
"lossTolerance": "over_30_percent",
"acceptsIlliquidity": true,
"occupation": "employee",
"declaresLawfulOriginOfFunds": true,
"isPoliticallyExposedPerson": false,
"assetExperience": {
"equities": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"fixedIncome": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"collectiveInvestment": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"optionsAndDerivatives": {
"experience": "none",
"knowledge": "none",
"tradingFrequency": "never"
},
"digitalAssets": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"privatePlacements": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
},
"realEstate": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
}
},
"declarations": {
"subscriberAgreementReviewed": true,
"formCrsReviewed": true,
"affirmationsConfirmed": true
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
isLicensedSecuritiesProfessional: false,
isAffiliatedWithSecuritiesFirm: false,
educationLevel: 'higher_education',
annualIncome: '100k_to_250k',
netWorth: '500k_to_1m',
investablePercentageOfNetWorth: '10_to_25',
investmentApproach: 'aggressive_growth',
investmentHorizon: '3_to_5_years',
lossTolerance: 'over_30_percent',
acceptsIlliquidity: true,
occupation: 'employee',
declaresLawfulOriginOfFunds: true,
isPoliticallyExposedPerson: false,
assetExperience: {
equities: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
fixedIncome: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
collectiveInvestment: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
optionsAndDerivatives: {experience: 'none', knowledge: 'none', tradingFrequency: 'never'},
digitalAssets: {experience: 'some', knowledge: 'some', tradingFrequency: 'occasionally'},
privatePlacements: {experience: 'none', knowledge: 'some', tradingFrequency: 'never'},
realEstate: {experience: 'none', knowledge: 'some', tradingFrequency: 'never'}
},
declarations: {
subscriberAgreementReviewed: true,
formCrsReviewed: true,
affirmationsConfirmed: true
}
})
};
fetch('https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/suitability', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://partners-api.sandbox.securitize.io/investors/v1/onboarding-reliance/investors/{investorId}/suitability"
payload = {
"isLicensedSecuritiesProfessional": False,
"isAffiliatedWithSecuritiesFirm": False,
"educationLevel": "higher_education",
"annualIncome": "100k_to_250k",
"netWorth": "500k_to_1m",
"investablePercentageOfNetWorth": "10_to_25",
"investmentApproach": "aggressive_growth",
"investmentHorizon": "3_to_5_years",
"lossTolerance": "over_30_percent",
"acceptsIlliquidity": True,
"occupation": "employee",
"declaresLawfulOriginOfFunds": True,
"isPoliticallyExposedPerson": False,
"assetExperience": {
"equities": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"fixedIncome": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"collectiveInvestment": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"optionsAndDerivatives": {
"experience": "none",
"knowledge": "none",
"tradingFrequency": "never"
},
"digitalAssets": {
"experience": "some",
"knowledge": "some",
"tradingFrequency": "occasionally"
},
"privatePlacements": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
},
"realEstate": {
"experience": "none",
"knowledge": "some",
"tradingFrequency": "never"
}
},
"declarations": {
"subscriberAgreementReviewed": True,
"formCrsReviewed": True,
"affirmationsConfirmed": True
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)Authorizations
OAuth 2.0 client credentials. Exchange the client id and secret Securitize issued you for a bearer token at the token URL (the host root, not under the base URL), with grant_type=client_credentials; the token lasts 2 hours and goes in the Authorization: Bearer header of every request. No scope is needed. The token identifies your partner account, so you never send a partner id, and every record you create is scoped to you.
Path Parameters
Body
The investor's suitability profile, complete in one call.
Response
The current state. Without a change when a suitability was already complete.
The investor's suitability state.
Securitize's verdict. none — not verified. verified — verified. processing — under review by Securitize's compliance team. rejected — not approved. Only verified counts as verified; contact Securitize if another value persists.
none, processing, verified, rejected