Wefunder Explore API
The Explore API from Wefunder — 2 operation(s) for explore.
The Explore API from Wefunder — 2 operation(s) for explore.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.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.curl "https://apis.io/api/v1/apis/wefunder-explore-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Wefunder API v2 Activity Explore API
description: 'OAuth 2.0 API for accessing Wefunder data programmatically.
## Authentication
This API uses OAuth 2.0 for authentication. To get started:
1. Create an OAuth application at `/oauth/applications`
2. Get your Client ID and Client Secret
3. Implement the OAuth 2.0 Authorization Code flow
4. Use the access token to make API requests
## Rate Limits
- Standard API: 1,000 requests/hour per token
- Admin API: 10,000 requests/hour per token
## Base URL
All API requests should be made to: `https://api.wefunder.com/api/v2`
'
version: '2.0'
contact:
name: Wefunder API Support
email: api@wefunder.com
servers:
- url: https://{environment}.wefunder.com/api/v2
variables:
environment:
default: api
enum:
- api
- staging
tags:
- name: Explore
paths:
/explore:
get:
tags:
- Explore
summary: List public offerings
description: 'Returns the offerings shown on wefunder.com/explore — the curated set of companies that
meet Wefunder''s discoverability bar (a soft-confirmed traction threshold plus approval),
**one offering per company**. An "offering" is a fundraise, addressed by its `ofr_`
external id.
This is a public, read-only endpoint backed by the `read:public` scope. It is reachable
with either a server-side (client_credentials) token or a user access token carrying
`read:public`. Private rounds (e.g. Reg D 506(b)) are never listed, and low-traction or
unapproved companies are excluded — exactly as they are on the website.
Order with `sort` (default: most raised); paginate with `cursor`. `meta.total_count` is
the number of offerings across all pages.
Use this endpoint to:
- Discover and monitor active deals
- Build deal aggregators and public listings
'
operationId: listOfferings
security:
- bearerAuth:
- read:public
parameters:
- $ref: '#/components/parameters/cursor'
- name: sort
in: query
description: 'Result ordering:
- `most_raised` (default) — highest amount raised first
- `closing_soon` — soonest funding close first
- `newest` — most recently launched first
- `most_investors` — highest investor count first
'
schema:
type: string
enum:
- most_raised
- closing_soon
- newest
- most_investors
default: most_raised
example: most_raised
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/OfferingListEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/offerings/{external_id}:
get:
tags:
- Explore
summary: Get a public offering
description: 'Retrieves a single public offering by its `ofr_` external id.
A valid id for a non-public offering (e.g. a private Reg D 506(b) round) returns `404` —
having an id does not make an offering publicly resolvable.
'
operationId: getOffering
security:
- bearerAuth:
- read:public
parameters:
- name: external_id
in: path
required: true
description: The offering's `ofr_` external id.
schema:
type: string
example: ofr_yw3OhusvpfJP4Pk3wRYV1F2R
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/OfferingEnvelope'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
components:
schemas:
OfferingListEnvelope:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Offering'
meta:
type: object
properties:
total_count:
type: integer
description: Total number of offerings across all pages.
example: 119
page_count:
type: integer
description: Number of offerings on this page (at most 25).
example: 25
has_more:
type: boolean
example: true
sort:
type: string
description: The sort applied to this response.
example: most_raised
next_cursor:
type:
- integer
- 'null'
description: Opaque pagination cursor — pass as `cursor` to fetch the next page. Present only when `has_more` is true.
example: 25
OfferingEnvelope:
type: object
properties:
data:
$ref: '#/components/schemas/Offering'
Offering:
type: object
description: 'A public offering (a fundraise), addressed by its `ofr_` external id. Returned by the
Explore endpoints. Monetary fields are USD decimal strings — parse them as decimals, not
floats.
'
properties:
id:
type: string
description: The offering's stable external id.
example: ofr_yw3OhusvpfJP4Pk3wRYV1F2R
type:
type: string
example: offering
attributes:
type: object
properties:
company_name:
type: string
example: ZeroBorder Self-Banking Centers
tagline:
type:
- string
- 'null'
example: Example tagline
url:
type: string
description: The company's Wefunder profile URL.
example: https://wefunder.com/zeroborder
card_image_url:
type:
- string
- 'null'
description: Absolute URL of the explore card image, or null if the company has none.
example: https://uploads.wefunder.com/uploads/company/custom_card_photo/189517/large_card.jpg
logo_url:
type:
- string
- 'null'
description: Absolute URL of the company logo, or null if the company has none.
example: https://uploads.wefunder.com/uploads/company/logo/189517/large_logo.png
exemption:
$ref: '#/components/schemas/Exemption'
security_type:
type: string
description: The financial instrument (e.g. safe, convertible_note, equity, priced_round, fund).
example: safe
state:
type: string
example: open
testing_the_waters:
type: boolean
description: 'True for Testing-the-Waters rounds, which collect non-binding **reservations**, not
investments. Use "reserve"/"reservation" copy for these, "invest"/"investment" otherwise.
'
example: false
funding_target:
type:
- string
- 'null'
description: Funding target in USD, as a decimal string.
example: '1000000'
min_investment:
type:
- string
- 'null'
description: Minimum investment in USD, as a decimal string.
example: '100'
amount_raised:
type:
- string
- 'null'
description: Amount raised so far in USD, as a decimal string (hellbanned investors excluded).
example: '642300'
investor_count:
type:
- integer
- 'null'
description: Distinct investor count (hellbanned investors excluded).
example: 1203
started_at:
type:
- string
- 'null'
format: date-time
example: '2025-03-01T12:00:00Z'
closed_at:
type:
- string
- 'null'
format: date-time
example: '2025-03-01T12:00:00Z'
company:
type: object
description: Reference to the parent company.
properties:
id:
type: string
description: The company's `co_` external id.
example: co_8Kd0aB3xQ9k2vF8mNp1zT5wY
type:
type: string
example: company
etag:
type: string
description: 'Content digest of this offering''s public payload, for client-side change detection
when polling.
'
example: a1b2c3d4e5f6
Error:
type: object
properties:
error:
type: object
properties:
type:
type: string
example: unauthorized
message:
type: string
example: Invalid or expired token
details:
type: object
additionalProperties: true
request_id:
type: string
description: Unique identifier for this request. Quote it in support tickets.
example: req_abc123
remediation:
type: string
description: When present, a hint on how to resolve the error.
example: Obtain a new access token using the OAuth 2.0 flow.
Exemption:
type: object
description: The offering's SEC exemption, in market vocabulary.
properties:
family:
type: string
enum:
- reg_cf
- reg_d
- reg_a
- reg_s
- ecsp
example: reg_cf
subtype:
type:
- string
- 'null'
description: Sub-type/flavor — `506b` or `506c` for the `reg_d` family, otherwise null.
example: null
label:
type: string
description: Human-readable label in normal market language.
example: Reg CF
responses:
NotFound:
description: The requested resource does not exist or is not visible to this token.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
RateLimitExceeded:
description: 'Too many requests in a short time period. The API enforces rate limits to ensure
fair usage and system stability. When you exceed the limit, you''ll receive this
error along with headers indicating when you can retry.
Check the `X-RateLimit-Reset` header to know when your limit will reset.
Consider implementing exponential backoff in your application.
'
headers:
X-RateLimit-Limit:
schema:
type: integer
description: Request limit per hour
X-RateLimit-Remaining:
schema:
type: integer
description: Remaining requests
X-RateLimit-Reset:
schema:
type: integer
description: UTC timestamp when the limit resets
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: 'Authentication required or token is invalid/expired. This error occurs when:
- No Authorization header is provided
- The access token is invalid or malformed
- The access token has expired
- The access token has been revoked
To resolve: Obtain a new access token using the OAuth 2.0 flow.
'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
parameters:
cursor:
name: cursor
in: query
description: 'Cursor-based pagination token. Use the `next_cursor` value from the previous response''s
`meta` object to retrieve the next page of results. Omit this parameter to retrieve the
first page.
'
schema:
type: integer
example: 12345
securitySchemes:
bearerAuth:
type: oauth2
description: OAuth 2.0 authorization with access tokens
flows:
authorizationCode:
authorizationUrl: https://wefunder.com/oauth/authorize
tokenUrl: https://wefunder.com/oauth/token
scopes:
read:public: Read public deal data (explore offerings); requires no user context
read:profile: Read user profile information
read:investments: Read user investment data
read:campaigns: Read campaign information for companies you founded
read:attribution:aggregate: Read aggregate attribution statistics (Tier 0)
read:attribution:anonymized: Read anonymized attribution data (Tier 1 - requires approval)
read:attribution:full: Read full attribution data with investor PII (Tier 2 - founders only)
admin:attribution: Administrative access to attribution system (Tier 3 - Wefunder admins only)
read:syndicates: View syndicates, members, deals, and portfolio
write:syndicates: Manage members, update settings, operate on deals
read:spvs: View partner SPVs, their invites, sessions, and investments
write:spvs: Create and manage partner SPVs, invites, and investment sessions
read:webhooks: View webhook subscriptions
write:webhooks: Create, update, and delete webhook subscriptions
clientCredentials:
tokenUrl: https://wefunder.com/oauth/token
scopes:
read:public: Read public deal data. The only scope a server-side (client_credentials) key may hold — it acts as the app, with no user, so it can never read user-scoped data.