# Affiliate Applications

Projects can require potential affiliates to apply before joining their referral program. This gives you control over who promotes your project and lets you vet applicants before granting access.

## How it works

1. **Build an application form** — Use the visual Form Builder to create custom fields (text, email, number, select, and more)
2. **Affiliates apply** — Potential affiliates submit the form with their information
3. **Review applications** — Your team reviews applications in the dashboard and approves, rejects, or puts them on hold
4. **Approved affiliates join an audience** — Approved applicants are added to a specific audience, which can have its own reward tiers and rules

## Form Builder

The Form Builder lets you create and edit your application form visually — no code required. Access it at **Affiliates > Affiliate Application**, then open the Form Builder.

### Supported field types

Text, Email, Textarea, Number, Select, Radio, Checkbox, URL

### What you can configure per field

* Label, placeholder, and description
* Required vs optional
* Options list (for Select and Radio fields)
* Validation rules: minimum/maximum length, min/max value, regex pattern

### Other capabilities

* **Drag & drop reordering** — rearrange fields by dragging them
* **Live preview** — each field shows how it will render for applicants
* **Enable/Disable toggle** — pause the form without deleting it. Disabling shows a confirmation and automatically rejects new submissions while disabled
* **Unsaved changes protection** — warns before navigating away with unsaved edits

{% hint style="info" %}
When no form is configured yet, the Affiliate Applications view shows an empty state with a **Create Form** button to get started.
{% endhint %}

## Application statuses

| Status       | Description                                                                             |
| ------------ | --------------------------------------------------------------------------------------- |
| **Pending**  | Application received, awaiting review                                                   |
| **Approved** | Affiliate accepted — added to a designated audience with access to the referral program |
| **Rejected** | Application declined — a rejection reason can be provided                               |
| **On Hold**  | Application saved for later review                                                      |

{% hint style="info" %}
All status decisions can include **admin notes** for internal record-keeping. Batch operations are available for processing multiple applications at once.
{% endhint %}

## Managing applications

Applications are managed in the dashboard at **Affiliates > Affiliate Application**. The management view includes:

* **Summary cards** — Quick overview of total, pending, approved, rejected, and on-hold applications
* **Applications table** — Dynamic columns based on your form fields, plus address, date, status, and admin notes
* **Search and sort** — Find applications by user identifier, sort by date or status
* **Bulk actions** — Select multiple applications and approve, reject, or hold in batch

## Audience assignment

When approving an affiliate, you select a **static audience** to add them to. This audience determines what reward structure the affiliate receives (tier, multipliers, payout rules).

{% hint style="success" %}
Combine affiliate applications with [Audiences](/developer-guide/managing-audiences.md) to create tiered affiliate programs — different tiers with different commission rates based on applicant quality or performance.
{% endhint %}

## Tier-based Approval

Affiliates are assigned a tier based on performance metrics. Each tier is configured by the project with its own name, rank, and rebate rate. The tier determines the affiliate's rebate rate — it does not control the multilevel referral tree depth.

### Tier Protection

When an affiliate advances tiers, they enter a **protection period** (configurable 1 to 365 days, default: 30). During this window, their tier cannot be downgraded even if metrics drop below the threshold. This prevents affiliates from being penalized for short-term volume fluctuations.

The dashboard exposes this through a `TierProtectionCard` component that shows:

* Current protection status (active/expired)
* Remaining days until protection expires
* The tier they're protected at

### CSV Export

Project admins can export the complete list of affiliates and their applications as a CSV file. The export includes the current tier, protection status, protection days remaining, and current metrics. Use the "Export" button on the Affiliate Management Dashboard.

## API integration

Projects can also accept affiliate applications programmatically through the API — for example, to embed the application form in a custom frontend.

Retrieve the form configuration to render it on your site ([API reference](https://fuul.readme.io/reference/get_v1-projects-projectid-affiliate-application-form-config)):

```typescript
// GET /v1/projects/{projectId}/affiliate-application-form-config
// Returns: form fields with labels, types, validation rules, and ordering
```

Submit an application on behalf of a user ([API reference](https://fuul.readme.io/reference/post_v1-projects-projectid-affiliate-applications)):

```typescript
// POST /v1/projects/{projectId}/affiliate-applications
// Body: { user_identifier, identifier_type, form_responses: { ... } }
```

Retrieve commission rates per tier for display in the application flow ([API reference](https://fuul.readme.io/reference/get_public-api-v1-affiliate-portal-commission-rates)):

```typescript
// GET /public-api/v1/affiliate-portal/commission-rates
// Returns: commission rates grouped by tier, useful for showing potential affiliates what they'd earn
```

{% hint style="info" %}
Both form endpoints are public — no API key required. The submission endpoint is rate-limited to 10 requests per 60 seconds per user identifier.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fuul.xyz/core-concepts/affiliate-applications.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
