> ## Documentation Index
> Fetch the complete documentation index at: https://docs.whop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Product Affiliate

A Product Affiliate represents a user's enrollment in a product's affiliate program. An enrollment can exist before the user makes a referral or earns a reward.

Use the Product Affiliates API to list product affiliates for an account, search by affiliate name or username, and narrow the results by product, enrollment status, or signup date.

## Endpoints

| Endpoint | Request |
| - | - |
| [List Product Affiliates](/api-reference/beta/product-affiliates/list-product-affiliates) | <Badge color="blue" size="sm" stroke>GET</Badge> `/product_affiliates` |

## Attributes

<Columns cols={2}>
  <Column>
    <ResponseField name="id" type="string" required>
      Product affiliate ID, prefixed `apaf_`.
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      When the affiliate enrollment was created, as an ISO 8601 timestamp. Includes
      automatically created enrollments.
    </ResponseField>

    <ResponseField name="product" type="object" required>
      The product the affiliate is enrolled to promote.

      <Accordion title="Properties" defaultOpen={true}>
        <ResponseField name="id" type="string" required>
          Product ID, prefixed `prod_`.
        </ResponseField>

        <ResponseField name="title" type="string" required>
          Product display name.
        </ResponseField>
      </Accordion>
    </ResponseField>

    <ResponseField name="referred_users_count" type="integer" required>
      Number of distinct users referred by the affiliate to this product.
    </ResponseField>

    <ResponseField name="status" type="string" required>
      Whether the affiliate's enrollment is active or archived.

      Available options: `active`, `archived`
    </ResponseField>

    <ResponseField name="total_reward_amount_usd" type="object" required>
      Net rewards earned by the affiliate for this product after fees and reversals, in USD.

      <Accordion title="Properties" defaultOpen={true}>
        <ResponseField name="amount" type="string" required>
          The amount in major units, as an exact decimal string — `"10.00"` is ten
          dollars. A string so no float rounds it in transit.
        </ResponseField>

        <ResponseField name="currency" type="string" required>
          Three-letter ISO 4217 currency code, lowercase.
        </ResponseField>

        <ResponseField name="decimals" type="integer" required>
          How many decimal places the amount CARRIES — the precision the charge itself
          runs at.
        </ResponseField>

        <ResponseField name="display_decimals" type="integer" required>
          How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
        </ResponseField>
      </Accordion>
    </ResponseField>

    <ResponseField name="user" type="object" required>
      The user enrolled as an affiliate.

      <Accordion title="Properties" defaultOpen={true}>
        <ResponseField name="id" type="string" required>
          User ID, prefixed `user_`.
        </ResponseField>

        <ResponseField name="email" type="string | null" required>
          The affiliate's email address. Requires the `member:email:read` scope; `null`
          without it.
        </ResponseField>

        <ResponseField name="name" type="string | null" required>
          Display name.
        </ResponseField>

        <ResponseField name="profile_picture" type="object" required>
          Avatar wrapper; its `url` is always present, using a generated placeholder when the user set no picture.

          <Accordion title="Properties" defaultOpen={true}>
            <ResponseField name="url" type="string" required>
              Avatar image URL. Always present — a generated placeholder when the user set no picture.
            </ResponseField>
          </Accordion>
        </ResponseField>

        <ResponseField name="username" type="string" required>
          Public username.
        </ResponseField>
      </Accordion>
    </ResponseField>
  </Column>

  <Column>
    <div className="api-resource-sticky-example">
      ```json ProductAffiliate theme={null}
      {
      	"id": "apaf_xxxxxxxxxxxxxx",
      	"status": "active",
      	"product": {
      		"id": "prod_xxxxxxxxxxxxxx",
      		"title": "Ceramic Coating Package"
      	},
      	"user": {
      		"id": "user_xxxxxxxxxxxxxx",
      		"name": "Dana Whitfield",
      		"username": "danawhitfield",
      		"email": "dana@example.com",
      		"profile_picture": {
      			"url": "https://ui-avatars.com/api/?name=Dana+Whitfield"
      		}
      	},
      	"referred_users_count": 3,
      	"total_reward_amount_usd": {
      		"amount": "147.00",
      		"currency": "usd",
      		"decimals": 2,
      		"display_decimals": 2
      	},
      	"created_at": "2026-08-20T11:00:00.000Z"
      }
      ```
    </div>
  </Column>
</Columns>


## Related topics

- [List Product Affiliates](/api-reference/beta/product-affiliates/list-product-affiliates.md)
- [Overview](/api-reference/beta/overview.md)
- [Affiliates](/developer/guides/affiliates.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.