KOL Application
Apply to Become KOL
Submit an application to become a KOL. The caller must not already be a broker and must have no existing referral relation.
If applying as a sub-KOL under an existing KOL, include the parent's sub_kol-type invite code. On approval, the sub-KOL's rebate_rate is set from that code's sub_kol_rebate_rate.
POST /api/v1/broker/apply
Authorization: Bearer <wallet_jwt>
Content-Type: application/json
Request Body
{
"role": "kol",
"channels": ["Twitter", "Telegram"],
"social_link": "https://twitter.com/alice",
"follower_scale": "10k-50k",
"expected_volume": "500k USDT/month",
"contact": "@alice_tg",
"note": "I run a crypto signals channel.",
"sub_kol_code": "SUBKOL42"
}
| Field | Type | Required | Description |
|---|---|---|---|
role | string | No | Self-described role |
channels | string[] | No | Marketing channels used |
social_link | string | No | Primary social profile URL |
follower_scale | string | No | Follower count range |
expected_volume | string | No | Expected monthly trading volume |
contact | string | No | Contact info |
note | string | No | Free-text notes for the reviewer |
sub_kol_code | string | No | A sub_kol-type invite code to apply under a parent KOL. If omitted the application is for a top-level KOL. |
Response
{
"application_id": "550e8400-e29b-41d4-a716-446655440000",
"status": "pending",
"wallet_address": "0xabc..."
}
| Field | Type | Description |
|---|---|---|
application_id | string (UUID) | Application ID to track status |
status | string | Always "pending" on creation |
wallet_address | string | Caller's wallet (lowercase) |
Errors
| HTTP | Description |
|---|---|
| 400 | Caller is already a broker |
| 400 | Caller already has a pending application |
| 400 | Caller already has an invite relation (mutual exclusivity) |
| 400 | Provided sub_kol_code is a direct type — use POST /api/v1/broker/invite-bind instead |
| 404 | sub_kol_code not found or inactive |
| 404 | Code's owner broker not found or inactive |
Application Review
After submission, an Admin reviews the application:
- Approve:
POST /api/v1/broker/admin/application/:id/approve— creates the broker record and sets theirrebate_rate. - Reject:
POST /api/v1/broker/admin/application/:id/reject— marks status as"rejected".