Skip to main content

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:

ParameterTypeDefaultDescription
statusstringFilter: pending, approved, paid, rejected
campaign_idstringFilter by campaign
start_datestringISO 8601 start date
end_datestringISO 8601 end date
skipint0Number of records to skip (pagination)
limitint50Results 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:

ParameterTypeDescription
start_datedateOptional: start date filter
end_datedateOptional: 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:

ParameterTypeDefaultDescription
periodstringmonthPeriod granularity: day, week, month, year
campaign_idstringOptional: 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:

ParameterTypeDefaultDescription
campaign_idstringFilter by campaign
statusstringFilter by status
start_datedateStart date filter
end_datedateEnd date filter
pageint1Page number
page_sizeint20Results 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:

ParameterTypeDefaultDescription
statusstringFilter: pending, processing, completed, failed
skipint0Number to skip (pagination)
limitint20Results 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:

FieldTypeRequiredDescription
amountnumberYesPayout amount (must be > 0)
payment_method_idstringYesID 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:

FieldTypeRequiredDescription
providerstringYesstripe_connect or paypal_payouts
stripe_account_idstringConditionalRequired if provider is stripe_connect
paypal_emailstringConditionalRequired if provider is paypal_payouts
minimum_payout_amountnumberNoMinimum amount to trigger payout (default 50.00)
payout_frequencystringNodaily, weekly, biweekly, monthly, manual (default monthly)
auto_payout_enabledbooleanNoEnable 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:

FieldTypeRequiredDescription
amountnumberYesPayout amount (decimal)
commission_idsarrayYesList of commission IDs to include
descriptionstringNoPayout 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:

ParameterTypeDefaultDescription
limitint50Results per request (max 100)
offsetint0Pagination offset
statusstringFilter 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

FieldTypeDescription
idstringUnique commission ID
affiliate_idstringAffiliate user ID
campaign_idstringCampaign ID
order_idstringAssociated order/conversion ID
amountnumberCommission amount (decimal)
currencystringISO 4217 currency code
statusstringpending, approved, paid, rejected, cancelled
commission_ratenumberRate applied (percentage or fixed)
sale_amount / order_amountnumberOriginal order value
attributed_click_idstringClick that led to conversion
created_atstringISO 8601 timestamp
approved_atstringWhen commission was approved
paid_atstringWhen commission was paid out
payout_idstringPayout record ID this commission is part of

Payout Object Schema

FieldTypeDescription
idstringUnique payout ID
amountnumberTotal payout amount
fee_amountnumberProcessing fees (if any)
net_amountnumberAmount after fees
currencystringISO 4217 currency code
statusstringpending, in_transit, completed, failed
providerstringstripe_connect or paypal_payouts
payment_methodstringPayment method type
commission_countintNumber of commissions included
requested_atstringWhen payout was requested
completed_atstringWhen payout completed
transaction_idstringProvider's transaction ID
stripe_payout_idstringStripe payout ID (if applicable)
paypal_payout_batch_idstringPayPal batch ID (if applicable)
failure_reasonstringReason for failure (if failed)
can_retrybooleanWhether payout can be retried

Error Handling

The API uses standard HTTP status codes:

  • 200 — Success
  • 201 — Created
  • 400 — Bad request (validation error)
  • 403 — Forbidden (insufficient permissions)
  • 404 — Not found
  • 429 — 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"
}