Fundrise Connect (External API) (1.0.0)

Download OpenAPI specification:Download

Fundrise Connect Support Team: connect@fundrise.com

Introduction

Fundrise is a Fintech company democratizing access to alternative assets through technology. This API represents a prototype of Fundrise Connect, which is our external API for providing Client onboarding and investment into our alternative assets. To get started, contact the support team via connect@fundrise.com or view our getting access documentation.

The API is organized around REST. Our API has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.

Throughout this document, the following terminology will be used:

  • Client: This refers to an End-User or customer that a Partner onboards onto Fundrise for investing in Fundrise assets.
  • Partner: This refers to a company working with Fundrise to provide their End-Users or customers access to Fundrise assets.

Errors

Fundrise uses conventional HTTP response codes to indicate the success or failure of an API request. In general:

  • Codes in the 2xx range indicate success.
  • Codes in the 4xx range indicate an error that failed given the information provided (e.g., a required parameter was omitted, a charge failed, etc.).
  • Codes in the 5xx range indicate an error with Fundrise's servers (these are rare).

Some 4xx errors that could be handled programmatically (e.g., an address is invalid) include an error code that briefly explains the error reported. These errors that can be handled programmatically have error codes in the error response. Endpoints that have programmatically resolvable errors have those codes defined in their schema definitions.

Request IDs

Each API request has an associated request identifier. You can find this value in the response headers, under Request-Id. This error will also be present in the error response body under the field referenceId. If you need to contact us about a specific request, providing the request identifier will ensure the fastest possible resolution.

Idempotency

For some POST endpoints, we require a Partner idempotency key to ensure operations are not duplicated. For both Client creation and Investment placement, we require a partnerReferenceId to ensure that Investments and Clients are not duplicated in our system.

Versioning

API endpoints are versioned with path versioning. Each endpoint contains a version path parameter e.g. (/v1/...). To release new functionality without impacting existing customers, we will version endpoints and increment version numbers accordingly.

When endpoints are staged to be deprecated, Partners will be given ample time to integrate with new versions according to our service agreement. Partners should expect to receive communications related to deprecation timelines.

Rate limiting

We enforce rate limiting on our public API to avoid DoS (denial of service) issues. This rate limiting is enforced per Client and per HTTP method. If you are running into rate limiting issues, please contact the support team via connect@fundrise.com.

Authentication

Getting access

To get started, please contact the support team via connect@fundrise.com.

Terminology

  • Client: This refers to an End-User or customer that a Partner onboards onto Fundrise for investing in Fundrise assets.
  • Partner: This refers to a company working with Fundrise to provide their End-Users or customers access to Fundrise assets.

Access issues

To ensure a safe, secure platform, Fundrise imposes strict access controls to all APIs. As such, there may be services or capabilities documented that are inaccessible with current permissions. Contact the support team via connect@fundrise.com to gain permissions for additional endpoints or to receive customized support for specific issues or concerns.

Security Models

Fundrise's API supports two different HTTP security schemes:

  • PartnerBasicAuthentication
  • ClientBearerAuthentication

The appropriate security scheme per endpoint is identified in the documentation. PartnerBasicAuthentication and ClientBearerAuthentication use values that should be treated as sensitive data. Fundrise requires encrypted storage of these values with necessary controls to limit access. All information returned must be treated in full compliance to the end-user agreements.

PartnerBasicAuthentication

Access an endpoint using Partner credentials in HTTP Header.

PartnerBasicAuthentication is enforced by HTTP Basic Authentication. A Partner username and password will be provided by Fundrise support. The Partner password should be stored securely. At a minimum, it should be encrypted at-rest and access restricted to services making requests to the Fundrise API. The Partner password should not be exposed to a Client or any of their devices. If the password is compromised please contact Fundrise support.

ClientBearerAuthentication

Access an endpoint using an OAuth access token associated with a specific Client.

ClientBearerAuthentication is enforced by HTTP Bearer Authentication and requires an OAuth access token. Since access tokens are scoped to specific Clients, they identify and authenticate the Client in a request.

Access tokens can be obtained in Get Access Token requests by using the refresh token flow. OAuth refresh token are issued on Client Creation and scoped specifically to that Client. The refresh tokens will not expire and should be stored securely after Client creation. At a minimum, refresh tokens should be encrypted at-rest and access restricted to services making requests to the Fundrise API. Refresh tokens should not be exposed to a Client or any of their devices.

Get Access Token

This endpoint is an OAuth 2.0 Token Endpoint that supports the refresh token flow to obtain active access tokens, which are needed to access secured endpoints with ClientBearerAuthentication.

