Docs
Get in touchPartner Portal

Listing deals

GET /v1/deals returns the deals available to your partner account, the global FounderPass catalog plus any live partner-private deals you’ve created, with every partner-level visibility rule applied (global rules, partner/partner-type targeting, channel exclusion, and your per-deal toggles). It is partner-scoped: it does not take an end user, so it never applies per-member region, user-type, or eligibility gates. Those are enforced per member at GET /v1/deals/{id}/instructions (and on the hosted end-user listing).

A simple call

curl "https://perks.founderpass.com/v1/deals?page=1&per_page=20" \
  -H "Authorization: Bearer $TOKEN"

Narrowing the listing

Pass query parameters to narrow the listing.

curl "https://perks.founderpass.com/v1/deals?\
tier=premium&\
category=cloud-infrastructure" \
  -H "Authorization: Bearer $TOKEN"
ParameterTypeNotes
categorystringCategory slug, see GET /v1/categories
tierenumfree or premium, filters by the deal’s tier
page, per_pageintegerStandard pagination (per_page max 100)

There’s no region or user_type parameter: this endpoint is partner-scoped (see above). To narrow by region, read each deal’s available_regions and filter client-side (see the tip below).

Eligibility criteria on each deal

List and detail responses include the deal’s eligibility so you can display requirements or filter on your side:

  • eligibility_requirements, a human-readable string (e.g. “Must be a VC-backed company founded in the last 5 years”). Render it on the deal card or detail page.
  • Structured arrays for programmatic checks, empty means “no constraint on this dimension”:
FieldExample values
eligibility_customer_typenew_customers_only, existing_customers_eligible
eligibility_company_stagepre_seed, seed, series_a_plus, smb, enterprise, any
eligibility_company_size1_10, 11_50, 51_200, 200_plus
eligibility_business_typestartup, agency, ecommerce, saas, creator, local_business, any
eligibility_geographyISO-3166-1 alpha-2 country codes: e.g. US, DE, GB (uppercase). Not AudienceRegion names, those apply only to regions / visibility rules, not to eligibility.
eligibility_incorporationregistered_company_required, sole_traders_allowed
eligibility_fundingvc_backed_only, accelerator_only, student_founders, coworking_members, portfolio_companies_only

These are informational on the Partner API, surface them to set expectations, but the offering partner still performs the actual eligibility check at redemption.

Fetching a single deal

curl "https://perks.founderpass.com/v1/deals/{id}?user_tier=premium" \
  -H "Authorization: Bearer $TOKEN"

Returns the full deal object. Optional user_tier query param enforces tier gating, if the user is free and the deal is premium, you’ll get a 403 with reason: "tier_upgrade_required" and upgrade_required: true.

Getting redemption instructions

When a user clicks “Claim”, fetch their redemption details. As a side effect the endpoint emits a deal.instructions_viewed webhook and records a deal_redeemed analytics event for that user, once per (partner, user, deal), so you don’t track redemptions on the API path yourself. Both side effects are best-effort (a failure never fails the read), and neither fires for a coming_soon deal (that path returns 409 with no redemption assets).

curl "https://perks.founderpass.com/v1/deals/{id}/instructions?user_id={user_uuid}" \
  -H "Authorization: Bearer $TOKEN"

user_id is required as a query parameter, the server checks that user’s tier against the deal’s tier and returns 403 with reason: "tier_upgrade_required" and upgrade_required: true if they don’t qualify.

Response

{
  "instructions": "<ul><li>Visit the URL</li><li>Enter the promo code</li></ul>",
  "promo_code": "FOUNDER20",
  "redeem_url": "https://vendor.com/redeem",
  "contact_email": "support@vendor.com",
  "deal_status": "live"
}

promo_code, redeem_url, and contact_email are omitted when the deal doesn’t set them. deal_status is always present and is always "live" on a 200: a non-live deal never reaches this shape (coming_soon returns the 409 above; every other status 404s).

See the full filter set and response schema in the Deals API Reference.