Complete REST API documentation. All endpoints use JSON and require Bearer token authentication.
/api/v1/campaigns
List Campaigns
Returns all campaigns for the authenticated merchant, with pagination.
Parameters
| page | number | Page number (default: 1) |
| limit | number | Results per page (default: 25, max: 100) |
Example
curl https://linkjolt.io/api/v1/campaigns \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": [
{
"id": "PAbeJtXF39gDMUPYGZqZX",
"name": "Pro Campaign",
"trackingCode": "7PtIfIqd",
"status": "active",
"commissionType": "percentage",
"commissionValue": "20",
"conversions": 47,
"revenue": "12350.00",
"createdAt": "2026-01-15T10:30:00Z"
}
],
"pagination": { "page": 1, "limit": 25, "total": 3, "totalPages": 1 }
}/api/v1/conversions
List Conversions
Returns conversions with optional filters for status, campaign, affiliate, and date range.
Parameters
| status | string | Filter: pending, approved, paid, rejected |
| campaignId | string | Filter by campaign ID |
| affiliateId | string | Filter by affiliate ID |
| from | date | Start date (ISO 8601) |
| to | date | End date (ISO 8601) |
| page | number | Page number |
| limit | number | Results per page |
Example
curl "https://linkjolt.io/api/v1/conversions?status=pending&from=2026-04-01" \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": [
{
"id": "stripe_7PtIfIqd_1234567890",
"campaignId": "PAbeJtXF39gDMUPYGZqZX",
"affiliateId": "lRCbRMSvBcGg4HszLCXLr",
"amount": "100.00",
"commission": "20.00",
"currency": "usd",
"status": "pending",
"conversionType": "one_time",
"createdAt": "2026-04-12T06:58:07Z"
}
],
"pagination": { "page": 1, "limit": 25, "total": 47, "totalPages": 2 }
}/api/v1/conversions
Create Conversion
Manually create a conversion record. Commission is calculated automatically based on campaign settings (including tiered commissions if enabled).
Parameters
| campaignId* | string | Campaign ID |
| affiliateId* | string | Affiliate ID |
| amount* | number | Sale amount in dollars |
| orderId | string | Unique order ID for deduplication |
| clickId | string | LinkJolt click ID (enables fraud detection) |
| customerEmail | string | Customer email (enables self-referral fraud check) |
Example
curl -X POST https://linkjolt.io/api/v1/conversions \
-H "Authorization: Bearer lj_pk_your_key" \
-H "Content-Type: application/json" \
-d '{"campaignId":"abc","affiliateId":"xyz","amount":99}'Response
{
"data": {
"id": "conv_abc123",
"campaignId": "PAbeJtXF39gDMUPYGZqZX",
"affiliateId": "aff_xyz",
"amount": 99.00,
"commission": 19.80,
"currency": "usd",
"status": "pending",
"orderId": "invoice-2026-001",
"conversionType": "one_time",
"isTest": false,
"createdAt": "2026-04-15T10:30:00Z"
}
}/api/v1/me
Verify API Key
Lightweight ping endpoint to verify your API key works. Returns your merchant info, key permissions, plan, and current rate limit status.
Example
curl https://linkjolt.io/api/v1/me \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": {
"merchant": { "id": "m_abc", "businessName": "Acme Inc", "email": "team@acme.com" },
"apiKey": { "id": "k_123", "name": "Production", "permissions": { "read": true, "write": false }, "keyType": "live" },
"plan": "professional",
"rateLimit": { "limit": 60, "remaining": 59, "resetAt": 1713100860 }
}
}/api/v1/stats
Get Stats
Returns aggregate statistics: total revenue, commissions, conversions, and affiliate count for a date range.
Parameters
| from | date | Start date (default: first of current month) |
| to | date | End date (default: now) |
Example
curl "https://linkjolt.io/api/v1/stats?from=2026-04-01" \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": {
"totalRevenue": 12350.00,
"totalCommissions": 2470.00,
"totalConversions": 47,
"totalAffiliates": 12,
"periodStart": "2026-04-01T00:00:00Z",
"periodEnd": "2026-04-13T23:59:59Z"
}
}/api/v1/campaigns/:id
Get Campaign
Fetch a single campaign by ID with full details, affiliate count, and the 10 most recent conversions.
Parameters
| id* | string | Campaign ID (path parameter) |
Example
curl https://linkjolt.io/api/v1/campaigns/CAMPAIGN_ID \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": {
"id": "PAbeJtXF39gDMUPYGZqZX",
"name": "Pro Campaign",
"trackingCode": "7PtIfIqd",
"commissionType": "percentage",
"commissionValue": 20,
"affiliateCount": 12,
"recentConversions": [ /* ... */ ],
"createdAt": "2026-01-15T10:30:00Z"
}
}/api/v1/affiliates
List Affiliates
List affiliates across your campaigns. Filter by campaignId or status. Excludes rejected affiliates.
Parameters
| campaignId | string | Filter by campaign ID |
| status | string | Filter: approved, pending |
| page | number | Page number |
| limit | number | Results per page (max 100) |
| sort | string | e.g. name:asc, joinedAt:desc |
Example
curl "https://linkjolt.io/api/v1/affiliates?status=approved" \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": [
{
"id": "aff_xyz",
"name": "Jane Smith",
"email": "jane@example.com",
"status": "approved",
"campaignId": "camp_abc",
"campaignName": "Pro Campaign",
"joinedAt": "2026-03-10T09:00:00Z"
}
],
"pagination": { "page": 1, "limit": 25, "total": 12, "totalPages": 1 }
}/api/v1/affiliates/:id
Get Affiliate
Fetch a single affiliate with all their campaign associations and aggregated earnings across your campaigns.
Parameters
| id* | string | Affiliate ID (path parameter) |
Example
curl https://linkjolt.io/api/v1/affiliates/AFFILIATE_ID \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": {
"id": "aff_xyz",
"name": "Jane Smith",
"email": "jane@example.com",
"campaigns": [
{ "campaignId": "camp_abc", "campaignName": "Pro", "status": "approved", "joinedAt": "..." }
],
"earnings": {
"totalRevenue": 2350.00,
"totalCommissions": 470.00,
"totalConversions": 12
}
}
}/api/v1/affiliates/invite
Invite Affiliate
Send an email invitation to an affiliate for a specific campaign. Enforces your plan's affiliate limit.
Parameters
| email* | string | Affiliate email address |
| name | string | Affiliate name (optional) |
| campaignId* | string | Campaign to invite them to |
Example
curl https://linkjolt.io/api/v1/affiliates/invite \
-X POST \
-H "Authorization: Bearer lj_pk_your_key" \
-H "Content-Type: application/json" \
-d '{"email":"jane@example.com","campaignId":"camp_abc"}'Response
{
"data": {
"id": "inv_abc",
"email": "jane@example.com",
"name": "Jane Smith",
"campaignId": "camp_abc",
"status": "pending",
"isTest": false,
"createdAt": "2026-04-14T12:00:00Z"
}
}/api/v1/conversions/:id
Update Conversion
Approve or reject a conversion. Cannot change conversions that have already been paid.
Parameters
| id* | string | Conversion ID (path parameter) |
| status* | string | New status: "approved" or "rejected" |
Example
curl https://linkjolt.io/api/v1/conversions/CONVERSION_ID \
-X PATCH \
-H "Authorization: Bearer lj_pk_your_key" \
-H "Content-Type: application/json" \
-d '{"status":"approved"}'Response
{
"data": {
"id": "conv_abc",
"status": "approved",
"amount": 100.00,
"commission": 20.00,
"updatedAt": "2026-04-14T12:00:00Z"
}
}/api/v1/webhooks
Manage Webhooks
Manage outbound webhook subscriptions. GET lists all, POST creates a new one, DELETE deactivates one.
Parameters
| url* | string | (POST) HTTPS URL to deliver events to |
| events* | string[] | (POST) e.g. ["conversion.created","payout.completed"] |
Example
# Create
curl https://linkjolt.io/api/v1/webhooks \
-X POST \
-H "Authorization: Bearer lj_pk_your_key" \
-H "Content-Type: application/json" \
-d '{"url":"https://yourapp.com/hooks","events":["conversion.created"]}'
# List
curl https://linkjolt.io/api/v1/webhooks \
-H "Authorization: Bearer lj_pk_your_key"Response
// POST response — secret shown ONCE
{
"data": {
"id": "wh_abc",
"url": "https://yourapp.com/webhooks/linkjolt",
"events": ["conversion.created", "payout.completed"],
"secret": "hex_32_bytes...",
"active": true,
"createdAt": "..."
}
}/api/v1/webhooks/:id/rotate
Rotate Webhook Secret
Generate a new signing secret for a webhook. Old secret stops working immediately. Returns new secret once.
Parameters
| id* | string | Webhook subscription ID (path parameter) |
Example
curl https://linkjolt.io/api/v1/webhooks/WEBHOOK_ID/rotate \
-X POST \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": {
"id": "wh_abc",
"secret": "new_hex_secret...",
"message": "Secret rotated. Update your webhook verification code with this new secret."
}
}/api/v1/webhooks/:id/test
Test Webhook
Send a signed "ping" event to the webhook URL. Returns the HTTP status and response body so you can verify your endpoint works.
Parameters
| id* | string | Webhook subscription ID (path parameter) |
Example
curl https://linkjolt.io/api/v1/webhooks/WEBHOOK_ID/test \
-X POST \
-H "Authorization: Bearer lj_pk_your_key"Response
{
"data": {
"success": true,
"httpStatus": 200,
"responseBody": "OK",
"url": "https://yourapp.com/webhooks/linkjolt"
}
}Conventions
sort (e.g. ?sort=createdAt:desc) and page/limit.X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-API-Version headers.{ error: { code, message, details? } }Retry-After.