Refresh tokens are issued on Client Creation and are scoped to that specific Client. Refresh tokens will not expire and should only be used to obtain new access tokens. Refresh tokens should be stored securely. At a minimum, refresh tokens should be encrypted at-rest and access restricted to services making requests to the Fundrise API. Refresh tokens should not be exposed to a Client or any of their devices.

Access tokens have a limited lifespan, which is indicated in the expiresIn attribute of the response. When an access token expires, obtain a new access token using this endpoint. Access tokens will be scoped to the specific Client that the refresh token was scoped to.

Note, the refresh token will be returned in the response along with the access token. Since refresh tokens will not expire, this should be the same refresh token that was used in the request.

Authorizations:
PartnerBasicAuthentication
Request Body schema: application/json
required
grantType
required
string

OAuth Grant Type must be refresh_token.

refreshToken
required
string

The refresh token value.

Responses

Request samples

Content type
application/json
{
  • "grantType": "refresh_token",
  • "refreshToken": "a1929bbf-acb1-430f-a87f-9b79a8cff1f4"
}

Response samples

Content type
application/json
{
  • "accessToken": "HgHaJimFLx5WbPTWwvrw4ktJApo",
  • "refreshToken": "HnGMTF2gVKQU-7IrCwhlXEEU0EY",
  • "scope": "PARTNER:READ PARTNER:WRITE",
  • "tokenType": "Bearer",
  • "expiresIn": "3598"
}

Offerings

The Offerings API contains information about all Offerings available via Fundrise Connect and documents associated with those offerings. Each Offering has a status indicating whether or not they are available for investment. An OPEN status means the Offering is ready for investment, while the CLOSED status indicates it is unavailable. The response also contains the investment minimums and maximums for the specific fund. Currently open funds have $10 minimums and $100,000 maximums. Both minimum and maximum are enforced per Transaction. The Offering ID is the foreign key referenced in the Place Investment operation to indicate which Offering the user is investing in.

Get Offerings

Returns a list of Fundrise Offerings accessible via this API. This endpoint supports a query parameter to filter Offerings for a specific asset class. Not passing the query parameter will return all available asset classes.

Authorizations:
PartnerBasicAuthentication
query Parameters
assetClass
string (Asset Class type) <= 256 characters
Enum: "REAL_ESTATE" "PRIVATE_CREDIT" "VENTURE"

Enum indicating the underlying asset class that the Offering represents.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

Get Historical Daily NAV

Returns the historical daily net asset values for a Fundrise Offering accessible via this API.

Authorizations:
PartnerBasicAuthentication
path Parameters
offeringId
required
string <int64> (Identifier)

The Offering ID (returned by the Get Offerings operation) associated with the request.

Responses

Response samples

Content type
application/json
{
  • "offeringId": "24",
  • "historicalDailyNav": [
    ]
}

Get Offering Documents

The documents API provides access to Fundrise Offering documentation to place Investments. When a user has selected what Offering they would like to invest in from the GET /v1/offerings endpoint, the documents (typically a SUBSCRIPTION_AGREEMENT and PROSPECTUS or OFFERING_CIRCULAR) need to be displayed to the user before investing into the Offering.

Authorizations:
PartnerBasicAuthentication
path Parameters
offeringId
required
string <int64> (Identifier)

The Offering ID (returned by the Get Offerings operation) associated with the request.

Responses

Response samples

Content type
application/json
[]

Clients

The Clients API provides operations for creating new Clients and updating fields for existing Clients. The Client represents an End-User of the platform. Newly created Clients will have exactly one account with a single accountId. This accountId is used in the Place Investment step of this flow. Currently multiple accounts are not supported in the system, but is on our long term roadmap to build.

Create Client

Creates a Client within the Fundrise application. A refresh token will be returned with this request which is scoped to the newly-created Client. It is important to retain this refresh token as it is required to obtain access tokens via the Get Access Token operation. Access tokens will be required for ClientBearerAuthentication which secures other endpoints. Refresh tokens will not expire and should only be used to obtain new access tokens. Refresh tokens should be stored securely, used only in server-to-server communication, and not exposed to the End-User.

Authorizations:
PartnerBasicAuthentication
Request Body schema: application/json
required
partnerReferenceId
required
string

An idempotency key to ensure duplicate clients are not created in the system for a Partner. This is a unique ID from the Partner used to reference the Client in their system. This should not contain PII.

primaryEmail
required
string <email> <= 150 characters

The Client's primary email address.

firstName
required
string [ 2 .. 150 ] characters

