Data Model: Profile
Purpose: The Profile entity represents a single, distinct investment account on the platform. It acts as the primary container for a specific legal entity—which can be an Individual, Trust, Entity, Solo401k, and SDIRA—and holds all associated compliance information, ownership structures, and legal documentation.
Fields/Attributes
This table describes the fields in the main Profile model. It holds the information common to all account types.
| Name | Type | Description | Validation Rules |
|---|---|---|---|
| Core Identification & Type | |||
id | Unique Identifier | The primary system ID for the profile. | • Required • System-generated, Read-only |
user_id | Foreign Key | A reference to the master User login account that owns this profile. | • Required |
profile_type | Choice | The legal structure of the profile. This choice dictates which fields and rules apply. | • Required • Must be one of: INDIVIDUAL, ENTITY, TRUST, SOLO401K, SDIRA |
| Primary Person Information | |||
first_name | Text | The legal first name of the primary individual (the investor, trustee, or business controller). | • Required |
last_name | Text | The legal last name of the primary individual. | • Required |
date_of_birth | Date | The individual's date of birth. | • Required |
phone_number | Phone | The primary contact phone number. | • Required |
ssn | Encrypted Text | The individual's 9-digit Social Security Number. | • Required for US individuals |
citizenship | Choice | The citizenship or residency status of the individual. | • Required |
address_1 | Text | The primary residential street address. | • Required |
city | Text | The city of residence. | • Required |
state | Choice | The two-letter state code (e.g., CA, NY). | • Required |
zipcode | Text | The postal or ZIP code. | • Required |
country | Choice | The two-letter country code. | • Required • Defaults to 'US' |
| Compliance & Metadata | |||
kyc_status | Choice | The KYC verification status for the primary individual on this profile. | • Required • System-managed |
accreditation_status | Choice | The accreditation status for this profile. | • Required • System-managed |
| Compliance Status | |||
kyc_status | Choice | The current KYC verification status. | • Required • System-managed • Must be one of: NOT_STARTED, PENDING, VERIFIED, REJECTED |
kyc_at | Timestamp | The timestamp when the kyc_status was set to VERIFIED. | • Read-only |
accreditation_status | Choice | The current investor accreditation status. | • Required • System-managed • Must be one of: NOT_STARTED, PENDING, VERIFIED, REJECTED, EXPIRED |
accreditation_at | Timestamp | The timestamp when the accreditation_status was set to VERIFIED. | • Read-only |
| Integration IDs | |||
kyc_provider_id | Text | The unique verification ID from the KYC provider (e.g., Plaid). | • System-set |
escrow_account_id | Text | The unique Account ID from the accreditation provider (e.g., North Capital). | • System-set |
escrow_party_id | Text | The unique Party ID from the accreditation provider. | • System-set |
wallet_id | Text | The unique ID for the associated wallet from the payment provider (e.g., Dwolla). | • System-set • Not applicable if profile_type is SDIRA |
| Metadata | |||
created_at | Timestamp | The date and time the profile record was created. | • Read-only • System-set on creation |
updated_at | Timestamp | The date and time the profile was last modified. | • Read-only • System-managed |
| Entity-Specific Fields | |||
entity_name | Text | The legal name of the business entity. | • Required if profile_type is ENTITY |
entity_type | Choice | The legal structure of the business entity. | • Required if profile_type is ENTITY • Must be one of: LLC, CORPORATION, LIMITED_PARTNERSHIP, GENERAL_PARTNERSHIP |
entity_title | Text | The user's title within the entity (e.g., Managing Partner, CEO). | • Required if profile_type is ENTITY |
entity_ein | Text | The Employer Identification Number for the entity. | • Required if profile_type is ENTITY |
is_entity_purpose_built | Boolean | Flag indicating if the entity was created solely for investing. | • Required if profile_type is ENTITY |
is_entity_tax_exempt | Boolean | Flag indicating if the entity has tax-exempt status. | • Required if profile_type is ENTITY |
doc_url_operating_agreement | URL | The URL to the stored Operating Agreement document. | • Required if entity_type is LLC |
doc_url_partnership_agreement | URL | The URL to the stored Partnership Agreement document. | • Required if entity_type is LIMITED_PARTNERSHIP or GENERAL_PARTNERSHIP |
doc_url_bylaws | URL | The URL to the stored corporate Bylaws document. | • Required if entity_type is CORPORATION |
| Trust-Specific Fields | |||
trust_name | Text | The legal name of the trust. | • Required if profile_type is TRUST |
trust_type | Choice | The type of trust. | • Required if profile_type is TRUST • Must be one of: REVOCABLE, IRREVOCABLE |
trust_title | Text | The user's title within the trust (e.g., Trustee). | • Required if profile_type is TRUST |
trust_has_ein | Boolean | Flag indicating if the trust has an EIN. | • Required if profile_type is TRUST |
trust_ein | Text | The Employer Identification Number for the trust. | • Required if trust_has_ein is True |
doc_url_trust_agreement | URL | The URL to the stored Trust Agreement document. | • Required if profile_type is TRUST |
| Solo401k-Specific Fields | |||
solo401k_name | Text | The name of the Solo 401(k) plan. | • Required if profile_type is SOLO401K |
solo401k_ein | Text | The EIN for the Solo 401(k) plan. | • Required if profile_type is SOLO401K |
doc_url_solo401k_agreement | URL | The URL to the stored Solo 401(k) Plan Agreement. | • Required if profile_type is SOLO401K |
| SDIRA-Specific Fields | |||
sdira_custodian_choice | Choice | The selected SDIRA custodian. | • Required if profile_type is SDIRA • Must be one of: ALTO, OTHER |
sdira_custodian_name | Text | The name of the SDIRA custodian, if "Other" is chosen. | • Required if sdira_custodian_choice is OTHER |
sdira_custodian_website | URL | The website of the SDIRA custodian, if "Other" is chosen. | • Required if sdira_custodian_choice is OTHER |
| Offer Access | |||
mifid_ii_category | Choice | The investor's classification under MiFID II rules, for EU investors, determined via questionnaire. | • Required for EU regulation • Must be one of: RETAIL_CLIENT, PROFESSIONAL_CLIENT |
gdpr_consent | Boolean | The investor's GDPR consent. | • Required for EU regulation |
prominent_risk_acknowledge | Boolean | The investor's prominant risk akknowledge. | • Required for EU regulation (for RETAIL_CLIENT only) |
sophistication_status | Choice | The investor's status as a "sophisticated" investor, determined via questionnaire. | • System-set • Must be one of: PENDING_VERIFICATION, ACCREDITED_SELF_CERTIFIED, SOPHISTICATED_NON_ACCREDITED, UNQUALIFIED. Required for Reg D 506b investments |
annual_income | Currency | The investor's self-reported annual income, used for investment limit calculations. | • Required for Reg A+ and Reg CF investments |
net_worth | Currency | The investor's self-reported net worth, used for investment limit calculations. | • Required for Reg A+ and Reg CF investments |
reg_cf_prior_investments_12m | Currency | The investor's self-attested total amount invested in all Reg CF offerings over the prior 12 months. | • Required for Reg CF investments |
Key Relationships
User: A User can have multiple
Profiles(a one-to-many relationship).Investments: A
Profilecan make many Investments (a one-to-many relationship).Wallet: Each
Profile(except SDIRA, if applicable) has one Wallet and one EVM Wallet (a one-to-one relationship).
Auditing & Event History
Every significant action or change made to an Profile is recorded as an immutable entry in a system-wide EventLog. This creates a complete and tamper-proof audit trail for compliance and operational tracking.