Commissions & Payouts API
Track affiliate commissions, manage payouts, and view earnings. The API requires authentication via JWT token.
Affiliate Commissions & Earnings
Get Commissions
curl https://api.affilync.com/api/affiliate/commissions \
-H "Authorization: Bearer YOUR_TOKEN"
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
status | string | — | Filter: pending, approved, paid, rejected |
campaign_id | string | — | Filter by campaign |
start_date | string | — | ISO 8601 start date |
end_date | string | — | ISO 8601 end date |
skip | int | 0 | Number of records to skip (pagination) |
limit | int | 50 | Results per request (max 100) |
Response (200):
[
{
"id": "comm_abc123",
"campaign_id": "camp_abc123",
"campaign_name": "Summer Campaign",
"brand_name": "Acme Inc",
"amount": 25.00,
"status": "approved",
"commission_rate": 10.00,
"sale_amount": 250.00,
"order_id": "ord_456",
"created_at": "2026-03-20T14:30:00Z",
"approved_at": "2026-03-21T10:00:00Z",
"paid_at": null,
"payout_id": null
}
]
Get Earnings Summary
curl https://api.affilync.com/api/affiliate/earnings/simple \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"total_earnings": 3247.50,
"paid_earnings": 2797.50,
"pending_earnings": 450.00,
"available_for_payout": 2797.50,
"this_month": 890.00,
"last_month": 1120.00,
"lifetime_average_monthly": 405.94,
"currency": "USD"
}
Get Commission Summary
curl https://api.affilync.com/api/commissions/summary \
-H "Authorization: Bearer YOUR_TOKEN"
Query Parameters:
| Parameter | Type | Description |
|---|---|---|
start_date | date | Optional: start date filter |
end_date | date | Optional: end date filter |
Response (200):
{
"total_earnings": 3247.50,
"pending_commission": 450.00,
"available_balance": 2797.50,
"total_paid": 2797.50,
"total_conversions": 156,
"pending_conversions": 12,
"total_revenue_generated": 32475.00,
"period": {
"start_date": "2026-01-01",
"end_date": "2026-06-06"
}
}
Get Commission Breakdown
curl "https://api.affilync.com/api/commissions/breakdown?period=month" \
-H "Authorization: Bearer YOUR_TOKEN"
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
period | string | month | Period granularity: day, week, month, year |
campaign_id | string | — | Optional: filter by campaign |
Response (200):
{
"period_type": "month",
"breakdown": [
{
"period": "2026-06-01T00:00:00Z",
"conversions": 15,
"revenue": 1500.00,
"commission": 150.00
},
{
"period": "2026-05-01T00:00:00Z",
"conversions": 22,
"revenue": 2200.00,
"commission": 220.00
}
],
"campaign_id": null
}
Get Conversions List
curl "https://api.affilync.com/api/commissions/conversions?page=1&page_size=20" \
-H "Authorization: Bearer YOUR_TOKEN"
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
campaign_id | string | — | Filter by campaign |
status | string | — | Filter by status |
start_date | date | — | Start date filter |
end_date | date | — | End date filter |
page | int | 1 | Page number |
page_size | int | 20 | Results per page (max 100) |
Response (200):
{
"conversions": [
{
"id": "conv_123",
"order_id": "ord_456",
"order_value": 250.00,
"commission_amount": 25.00,
"commission_rate": 10.00,
"commission_type": "percentage",
"status": "approved",
"conversion_timestamp": "2026-03-20T14:30:00Z",
"campaign_id": "camp_abc123",
"product_name": "Premium Package",
"customer_id": "cust_789",
"is_new_customer": true
}
],
"total": 156,
"page": 1,
"page_size": 20,
"total_pages": 8
}
Get Conversion Details
curl https://api.affilync.com/api/commissions/conversions/conv_123 \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"id": "conv_123",
"order_id": "ord_456",
"order_value": 250.00,
"commission_amount": 25.00,
"commission_rate": 10.00,
"commission_type": "percentage",
"status": "approved",
"conversion_timestamp": "2026-03-20T14:30:00Z",
"campaign_id": "camp_abc123",
"product_name": "Premium Package",
"product_category": "Digital Products",
"quantity": 1,
"customer_id": "cust_789",
"is_new_customer": true,
"rejection_reason": null,
"metadata": {}
}
Get Pending Commissions
curl https://api.affilync.com/api/commissions/pending \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"pending_conversions": [
{
"id": "conv_001",
"order_id": "ord_100",
"commission_amount": 50.00,
"conversion_date": "2026-03-19T10:00:00Z",
"campaign_id": "camp_abc123"
}
],
"total_pending": 450.00,
"unpaid_approved_commissions": [
{
"campaign_id": "camp_abc123",
"conversion_count": 12,
"commission_amount": 300.00
}
],
"total_unpaid_approved": 300.00,
"next_payout_date": null
}
Get Payment History
curl "https://api.affilync.com/api/commissions/payment-history?page=1&page_size=20" \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"payments": [
{
"id": "pay_abc123",
"amount": 500.00,
"net_amount": 500.00,
"currency": "USD",
"status": "completed",
"payment_method_type": "stripe_connect",
"transaction_id": "txn_stripe_abc",
"period_start": "2026-03-01",
"period_end": "2026-03-31",
"created_at": "2026-03-31T23:59:00Z",
"completed_at": "2026-04-02T14:20:00Z",
"invoice_url": "https://invoices.affilync.com/inv_123"
}
],
"total": 8,
"page": 1,
"page_size": 20,
"total_pages": 1
}
Affiliate Payouts
List Payouts
curl https://api.affilync.com/api/affiliate/payouts \
-H "Authorization: Bearer YOUR_TOKEN"
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
status | string | — | Filter: pending, processing, completed, failed |
skip | int | 0 | Number to skip (pagination) |
limit | int | 20 | Results per request (max 100) |
Response (200):
[
{
"id": "pay_abc123",
"amount": 500.00,
"status": "completed",
"payment_method": "stripe_connect",
"payment_details": {},
"requested_at": "2026-03-15T00:00:00Z",
"processed_at": "2026-03-16T14:20:00Z",
"completed_at": "2026-03-17T14:20:00Z",
"commission_count": 12,
"reference_number": "ref_12345"
}
]
Request Payout
curl -X POST https://api.affilync.com/api/affiliate/payouts/request \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": "500.00",
"payment_method_id": "pm_abc123"
}'
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Payout amount (must be > 0) |
payment_method_id | string | Yes | ID of verified payment method |
Requirements:
- Minimum payout: $50.00 USD
- Payment method must be verified
- Only approved commissions can be paid out
- Rate limited: 5 requests per hour
Response (200):
{
"success": true,
"message": "Payout request submitted successfully",
"payout_id": "pay_new123",
"amount": 500.00,
"status": "pending",
"reference_number": "ref_54321"
}
Get Payout Summary
curl https://api.affilync.com/api/affiliate/payouts/summary \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"next_payout_date": "2026-06-15T00:00:00Z",
"minimum_payout_amount": 50.0,
"available_balance": 2797.50,
"pending_payouts": 500.00,
"lifetime_payouts": 5000.00,
"last_payout": {
"id": "pay_xyz789",
"amount": 1000.00,
"status": "completed",
"payment_method": "stripe_connect",
"requested_at": "2026-05-15T00:00:00Z",
"completed_at": "2026-05-17T14:20:00Z",
"reference_number": "ref_99999"
}
}
Commission Tiers
Multi-tier commission structures allow brands to reward top performers with higher rates based on conversion volume and revenue.
List Commission Tiers
curl https://api.affilync.com/api/commission-tiers \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
[
{
"id": "tier_bronze123",
"name": "Bronze",
"description": "Entry-level performers",
"tier_level": 1,
"base_commission_rate": 5.00,
"effective_commission_rate": 5.00,
"min_conversions": 0,
"min_revenue": 0.00,
"benefits": {
"early_payout": false,
"priority_support": false,
"exclusive_campaigns": false,
"higher_commissions": false
},
"is_active": true,
"created_at": "2026-01-01T00:00:00Z"
},
{
"id": "tier_silver456",
"name": "Silver",
"description": "Consistent performers",
"tier_level": 2,
"base_commission_rate": 7.50,
"effective_commission_rate": 7.50,
"min_conversions": 10,
"min_revenue": 1000.00,
"benefits": {
"early_payout": true,
"priority_support": true,
"exclusive_campaigns": false,
"higher_commissions": true
},
"is_active": true,
"created_at": "2026-01-01T00:00:00Z"
},
{
"id": "tier_gold789",
"name": "Gold",
"description": "Top performers",
"tier_level": 3,
"base_commission_rate": 10.00,
"effective_commission_rate": 10.00,
"min_conversions": 25,
"min_revenue": 5000.00,
"benefits": {
"early_payout": true,
"priority_support": true,
"exclusive_campaigns": true,
"higher_commissions": true,
"dedicated_manager": true
},
"is_active": true,
"created_at": "2026-01-01T00:00:00Z"
}
]
Payout Accounts
Create Payout Account
curl -X POST https://api.affilync.com/api/payouts/accounts \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"provider": "stripe_connect",
"stripe_account_id": "acct_1234567890",
"minimum_payout_amount": 50.00,
"payout_frequency": "monthly",
"auto_payout_enabled": true
}'
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | Yes | stripe_connect or paypal_payouts |
stripe_account_id | string | Conditional | Required if provider is stripe_connect |
paypal_email | string | Conditional | Required if provider is paypal_payouts |
minimum_payout_amount | number | No | Minimum amount to trigger payout (default 50.00) |
payout_frequency | string | No | daily, weekly, biweekly, monthly, manual (default monthly) |
auto_payout_enabled | boolean | No | Enable automatic payouts (default true) |
Response (201):
{
"success": true,
"account": {
"id": "acc_stripe123",
"provider": "stripe_connect",
"stripe_account_id": "acct_1234567890",
"paypal_email": null,
"minimum_payout_amount": 50.00,
"payout_frequency": "monthly",
"auto_payout_enabled": true,
"is_verified": false,
"can_receive_payouts": false
}
}
List Payout Accounts
curl https://api.affilync.com/api/payouts/accounts \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"success": true,
"accounts": [
{
"id": "acc_stripe123",
"provider": "stripe_connect",
"stripe_account_id": "acct_1234567890",
"minimum_payout_amount": 50.00,
"payout_frequency": "monthly",
"auto_payout_enabled": true,
"is_verified": true,
"is_active": true,
"can_receive_payouts": true
}
]
}
Update Payout Account
curl -X PUT https://api.affilync.com/api/payouts/accounts/acc_stripe123 \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"minimum_payout_amount": 100.00,
"payout_frequency": "biweekly",
"auto_payout_enabled": true
}'
Manual Payouts
Create Manual Payout
curl -X POST https://api.affilync.com/api/payouts/create \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": "500.00",
"commission_ids": ["comm_1", "comm_2"],
"description": "Monthly payout"
}'
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Payout amount (decimal) |
commission_ids | array | Yes | List of commission IDs to include |
description | string | No | Payout description |
Security Features:
- Rate limited: 5 requests per user per hour, 20 per IP per hour
- Fraud detection: velocity checks, amount anomaly detection, payment method change monitoring
- SERIALIZABLE transaction isolation prevents double-spend
Response (201):
{
"success": true,
"payout": {
"id": "pay_manual123",
"amount": 500.00,
"status": "in_transit",
"provider": "stripe_connect",
"created_at": "2026-06-06T10:30:00Z"
}
}
List All Payouts
curl "https://api.affilync.com/api/payouts/list?limit=50&offset=0" \
-H "Authorization: Bearer YOUR_TOKEN"
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | int | 50 | Results per request (max 100) |
offset | int | 0 | Pagination offset |
status | string | — | Filter by status: pending, in_transit, completed, failed |
Response (200):
{
"success": true,
"payouts": [
{
"id": "pay_123",
"amount": 500.00,
"fee_amount": null,
"net_amount": 500.00,
"status": "completed",
"provider": "stripe_connect",
"created_at": "2026-06-06T10:30:00Z",
"arrived_at": "2026-06-08T14:20:00Z"
}
],
"total": 8,
"limit": 50,
"offset": 0
}
Get Payout Details
curl https://api.affilync.com/api/payouts/pay_123 \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"success": true,
"payout": {
"id": "pay_123",
"amount": 500.00,
"fee_amount": null,
"net_amount": 500.00,
"status": "completed",
"provider": "stripe_connect",
"stripe_payout_id": "po_stripe123",
"paypal_payout_batch_id": null,
"paypal_payout_item_id": null,
"description": "Monthly payout",
"period_start": "2026-06-01",
"period_end": "2026-06-30",
"commission_ids": ["comm_1", "comm_2"],
"created_at": "2026-06-06T10:30:00Z",
"arrived_at": "2026-06-08T14:20:00Z",
"failure_reason": null,
"can_retry": false
}
}
Retry Failed Payout
curl -X POST https://api.affilync.com/api/payouts/pay_failed123/retry \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"success": true,
"payout": {
"id": "pay_failed123",
"status": "in_transit",
"retry_count": 1
}
}
Payout Balance
Get Current Balance
curl https://api.affilync.com/api/payouts/balance/current \
-H "Authorization: Bearer YOUR_TOKEN"
Response (200):
{
"success": true,
"balance": {
"user_id": "usr_affiliate123",
"available_balance": 2797.50,
"pending_balance": 500.00,
"total_paid_out": 5000.00,
"currency": "USD",
"last_updated": "2026-06-06T10:30:00Z"
}
}
Commission Object Schema
| Field | Type | Description |
|---|---|---|
id | string | Unique commission ID |
affiliate_id | string | Affiliate user ID |
campaign_id | string | Campaign ID |
order_id | string | Associated order/conversion ID |
amount | number | Commission amount (decimal) |
currency | string | ISO 4217 currency code |
status | string | pending, approved, paid, rejected, cancelled |
commission_rate | number | Rate applied (percentage or fixed) |
sale_amount / order_amount | number | Original order value |
attributed_click_id | string | Click that led to conversion |
created_at | string | ISO 8601 timestamp |
approved_at | string | When commission was approved |
paid_at | string | When commission was paid out |
payout_id | string | Payout record ID this commission is part of |
Payout Object Schema
| Field | Type | Description |
|---|---|---|
id | string | Unique payout ID |
amount | number | Total payout amount |
fee_amount | number | Processing fees (if any) |
net_amount | number | Amount after fees |
currency | string | ISO 4217 currency code |
status | string | pending, in_transit, completed, failed |
provider | string | stripe_connect or paypal_payouts |
payment_method | string | Payment method type |
commission_count | int | Number of commissions included |
requested_at | string | When payout was requested |
completed_at | string | When payout completed |
transaction_id | string | Provider's transaction ID |
stripe_payout_id | string | Stripe payout ID (if applicable) |
paypal_payout_batch_id | string | PayPal batch ID (if applicable) |
failure_reason | string | Reason for failure (if failed) |
can_retry | boolean | Whether payout can be retried |
Error Handling
The API uses standard HTTP status codes:
200— Success201— Created400— Bad request (validation error)403— Forbidden (insufficient permissions)404— Not found429— Rate limit exceeded (Retry-After header provided)500— Server error
Example Error Response:
{
"error": "invalid_request",
"message": "Minimum payout amount is $50",
"detail": "Payout amount must be at least $50.00 USD"
}