The Client's current first name.

lastName
required
string [ 2 .. 150 ] characters

The Client's current last name.

taxId
required
string

The Client's Social Security Number. This is a 9 digit integer without hyphens.

required
object (AddressRequest)

The Client's primary address.

dateOfBirth
required
string <date> (Date)

The Client's date of birth.

Responses

Request samples

Content type
application/json
{
  • "firstName": "John",
  • "lastName": "Smith",
  • "primaryEmail": "jsmith@fundrise.com",
  • "taxId": "218110123",
  • "dateOfBirth": "1980-01-31",
  • "primaryAddress": {
    },
  • "partnerReferenceId": "1"
}

Response samples

Content type
application/json
{
  • "clientId": "1",
  • "refreshToken": "2b1a7986-a277-41e4-b153-688f84b6edcb",
  • "accounts": [
    ]
}

Get Client

Returns the Client object for the currently authenticated Client.

Authorizations:
ClientBearerAuthentication

Responses

Response samples

Content type
application/json
{
  • "clientId": "1",
  • "primaryEmail": "jsmith@fundrise.com",
  • "firstName": "John",
  • "lastName": "Smith",
  • "taxId": "218110123",
  • "primaryAddress": {
    },
  • "dateOfBirth": "1980-02-24",
  • "accounts": [
    ]
}

Update Client

Update a Client's name, email, and address.

Authorizations:
ClientBearerAuthentication
Request Body schema: application/json
required
primaryEmail
string <email> <= 150 characters

The Client's email address.

firstName
string [ 2 .. 150 ] characters

The Client's current first name.

lastName
string [ 2 .. 150 ] characters

The Client's current last name.

object (AddressRequest)

Client's primary address.

Responses

Request samples

Content type
application/json
Example
{
  • "firstName": "Judith",
  • "lastName": "Jones"
}

Response samples

Content type
application/json
{
  • "clientId": "1",
  • "primaryEmail": "jsmith@fundrise.com",
  • "firstName": "John",
  • "lastName": "Smith",
  • "taxId": "218110123",
  • "primaryAddress": {
    },
  • "dateOfBirth": "1991-05-25",
  • "accounts": [
    ]
}

Acknowledgments

The Acknowledgments API provides acknowledgments needed to place Investments and Liquidations.

Get Liquidation Acknowledgments

The Liquidation acknowledgments API provides access to Fundrise Liquidation acknowledgments required to submit Liquidation requests. The acknowledgments must be displayed to the user and the user must digitally sign the acknowledgments and submit the IDs when liquidating. Digitally signing means the Partner platform must display associated checkboxes for each acknowledgement and require the user to check them to proceed.

Authorizations:
ClientBearerAuthentication
query Parameters
offeringIds
required
Array of strings <int64> (Identifier)

The Offering IDs (returned by the Get Offerings operation) associated with the request.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Get Investment Acknowledgments

This endpoint provides access to Fundrise Offering acknowledgments required to place Investments. When a user has selected what Offering they would like to invest in from the GET /v1/offerings endpoint, the acknowledgments must be displayed to the user and the user must digitally sign the acknowledgments and submit the IDs when investing into the Offering. Digitally signing means the Partner platform must display associated checkboxes for each acknowledgement and require the user to check them to proceed.

Authorizations:
ClientBearerAuthentication
path Parameters
offeringId
required
string <int64> (Identifier)

The Offering ID (returned by the Get Offerings operation) associated with the request.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

Investments

The Investment APIs provide operations for placing and cancelling Investments in various Offerings on behalf of an authenticated Client.

Place Investment

Place an Investment in an Offering on behalf of a Client.

NAV (net asset value, reflected as sharePrice in this response) is typically updated daily for the interval funds (Flagship Real Estate Fund and the Income Real Estate Fund). As such, the sharePrice for Investments in interval funds will not be returned upon Investment placement in such funds via this endpoint.

With this specification, we are assuming that accounts on the Partner platform, at the time of onboarding, have linked & funded a central payment source with the ability to fund Investments placed.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

Request Body schema: application/json
partnerReferenceId
required
string

An idempotency key to ensure duplicate Investments are not created in the system for a Partner. This is a unique ID from the Partner used to reference the Investment in their system.

offeringId
required
string <int64> (Identifier)

The Offering ID

amount
required
string <double>

The amount in USD to be purchased. The maximum decimal places is 2.

acknowledgedDocumentIds
required
Array of strings <int64> (Identifier)

A list of InvestmentAcknowledgment IDs representing signatures of said acknowledgments. Submission of these IDs indicates that the user has both signed and consents to the acknowledgment agreements.

