Investors

Create an investor

POST/investors

Creates an investor in the platform organisation through its invite flow, returning 201 with a Location; the invite email follows auto_send and any approval workflow. An email matching a live investor, even a deactivated one that is not deleted, returns 200 with that investor and sends nothing. email over 53 characters returns 422, as does a token outside the platform organisation: validation_failed, detail rule platform_organisation. Emits investor.created and the legacy user.* events. DELETE /investors/{id} undoes it.

Query parameters

  • dry_runboolean#

    Validate and run the call without committing it, returning what the real call would return with meta.dry_run set.

Headers

  • Idempotency-Keystring#

    Makes a retry safe. Send a new UUID for each new request and reuse it only to retry that request; the first response is replayed for 24 hours.

Request body

application/json, required · InvestorCreate

  • emailstring (email)Required#

    The investor's email. At most 53 characters, so the sign-in username with its invite suffix fits 64. A live investor with this email, on any contact email, is returned unchanged with 200.

  • titlestring | null#

    Optional title, such as Mr, Ms or Dr.

  • first_namestringRequired#

    The investor's first name.

  • last_namestringRequired#

    The investor's last name.

  • sso_idstring | null#

    The investor's single sign-on id.

  • external_idstring | null#

    The investor's id in your own system.

  • data_captureobject#

    Answers to your custom user data fields, keyed by field reference. Every reference must exist, else 422 exists.

  • onboarding_uuidstring (uuid)#

    The published onboarding journey the investor follows. Required while the organisation has a published journey, else 422.

  • auto_sendstring#

    Whether to send the invite email: Yes sends it, No never does. Omit to follow the organisation's approval workflow: held when it has one, sent otherwise.

    One of: Yes, No
  • typestring#

    Accepted as investor and ignored. It is removed when the old routes are withdrawn on 2027-06-30.

    One of: investor
{
  "email": "ada.lovelace@example.com",
  "title": "Dr",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "auto_send": "No",
  "external_id": "CRM-1042",
  "data_capture": {
    "phone_number": "+44 20 7946 0000"
  }
}

Responses

200

The email matched a live investor, which is returned unchanged. Nothing was written or sent.

Investor
{
  "data": {
    "id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
    "first_name": "string",
    "last_name": "string",
    "title": "string",
    "email": "string",
    "status": "active",
    "external_id": "string",
    "sso_id": "string",
    "key_contact_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
    "invite": {
      "id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "status": "invited",
      "expires_at": "2026-06-12T10:00:00+00:00"
    },
    "two_factor_enabled": true,
    "last_login": "2026-06-12T10:00:00+00:00",
    "created_at": "2026-06-12T10:00:00+00:00",
    "updated_at": "2026-06-12T10:00:00+00:00",
    "data_capture": {},
    "onboarding": {
      "flow_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "flow_name": "string",
      "status": "pending",
      "completed_at": "2026-06-12T10:00:00+00:00"
    },
    "invites": [
      {
        "id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
        "type": "string",
        "status": "string",
        "email": "string",
        "expires_at": "2026-06-12T10:00:00+00:00",
        "invited_at": "2026-06-12T10:00:00+00:00",
        "created_at": "2026-06-12T10:00:00+00:00"
      }
    ],
    "roles": [
      {
        "id": 1,
        "name": "string",
        "label": "string"
      }
    ]
  }
}
201

The investor was created.

Investor
{
  "data": {
    "id": "6f1c2e8a-1b2c-4d5e-8f90-1a2b3c4d5e6f",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "title": "Dr",
    "email": "ada.lovelace@example.com",
    "status": "pending",
    "external_id": "CRM-1042",
    "sso_id": null,
    "key_contact_id": "1a2b3c4d-5e6f-4708-9a0b-1c2d3e4f5061",
    "invite": null,
    "two_factor_enabled": false,
    "last_login": null,
    "created_at": "2026-06-15T10:30:00Z",
    "updated_at": "2026-06-15T10:30:00Z"
  }
}
401

Authentication failed. error.code is one of invalid_token, expired, revoked.

Error
403

Authorization failed. error.code is one of org_disabled, ip_blocked, missing_scope, scope_disabled, user_disabled.

Error
422

The request can't be processed (HTTP 422): validation_failed with one ErrorDetail per problem, or a code documented on the operation.

Error
429

Rate limit exceeded (error.code = rate_limited).

Error

Examples

curl -X POST https://your-org-domain/kong/core/api/v2/investors\
  -H "Authorization: Bearer $HELM_API_KEY"\
  -H "Content-Type: application/json"\
  -d '{
  "email": "ada.lovelace@example.com",
  "title": "Dr",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "auto_send": "No",
  "external_id": "CRM-1042",
  "data_capture": {
    "phone_number": "+44 20 7946 0000"
  }
}'