---
title: "Redeem Invite"
method: POST
path: "/api/ff/redeem/{code}"
tags: ["friends-and-family"]
---

# Redeem Invite

`POST /api/ff/redeem/{code}`

## Request

- Base URL: `https://api.equity-rank.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.equity-rank.com/api/ff/redeem/{code}`
- Auth: HTTP bearer

Authenticated user: redeem an invite code.

Idempotent in the sense that if the user is already F&F, redemption
still bumps use_count by 1 (an audit trail of who clicked the link).
The Supabase admin API call to set app_metadata is fail-soft — if
the supabase auth call fails, the redemption row is still written
so the owner can manually backfill via /api/admin/users/{id}/role.

## Path parameters

- `code` string, required

## Request body

- RedeemInviteRequest
  - `acknowledgment_displayed` boolean, required: MUST be true when the invite has acknowledgment_required=true. Frontend sets this AFTER displaying the F&F memo and capturing user assent.

## Response `200`

Successful Response

- RedeemInviteResponse
  - `redeemed` boolean, required
  - `invite_id` integer, required
  - `user_id` string, required
  - `next_steps` string

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/equity-rank/apis/equity-rank-api.md) · [All operations](https://skmtc.dev/equity-rank/apis/equity-rank-api/llms.txt) · [OpenAPI document](https://skmtc.dev/equity-rank/apis/equity-rank-api/revisions/c2f2463fee33?raw)