Responses

Request samples

Content type
application/json
{
  • "partnerReferenceId": "2314",
  • "offeringId": "1",
  • "acknowledgedDocumentIds": [
    ],
  • "amount": "24187.50"
}

Response samples

Content type
application/json
{
  • "transactionId": "11",
  • "transactionType": "INVESTMENT",
  • "description": "Investment into Fundrise Offering",
  • "amount": "10000.00",
  • "transactionDate": "2023-02-15T00:00:00.000-05:00",
  • "offerings": [
    ],
  • "status": "PENDING",
  • "isCancellable": true,
  • "debitCreditMemo": "CREDIT"
}

Cancel Investment

Cancel an Investment in an Offering on behalf of the currently authenticated Client.

An Investment may be cancelled up until 5:00pm on the day that the Investment was placed. If the Investment was placed after 5:00pm EST or on a non-business day, it may be cancelled prior to 5:00pm of the next business day.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

transactionId
required
integer <int64>

The ID of the underlying Transaction object. Transactions are differentiated by their transactionType field. The transactionId for a given transactionType may be obtained from the response bodies of either the generic Transactions endpoints, or the respective Investment placement or Liquidations request endpoint called when creating the Transaction.

Responses

Response samples

Content type
application/json
{
  • "transactionId": "11",
  • "transactionType": "INVESTMENT",
  • "description": "Investment into Fundrise Offering",
  • "amount": "10000.00",
  • "transactionDate": "2023-02-15T00:00:00.000-05:00",
  • "offerings": [
    ],
  • "status": "FAILED",
  • "isCancellable": false,
  • "debitCreditMemo": "CREDIT"
}

Liquidations

The Liquidations APIs provide operations for a Client to place a Liquidation request. A Liquidation request results in selling shares in exchange for dollars.

Create Liquidation

Creates a request to liquidate shares.

In order to place a Liquidation request, the holdings in question must be liquidable. The liquidability of Holdings in any given Offering is determined by the shares field on the response from the Get Offering Holdings endpoint. A non zero quantity of shares indicates that the Client holds non reduced shares in the given Offering (indicated by the offeringId) that can be liquidated. Liquidations are reviewed on a quarterly basis. As such, Liquidations submitted in Q1, Q2, Q3, and Q4 will typically be processed in early April, early July, early October, and early January, respectively.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

Request Body schema: application/json
allAcknowledgmentsAccepted
required
boolean

An indication that acknowledgments have been accepted

required
Array of objects (ShareLiquidationOfferingRequest)

A collection of shares being submitted for liquidation.

Responses

Request samples

