> ## Documentation Index
> Fetch the complete documentation index at: https://docs.bluumfinance.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an Investor

> Open a self-directed investor with POST /v1/investors.

Create an investor for your end user. This one call collects identity, contact, tax, regulatory disclosures, and signed agreements. The body is flat — all fields sit at the top level.

Make sure your shell is set up from the [overview](/get-started/journey/overview).

## Create the investor

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "$BASE_URL/investors" \
    -H "Authorization: Basic $AUTH" \
    -H "Content-Type: application/json" \
    -d '{
      "account_type": "individual",
      "management_type": "self_directed",
      "first_name": "Jane",
      "last_name": "Doe",
      "date_of_birth": "1990-05-15",
      "tax_id": "987-65-4321",
      "tax_id_type": "SSN",
      "tax_id_country": "US",
      "country_of_citizenship": "US",
      "country_of_birth": "US",
      "country_of_tax_residence": "US",
      "funding_source": ["employment_income"],
      "annual_income": { "min": "100000", "max": "150000" },
      "liquid_net_worth": { "min": "50000", "max": "100000" },
      "email": "jane.doe@example.com",
      "phone": "+14155551234",
      "employment_status": "employed",
      "address": {
        "street": ["456 Oak Avenue"],
        "city": "San Francisco",
        "state": "CA",
        "postal_code": "94102",
        "country": "US"
      },
      "is_control_person": false,
      "is_affiliated_exchange_or_finra": false,
      "is_politically_exposed": false,
      "immediate_family_exposed": false,
      "signed_agreements": [
        { "type": "investor_agreement", "signed_at": "2026-07-01T10:30:00Z", "ip_address": "203.0.113.42" },
        { "type": "margin_disclosure_acknowledged", "signed_at": "2026-07-01T10:30:00Z", "ip_address": "203.0.113.42" }
      ]
    }'
  ```

  ```javascript Node.js theme={null}
  const auth = Buffer.from(`${API_KEY}:${API_SECRET}`).toString("base64");

  const res = await fetch(`${BASE_URL}/investors`, {
    method: "POST",
    headers: {
      Authorization: `Basic ${auth}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      account_type: "individual",
      management_type: "self_directed",
      first_name: "Jane",
      last_name: "Doe",
      date_of_birth: "1990-05-15",
      tax_id: "987-65-4321",
      tax_id_type: "SSN",
      tax_id_country: "US",
      country_of_citizenship: "US",
      country_of_birth: "US",
      country_of_tax_residence: "US",
      funding_source: ["employment_income"],
      annual_income: { min: "100000", max: "150000" },
      liquid_net_worth: { min: "50000", max: "100000" },
      email: "jane.doe@example.com",
      phone: "+14155551234",
      employment_status: "employed",
      address: {
        street: ["456 Oak Avenue"],
        city: "San Francisco",
        state: "CA",
        postal_code: "94102",
        country: "US",
      },
      is_control_person: false,
      is_affiliated_exchange_or_finra: false,
      is_politically_exposed: false,
      immediate_family_exposed: false,
      signed_agreements: [
        { type: "investor_agreement", signed_at: "2026-07-01T10:30:00Z", ip_address: "203.0.113.42" },
        { type: "margin_disclosure_acknowledged", signed_at: "2026-07-01T10:30:00Z", ip_address: "203.0.113.42" },
      ],
    }),
  });

  const investor = await res.json();
  console.log(investor.id); // inv_...
  ```

  ```python Python theme={null}
  import base64, requests

  auth = base64.b64encode(f"{API_KEY}:{API_SECRET}".encode()).decode()

  res = requests.post(
      f"{BASE_URL}/investors",
      headers={"Authorization": f"Basic {auth}", "Content-Type": "application/json"},
      json={
          "account_type": "individual",
          "management_type": "self_directed",
          "first_name": "Jane",
          "last_name": "Doe",
          "date_of_birth": "1990-05-15",
          "tax_id": "987-65-4321",
          "tax_id_type": "SSN",
          "tax_id_country": "US",
          "country_of_citizenship": "US",
          "country_of_birth": "US",
          "country_of_tax_residence": "US",
          "funding_source": ["employment_income"],
          "annual_income": {"min": "100000", "max": "150000"},
          "liquid_net_worth": {"min": "50000", "max": "100000"},
          "email": "jane.doe@example.com",
          "phone": "+14155551234",
          "employment_status": "employed",
          "address": {
              "street": ["456 Oak Avenue"],
              "city": "San Francisco",
              "state": "CA",
              "postal_code": "94102",
              "country": "US",
          },
          "is_control_person": False,
          "is_affiliated_exchange_or_finra": False,
          "is_politically_exposed": False,
          "immediate_family_exposed": False,
          "signed_agreements": [
              {"type": "investor_agreement", "signed_at": "2026-07-01T10:30:00Z", "ip_address": "203.0.113.42"},
              {"type": "margin_disclosure_acknowledged", "signed_at": "2026-07-01T10:30:00Z", "ip_address": "203.0.113.42"},
          ],
      },
  )

  investor = res.json()
  investor_id = investor["id"]  # inv_...
  ```
</CodeGroup>

## Response

```json theme={null}
{
  "id": "inv_01j9x8m2k7qpzwv3t5r6y8n0ab",
  "object": "investor",
  "account_type": "individual",
  "management_type": "self_directed",
  "first_name": "Jane",
  "last_name": "Doe",
  "email": "jane.doe@example.com",
  "status": "onboarding",
  "created": 1751365800
}
```

Store the `id`. Every subsequent call on this path uses it:

```bash theme={null}
INVESTOR_ID="inv_01j9x8m2k7qpzwv3t5r6y8n0ab"
```

## Signed agreements

`signed_agreements` is required and must contain at least the two US agreements:

| Type                             | When required                                       |
| -------------------------------- | --------------------------------------------------- |
| `investor_agreement`             | Always. Do not send it twice.                       |
| `margin_disclosure_acknowledged` | Always.                                             |
| `w8ben_certification`            | Add it when `country_of_tax_residence` is not `US`. |

Each entry carries `type`, `signed_at` (ISO 8601), and the end user's `ip_address` at the time they accepted.

<Note>
  US tax residents must include `state` and `postal_code` in `address`. Set `tax_id_type` to the code that matches the ID: `SSN`, `ITIN`, `EIN`, `SIN`, `NINO`, `TFN`, `VAT`, `TIN`, or `OTHER`.
</Note>

<Warning>
  If `is_control_person` or `is_affiliated_exchange_or_finra` is `true`, include the `affiliated_company` object with `name`, `address`, and `compliance_email`. `ticker` is also required for control persons.
</Warning>

For investor types, lifecycle states, and the full field reference, see [Investors](/concepts/investors) and the [API reference](/api-reference).

<Tip>
  Next → [Verify identity](/get-started/journey/verify-identity).
</Tip>
