Fundrise · Arazzo Workflow

Fundrise Connect — onboard a Client and place an Investment

Version 1.0.0

The primary Fundrise Connect flow, modelled from the sequence Fundrise publishes under the "Workflow Example" tag of its own OpenAPI: create a Client, exchange the issued refresh token for a Client access token, resolve an open Offering, fetch and present that Offering's documents and acknowledgments, then place the Investment. Every operationId below exists verbatim in openapi/fundrise-connect-openapi.yml. Run this against the sandbox host (https://sandbox.fundrise.com) — the only server the published spec declares. Fundrise publishes no sandbox test values, so offeringId must be discovered at runtime from GetOfferings rather than seeded from a fixture.

1 workflow 5 source APIs 1 provider
View Spec View on GitHub CompanyFinancial-ServicesInvestingReal-EstatePrivate CreditVenture CapitalAlternative AssetsWealth ManagementFintechEmbedded InvestingArazzoWorkflows

Provider

fundrise

Workflows

onboard-client-and-place-investment
Onboard an end user as a Fundrise Client and place their first investment.
Six steps, two authentication subjects. Steps 1, 2, 3 and 4 use Partner HTTP Basic credentials; steps 5 and 6 use the Client bearer token minted in step 2.
6 steps inputs: address1, address2, amount, assetClass, city, country, dateOfBirth, firstName, investmentReferenceId, lastName, partnerReferenceId, primaryEmail, state, taxId, zip outputs: accountId, clientId, offeringId, transactionId
1
create-client
Onboard the end user. Partner HTTP Basic auth. A 409 means this partnerReferenceId already maps to an existing Client — treat that as a successful no-op and resolve the existing Client rather than retrying with a new key.
2
get-access-token
Exchange the refresh token issued at Client creation for a Client-scoped access token. The refresh token does not expire and must be stored encrypted at rest — never expose it to the Client or a Client device.
3
get-offerings
List offerings available through Connect. Select one whose status is OPEN — CLOSED offerings cannot be invested in. Partner HTTP Basic auth.
4
get-offering-documents
Fetch the documents and disclosures for the selected offering. These must be presented to the Client. Collect every documentId — they are required as acknowledgedDocumentIds on the investment request.
5
get-investment-acknowledgments
Fetch the acknowledgments the Client must digitally accept for this offering. Client bearer auth. Fundrise requires the Partner platform to display a checkbox per acknowledgment and require the user to check it to proceed — an automated pass through this step defeats a securities-law control.
6
place-investment
Place the investment. Client bearer auth. acknowledgedDocumentIds must carry the documentIds the Client actually accepted in the preceding two steps. On a 500, retrying with the same partnerReferenceId is safe because it is the idempotency key for this investment.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Fundrise Connect — onboard a Client and place an Investment
  version: 1.0.0
  description: >-
    The primary Fundrise Connect flow, modelled from the sequence Fundrise publishes under
    the "Workflow Example" tag of its own OpenAPI: create a Client, exchange the issued
    refresh token for a Client access token, resolve an open Offering, fetch and present
    that Offering's documents and acknowledgments, then place the Investment. Every
    operationId below exists verbatim in openapi/fundrise-connect-openapi.yml.

    Run this against the sandbox host (https://sandbox.fundrise.com) — the only server the
    published spec declares. Fundrise publishes no sandbox test values, so offeringId must
    be discovered at runtime from GetOfferings rather than seeded from a fixture.

  x-realizes-capability-ids:
  - BC-1300.10
  x-capability-derivation:
    method: 'deterministic join: sourceDescriptions -> per-tag OpenAPI -> tag/capability edge. No classification at this step.'
    min_confidence: 0.7
    sources:
    - capability_id: BC-1300.10
      capability_name: Customer Onboarding Management
      spec: fundrise-clients-api-openapi.yml
      confidence: 0.75
    model: Turbo EA Capabilities by Vincent Verdet — Turbo EA, https://github.com/vincentmakes/turbo-ea-capabilities, CC BY 4.0
x-generated: '2026-08-04'
x-method: derived
x-source: https://connect.fundrise.com/
x-guardrail: >-
  Steps 4 and 5 exist to put real disclosures in front of a real person. Step 6 moves real
  money into a private-market security. This workflow is not safe to run unattended —
  acknowledgedDocumentIds must reflect a genuine human acceptance, not an automatic one.

sourceDescriptions:
- name: acknowledgmentsApi
  url: ../openapi/fundrise-acknowledgments-api-openapi.yml
  type: openapi
- name: authenticationApi
  url: ../openapi/fundrise-authentication-api-openapi.yml
  type: openapi
- name: clientsApi
  url: ../openapi/fundrise-clients-api-openapi.yml
  type: openapi
- name: investmentsApi
  url: ../openapi/fundrise-investments-api-openapi.yml
  type: openapi
- name: offeringsApi
  url: ../openapi/fundrise-offerings-api-openapi.yml
  type: openapi
workflows:
- workflowId: onboard-client-and-place-investment
  summary: Onboard an end user as a Fundrise Client and place their first investment.
  description: >-
    Six steps, two authentication subjects. Steps 1, 2, 3 and 4 use Partner HTTP Basic
    credentials; steps 5 and 6 use the Client bearer token minted in step 2.
  inputs:
    type: object
    required:
    - partnerReferenceId
    - primaryEmail
    - firstName
    - lastName
    - taxId
    - dateOfBirth
    - amount
    properties:
      partnerReferenceId:
        type: string
        description: >-
          Your own opaque unique id for this person. Doubles as the idempotency key for
          Client creation. Fundrise requires that it contain no PII — do not use an email
          address.
      primaryEmail:
        type: string
      firstName:
        type: string
      lastName:
        type: string
      taxId:
        type: string
        description: The Client's tax identifier. Sensitive — never log this value.
      dateOfBirth:
        type: string
      address1:
        type: string
      address2:
        type: string
      city:
        type: string
      state:
        type: string
      zip:
        type: string
      country:
        type: string
      investmentReferenceId:
        type: string
        description: >-
          A second, distinct idempotency key scoping the investment itself. If omitted,
          reuse of partnerReferenceId is NOT correct — generate a separate value.
      amount:
        type: string
        description: >-
          Investment amount in US dollars, as a string. Must fall between the offering's
          minimumInvestmentAmount and maximumInvestmentAmount, which are enforced per
          transaction.
      assetClass:
        type: string
        description: Optional filter — REAL_ESTATE, PRIVATE_CREDIT or VENTURE.

  steps:

  - stepId: create-client
    description: >-
      Onboard the end user. Partner HTTP Basic auth. A 409 means this partnerReferenceId
      already maps to an existing Client — treat that as a successful no-op and resolve the
      existing Client rather than retrying with a new key.
    operationId: $sourceDescriptions.clientsApi.CreateClient
    requestBody:
      contentType: application/json
      payload:
        partnerReferenceId: $inputs.partnerReferenceId
        primaryEmail: $inputs.primaryEmail
        firstName: $inputs.firstName
        lastName: $inputs.lastName
        taxId: $inputs.taxId
        dateOfBirth: $inputs.dateOfBirth
        primaryAddress:
          address1: $inputs.address1
          address2: $inputs.address2
          city: $inputs.city
          state: $inputs.state
          zip: $inputs.zip
          country: $inputs.country
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      clientId: $response.body#/clientId
      refreshToken: $response.body#/refreshToken
      accountId: $response.body#/accounts/0/accountId

  - stepId: get-access-token
    description: >-
      Exchange the refresh token issued at Client creation for a Client-scoped access
      token. The refresh token does not expire and must be stored encrypted at rest —
      never expose it to the Client or a Client device.
    operationId: $sourceDescriptions.authenticationApi.GetAccessToken
    requestBody:
      contentType: application/json
      payload:
        refreshToken: $steps.create-client.outputs.refreshToken
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      accessToken: $response.body#/accessToken
      expiresIn: $response.body#/expiresIn

  - stepId: get-offerings
    description: >-
      List offerings available through Connect. Select one whose status is OPEN — CLOSED
      offerings cannot be invested in. Partner HTTP Basic auth.
    operationId: $sourceDescriptions.offeringsApi.GetOfferings
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      offeringId: $response.body#/0/offeringId
      offeringName: $response.body#/0/offeringName
      offeringStatus: $response.body#/0/status
      minimumInvestmentAmount: $response.body#/0/minimumInvestmentAmount
      maximumInvestmentAmount: $response.body#/0/maximumInvestmentAmount

  - stepId: get-offering-documents
    description: >-
      Fetch the documents and disclosures for the selected offering. These must be
      presented to the Client. Collect every documentId — they are required as
      acknowledgedDocumentIds on the investment request.
    operationId: $sourceDescriptions.offeringsApi.GetOfferingDocuments
    parameters:
    - name: offeringId
      in: path
      value: $steps.get-offerings.outputs.offeringId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      documentId: $response.body#/0/documentId
      documentUrl: $response.body#/0/documentUrl
      documentType: $response.body#/0/documentType

  - stepId: get-investment-acknowledgments
    description: >-
      Fetch the acknowledgments the Client must digitally accept for this offering. Client
      bearer auth. Fundrise requires the Partner platform to display a checkbox per
      acknowledgment and require the user to check it to proceed — an automated pass
      through this step defeats a securities-law control.
    operationId: $sourceDescriptions.acknowledgmentsApi.GetInvestmentAcknowledgments
    parameters:
    - name: offeringId
      in: path
      value: $steps.get-offerings.outputs.offeringId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      acknowledgmentId: $response.body#/0/acknowledgmentId
      acknowledgmentText: $response.body#/0/acknowledgmentText

  - stepId: place-investment
    description: >-
      Place the investment. Client bearer auth. acknowledgedDocumentIds must carry the
      documentIds the Client actually accepted in the preceding two steps. On a 500,
      retrying with the same partnerReferenceId is safe because it is the idempotency key
      for this investment.
    operationId: $sourceDescriptions.investmentsApi.PlaceInvestment
    parameters:
    - name: accountId
      in: path
      value: $steps.create-client.outputs.accountId
    requestBody:
      contentType: application/json
      payload:
        partnerReferenceId: $inputs.investmentReferenceId
        offeringId: $steps.get-offerings.outputs.offeringId
        amount: $inputs.amount
        acknowledgedDocumentIds:
        - $steps.get-offering-documents.outputs.documentId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      transactionId: $response.body#/transactionId
      status: $response.body#/status

  outputs:
    clientId: $steps.create-client.outputs.clientId
    accountId: $steps.create-client.outputs.accountId
    offeringId: $steps.get-offerings.outputs.offeringId
    transactionId: $steps.place-investment.outputs.transactionId

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/fundrise-onboard-client-and-invest"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.