Content type
application/json
{
  • "allAcknowledgmentsAccepted": true,
  • "offerings": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Cancel Liquidation

Cancels a request to liquidate shares.

In order to cancel a Liquidation Transaction, isCancellable (boolean field), must have a value of true. Liquidations will typically remain cancellable up until the start of the processing period for the respective quarter in which it was placed.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

shareLiquidationRequestId
required
string <int64> (Identifier)

The share liquidation request ID (returned by the Create Liquidation operation) associated with the request.

Responses

Response samples

Content type
application/json
{
  • "transactionId": "1",
  • "transactionType": "LIQUIDATION",
  • "transactionDate": "2023-02-20T00:00:00.000-05:00",
  • "description": "Share liquidation request",
  • "offerings": [
    ],
  • "status": "FAILED",
  • "isCancellable": false,
  • "debitCreditMemo": "DEBIT"
}

Transactions

The Transactions API provides operations for fetching Transactions (individual or bulk) on behalf of authenticated Clients.

Get Transaction

Returns a Transaction by the by transactionId, on behalf of the currently authenticated Client.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

transactionType
required
any (Transaction Type)
Enum: "INVESTMENT" "LIQUIDATION" "DIVIDEND"

The type associated with the Transaction ID.

transactionId
required
integer <int64>

The ID of the underlying Transaction object. Transactions are differentiated by their transactionType field. The transactionId for a given transactionType may be obtained from the response bodies of either the generic Transactions endpoints, or the respective Investment placement or Liquidations request endpoint called when creating the Transaction.

Responses

Response samples

Content type
application/json
Example
{
  • "transactionId": "11",
  • "transactionType": "INVESTMENT",
  • "description": "Investment into Fundrise Offering",
  • "amount": "10000.00",
  • "transactionDate": "2023-02-15T00:00:00.000-05:00",
  • "offerings": [
    ],
  • "status": "PENDING",
  • "isCancellable": true,
  • "debitCreditMemo": "CREDIT"
}

Get Transactions

Returns all Transactions for the supplied accountId on behalf of the currently authenticated Client. Transactions may be filtered on the optional TransactionType query parameter.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

query Parameters
transactionType
any (Transaction Type)
Enum: "INVESTMENT" "LIQUIDATION" "DIVIDEND"

Enum indicating the underlying object type that the Transaction represents.

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

Holdings

The Holdings API contains up-to-date information about the status and performance of a Client's holdings in Fundrise. This endpoint may be used to fetch holding information after a Client's initial Transaction has been completed. The response from this endpoint will update daily with underlying changes in appreciation and accruing dividends.

Get Offering Holdings

Returns a collection containing all of the Client's current holdings within Fundrise. Filter on optional Offering ID to return holding on a specific Offering. The liquidable fields indicates shareholdings that are available for liquidation. This is filterable by the liquidable query parameter.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

query Parameters
offeringId
string <int64> (Identifier)

The Offering ID (returned by the Get Offerings operation) associated with the request.

liquidable
boolean

A filter for requesting only holdings which are eligible for Liquidation.

Responses

Response samples

Content type
application/json
Example
[
  • {
    },
  • {
    },
  • {
    }
]

Tax Forms

The Tax Form API provides operations for fetching tax document information for a given tax year.

Get tax forms

Get the full lists of tax document data available for a specific year for the current authorized Client. The tax document URLs are AWS presigned URLs that are valid for 5 minutes.

Authorizations:
ClientBearerAuthentication
path Parameters
accountId
required
integer <int64>

The account ID (returned by the Create Client operation or the Get Client operation) associated with the request.

query Parameters
taxYear
integer

Tax year in which to search for tax forms.

Responses

Response samples

Content type
application/json
[]

Workflow Example

The following example provides a step-by-step explanation of the sequential calls involved in the process of onboarding a new Client and placing an Investment in an Offering. This example is intended to be a high level overview for illustrative purposes and is subject to modification pending future refinements to this spec.

Create A Client

1. Create Client

Client creation is required to perform any operations on this platform. Clients are created via the Create Client operation.

The operation linked defines a variety of fields that must be passed in order to create a Client. Of particular note is the partnerReferenceId, which should be a unique identifier used within your own application to identify this individual. This partnerReferenceId helps Fundrise to create a unique identifier for this Client that is specific to your institution.

Upon successful creation, a response body will be returned containing a clientId, refreshToken, and a list of accounts, each having a single field: accountId.

Newly created Clients will have exactly one account with a single accountId. This accountId is used in the Place Investment step of this flow. Currently multiple accounts are not supported in the system, but is on our long term roadmap to build.

The refreshToken will be used in the next step of the flow to fetch an access token. You will need to use this value to fetch access tokens, so please store the refresh token securely. Access tokens will be required for all future operations requiring ClientBearerAuthentication as they are used to identify and authenticate a Client in a request.

Obtain An Access Token

2. Get Access Token

The refreshToken returned from the prior step should be passed to the Get Access Token operation to fetch an access token. The access token serves to identify a specific Client and authenticate requests. This access token will need to be passed in the Authentication header of all subsequent requests made in this flow.

Place An Investment

3. Obtain Offering ID

In order to place an Investment an offeringId must be obtained. The Get Offerings operation returns all Offerings eligible for Investment through this API. The id of one of the returned Offerings in the response body will need to be passed to the next operation in the flow.

4. Get Offering Documents

Before an Investment can be placed, it is required to present the Client with all relevant documents and disclosures relevant to the particular Offering. The Get Offering Documents operation takes the Offering id from step #3 as a parameter to determine and return all relevant documents. The IDs of those documents must be passed along in the post body of the Investment placement step as the field acknowledgedDocumentIds .

5. Get Investment Acknowledgments

Before an Investment can be placed, it is required to present the Client with all relevant acknowledgments relevant to the particular Offering. The Get Investment Acknowledgments operation takes the Offering id from step #3 as a parameter to determine and return all relevant acknowledgments. These agreements must be presented to the End-User and digitally signed. Digitally signing means the Partner platform must display associated checkboxes for each acknowledgement and require the user to check them to proceed.

6. Place Investment

Once the Client has been presented with the relevant documents and acknowledgments, an Investment can be placed via the Place Investment operation. This operation takes an accountId (referenced in the the Create Client step) as a request parameter. In addition to this accountId a request body must be sent containing the acknowledgedDocumentIds from Step 4, the previously referenced offeringId and an amount in US Dollars representing the dollar value of shares that will be purchased.