Developer Knowledgebase

In-depth guides and best practices for every part of the API.

API Keys & Authentication

API keys are generated per member account from the dashboard at /api-keys or via POST /api/v1/members/api-key.

Keys use the format ref_ followed by 48 hex characters (e.g. ref_a1b2c3...).

Include your key in the X-API-Key header on every authenticated request.

You can also exchange email + password for a JWT token via POST /api/v1/auth/token. Tokens expire after 30 days.

Each API key has access to all brands and campaigns owned by that member account.

Brands (Domains)

A brand represents a domain/website you want to run referral campaigns for.

Create a brand with POST /api/v1/brands — just pass your website URL and we auto-extract the domain.

Each brand has its own campaigns, participants, and stats.

You can manage multiple brands under one account — perfect for agencies or multi-site businesses.

Brand stats are available at GET /api/v1/brands/:brandId/stats (total campaigns, participants, shares, clicks, impressions).

Campaigns

Campaigns are referral programs tied to a specific brand.

Set goal_type to "signup" or "visit" to define how rewards are triggered.

num_signups controls how many referrals a participant needs before earning a reward.

Campaigns can be "public" (requires paid plan) or "private".

Each campaign can have its own widget, lander page, reward configuration, and contest.

Reward Types

Type 1 — Coupon: Upload coupon codes to the campaign. When a referral goal is met, the next available coupon is assigned and marked as used.

Type 3 — Custom Message: A free-form message displayed to the participant when their goal is met.

Type 5 — Cash: A dollar value recorded against the participant's reward record.

Type 4 — Crypto Token (legacy): Token transfer via blockchain. Only available for VNOC-linked domains.

Two-way rewards: Enable reward_invited on the campaign to also reward the newly referred user.

Webhooks & Zapier

Register webhook URLs at POST /api/v1/webhooks — we POST a JSON payload when a participant signs up.

Payload includes event type, participant details, campaign ID, and signup timestamp.

For Zapier: use POST /api/v1/zapier/auth to validate your key, and GET /api/v1/zapier/contacts as the polling trigger.

You can scope webhooks to a specific campaign_id, or leave it null for account-wide notifications.

Referral Signup Flow

Basic signup: POST /api/v1/signups — creates a participant record and fires any configured webhook.

Referral signup: POST /api/v1/signups/referral — pass a base64-encoded referral code to track who referred whom and automatically process rewards.

The referral code encodes "campaign_id:social_type:participant_id[:invited_id]".

If a participant was already invited by someone else, the API returns a message instead of overwriting the referral chain.

Widget-based signups at POST /api/widget/signup handle the same flow for embedded widgets.

Lander Pages

Each campaign can have a landing page configuration (campaign_lander) with custom header, footer, background, and fonts.

Retrieve it via GET /api/v1/lander?campaign_id=123 — returns lander settings plus brand info and social URLs.

If no custom lander exists, a default template is returned with the brand's background image.

Lander templates are managed in the dashboard editor.

Response Format & Pagination

All responses return { "success": true/false, "data": ... } or { "success": false, "error": "..." }.

List endpoints support ?page=1&limit=20 (max 100 per page).

Pagination metadata is included: { page, limit, total, totalPages }.

HTTP status codes: 200 (success), 201 (created), 400 (bad request), 401 (unauthorized), 404 (not found), 409 (conflict), 500 (server error).

Can't find what you're looking for?