List attributed investments
Changed onReturns a list of attributed investments. The detail level depends on your access:
Tier 1 (Marketing Partners) - Anonymized data:
- Investor identity represented by opaque tokens (not real IDs)
- Tokens are campaign-scoped (different token per campaign for same investor)
- Investment amounts shown as tiers (small/medium/large), not exact values
- No PII (email, name, address) is returned
Tier 2 (Founders/Employees) - Full data with detail_level=full:
- Real investment IDs (linkable to Wefunder admin)
- Investor name, email, and username
- Exact dollar amounts
Access: Requires Tier 1+ access approval from Wefunder admin.
Request
- Base URL: https://api.wefunder.com
- URL: https://api.wefunder.com/campaigns/{campaign_id}/attribution/investments
- Auth: OAuth 2 (authorization code, authorization URL https://wefunder.com/oauth/authorize, token URL https://api.wefunder.com/oauth/token; client credentials, token URL https://api.wefunder.com/oauth/token, scopes: read:attribution:anonymized)
Path parameters
The fundraise/campaign ID
Query parameters
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.
Filter results to attributions on or after this date. Format: YYYY-MM-DD. Defaults to 90 days ago if not specified.
Filter results to attributions on or before this date. Format: YYYY-MM-DD. Defaults to today if not specified.
Filter by UTM source (e.g., "GoogleAds", "facebook", "Klaviyo")
Filter by UTM campaign name
Level of detail to return:
- anonymized (default): Opaque tokens, amount tiers
- full: Real IDs, exact amounts, investor PII (founders only)
Marketing partners always receive anonymized data regardless of this parameter.
Response
Successful response
Example response
{
"data": [
{
"investment_token": "inv_abc123xyz789def456uvw012ghi345",
"investor_token": "usr_def456uvw789abc123xyz012ghi345",
"amount_tier": "medium",
"invested_at": "2025-02-15T14:30:00Z",
"status": {
"bucket": "confirmed",
"progress_bar": true
},
"attribution": {
"utm_source": "GoogleAds",
"utm_campaign": "winter_2025",
"utm_medium": "cpc",
"utm_content": "video_ad_v2",
"clicked_at": "2025-02-15T14:15:00Z",
"time_to_invest_bucket": "direct",
"quality_score": "high"
}
}
],
"meta": {
"page_count": 25,
"has_more": true,
"detail_level": "anonymized"
}
}Changes
- warning
removed the optional property
/////from the response with the status - info
added the optional property
/////to the response with the status
- warning
- breaking
response property
meta/allOf[PaginationMeta]/next_cursorlist-of-types was widened by adding typesstringto media typeapplication/jsonof response200
- breaking