Fundrise · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Fundrise Connect API

12 actions 12 updates update extends openapi/fundrise-connect-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Fundrise's API. It is a proposal applied on top of the contract, not a document Fundrise publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-notex-apievangelist-subjectx-idempotentx-idempotency-fieldx-apievangelist-consequencex-apievangelist-preconditionsx-apievangelist-providerx-apievangelist-api

Targets 11

$.info
$.servers
$.components.schemas.FundriseConnectError
$.components.schemas.Identifier
$.components.securitySchemes.PartnerBasicAuthentication
$.components.securitySchemes.ClientBearerAuthentication
$.paths['/v1/client'].post
$.paths['/v1/account/{accountId}/investment'].post
$.paths['/v1/account/{accountId}/liquidation'].post
$.paths['/v1/account/{accountId}/holdings'].get
$.paths['/v1/account/{accountId}/transactions'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Fundrise Connect API
  version: 1.0.0
extends: openapi/fundrise-connect-openapi.yml
x-generated: '2026-08-04'
x-method: generated
x-source: >-
  Derived from the Fundrise-published OpenAPI 3.1.0 plus the artifacts in this repository.
  This overlay records API Evangelist's enhancements only — it never mutates the harvested
  specification. Every value below is grounded in something Fundrise publishes.
actions:

- target: $.info
  description: Attach API Evangelist provenance and cross-links to the artifacts derived from this spec.
  update:
    x-apievangelist-provider: fundrise
    x-apievangelist-api: fundrise:fundrise-connect
    x-apievangelist-source: https://connect.fundrise.com/
    x-apievangelist-harvested: '2026-08-04'
    x-apievangelist-harvest-note: >-
      The specification is not served at a standalone URL. It is embedded as the
      __redoc_state.spec.data object inside the Redocly documentation bundle at
      https://connect.fundrise.com/ and was extracted verbatim from there.
    x-apievangelist-artifacts:
      authentication: authentication/fundrise-authentication.yml
      scopes: scopes/fundrise-scopes.yml
      conventions: conventions/fundrise-conventions.yml
      errors: errors/fundrise-problem-types.yml
      rate_limits: rate-limits/fundrise-rate-limits.yml
      lifecycle: lifecycle/fundrise-lifecycle.yml
      conformance: conformance/fundrise-conformance.yml
      sandbox: sandbox/fundrise-sandbox.yml
      data_model: data-model/fundrise-data-model.yml
      agentic_access: agentic-access/fundrise-agentic-access.yml
      skills: skills/_index.yml
      arazzo: arazzo/fundrise-onboard-client-and-invest.yml

- target: $.servers
  description: >-
    Record the production host. The published spec declares only the sandbox server, so a
    client generated from it defaults to test mode. The production host is not invented —
    it is the token_endpoint published in Fundrise's own OIDC discovery document.
  update:
    x-apievangelist-production-host: https://api.fundrise.com
    x-apievangelist-production-host-evidence: >-
      token_endpoint of https://fundrise.com/.well-known/openid-configuration (HTTP 200,
      fetched 2026-08-04)
    x-apievangelist-note: >-
      servers[] contains only the Sandbox entry. Adding the production server to the
      published spec would remove a real integration hazard.

- target: $.info
  description: Record the cross-cutting runtime semantics captured in conventions/, as machine-readable extensions.
  update:
    x-idempotency:
      supported: true
      mechanism: request-body-field
      field: partnerReferenceId
      header: null
      operations:
      - CreateClient
      - PlaceInvestment
      conflict_status: 409
    x-request-tracing:
      response_header: Request-Id
      error_body_field: referenceId
    x-versioning:
      scheme: uri-path
      current: v1
    x-rate-limiting:
      enforced: true
      dimensions: [per-Client, per-HTTP-method]
      published_limits: false
      throttle_status_declared: false
    x-pagination:
      supported: false

- target: $.components.schemas.FundriseConnectError
  description: Mark the vendor error envelope and note the deviation from RFC 9457.
  update:
    x-apievangelist-error-envelope: true
    x-apievangelist-rfc9457: false
    x-apievangelist-note: >-
      Served as application/json rather than application/problem+json. referenceId is the
      only required member and is the value to quote to connect@fundrise.com.

- target: $.components.schemas.Identifier
  description: Note that all entity identifiers share one opaque string type.
  update:
    x-apievangelist-note: >-
      Every entity id — clientId, offeringId, transactionId, documentId, acknowledgmentId —
      resolves to this single opaque string schema. There is no typed prefix convention, so
      identifiers are not self-describing and must be tracked with their entity type.

- target: $.components.securitySchemes.PartnerBasicAuthentication
  description: Flag the credential-handling obligations Fundrise states in prose.
  update:
    x-apievangelist-subject: Partner
    x-apievangelist-credential-handling: >-
      Encrypted at rest, access restricted to calling services, never exposed to a Client
      or Client device.

- target: $.components.securitySchemes.ClientBearerAuthentication
  description: Record that this bearer token is OAuth-issued and how it is obtained.
  update:
    x-apievangelist-subject: Client
    x-apievangelist-token-source: POST /v1/oauth/token (GetAccessToken)
    x-apievangelist-grant: refresh_token
    x-apievangelist-refresh-token-expiry: none
    x-apievangelist-note: >-
      Modelled as an http bearer scheme rather than an oauth2 scheme with declared flows,
      so generated clients receive no flow metadata even though a real OAuth exchange
      backs it.

- target: $.paths['/v1/client'].post
  description: Mark the idempotent create and its duplicate signal.
  update:
    x-idempotent: true
    x-idempotency-field: partnerReferenceId
    x-duplicate-status: 409
    x-apievangelist-note: >-
      A 409 means the partnerReferenceId is already known to Fundrise and the Client
      exists. Treat it as a successful no-op — do not retry with a new key.

- target: $.paths['/v1/account/{accountId}/investment'].post
  description: Mark the highest-consequence operation in the API.
  update:
    x-idempotent: true
    x-idempotency-field: partnerReferenceId
    x-apievangelist-consequence: financial
    x-apievangelist-preconditions:
    - GetOfferings
    - GetOfferingDocuments
    - GetInvestmentAcknowledgments
    x-apievangelist-note: >-
      Moves real money into a private-market fund. The Client must first have been shown
      and have digitally accepted the offering's documents and acknowledgments;
      acknowledgedDocumentIds is a required field, so the disclosure step is a contract
      precondition, not a courtesy. amount must fall between the offering's
      minimumInvestmentAmount and maximumInvestmentAmount, enforced per Transaction.

- target: $.paths['/v1/account/{accountId}/liquidation'].post
  description: Mark the liquidation operation as financially consequential.
  update:
    x-apievangelist-consequence: financial
    x-apievangelist-preconditions:
    - GetLiquidationAcknowledgments
    - GetHoldings
    x-apievangelist-note: >-
      Sells shares back for dollars. allAcknowledgmentsAccepted is required. Check
      HoldingResponse.liquidable before offering the action — not every holding can be
      liquidated on demand.

- target: $.paths['/v1/account/{accountId}/holdings'].get
  description: Note the freshness contract and the empty-portfolio response.
  update:
    x-apievangelist-freshness: daily
    x-apievangelist-note: >-
      Values update daily with appreciation and accruing dividends, so responses are not
      real-time. A 204 is returned when the Client has no holdings yet — handle it as an
      empty portfolio, not an error.

- target: $.paths['/v1/account/{accountId}/transactions'].get
  description: Flag the unbounded collection.
  update:
    x-apievangelist-note: >-
      Returns a bare array with no pagination parameters. This is the collection most
      likely to grow without bound over an account's life, and there is no published way
      to page or filter it by date.