ComusThumbz Documentation
Admin Login

ComusThumbz REST API

External API Integration Guide

Version: 1.0.0
Created: 2026-02-03


Overview

The ComusThumbz Webcam Performer system aggregates live cam performers from up to 11 external platforms into a unified browsing experience. Performers are synced via cron jobs, stored in tblCamsPerformers (~400K+ records), and served through the internal REST API at /ct/api/v1/cams.

The system has two layers:

  1. External API - The CrakRevenue Performers Ext API (performersext-api.pcvdaa.com) provides performer data from platforms like Streamate, Chaturbate, Stripchat, etc.
  2. Internal API - ComusThumbz's own REST API (/ct/api/v1/cams/) serves normalized performer data to the frontend with caching and filtering.
Note: The external API requires credentials (API key + token) provided by CrakRevenue's support team. These are configured per-site in the admin panel.

 

System Architecture

External Cam Platforms (Chaturbate, Streamate, Stripchat, etc.)
        |
        v
CrakRevenue Performers Ext API (performersext-api.pcvdaa.com)
        |
        v
Cron: cronupdatecams.php (every 5-10 min)
        |
        v
Site-Specific Handlers (ct/admin/apis/cams.php)
        |
        v
tblCamsPerformers (normalize & store ~400K records)
        |
        v
Cron: updatecamperformerstats.php (every 1-5 min)
        |
        v
tblCamsPerformersStatsCache (pre-calculated counts)
        |
        v
Internal REST API: WebcamController (/ct/api/v1/cams/)
        |     |-- APCu cache (30s TTL)
        |     |-- Stats cache for COUNT queries
        |     |-- Fast mode (skip COUNT entirely)
        v
Frontend Pages (camperformers.php, camperformer.php, camfilter.php)
        |
        v
User clicks performer -> click.php (skim tracking) -> External chat room

External API: Performers Ext

The CrakRevenue Performers Ext API is the primary data source for cam performer data.

Base URL: https://performersext-api.pcvdaa.com/performers-ext

Method: GET /performers-ext

Authentication

Three authentication elements are required for every request:

Credential Type Description
x-api-key HTTP Header API key provided by CrakRevenue support
token Query Parameter Authentication token provided by CrakRevenue support
User-Agent HTTP Header Must be present (requests without User-Agent receive 403)
Warning: Both the API key and token are domain-bound. They are issued for specific authorized websites only. Tokens cannot be reused or transferred to other websites without prior written consent from CrakRevenue.

Example Request:

curl --location 'https://performersext-api.pcvdaa.com/performers-ext/?token=<YOURTOKEN>&gender=f&live=true&page=1&size=10' \
--header 'x-api-key: <YOURAPIKEY>' \
--header 'User-Agent: ComusThumbz/1.0'

Query Parameters

Parameter Type Required Description Default
token string Yes Authentication token -
brands string No Comma-separated brand list (e.g., "streamate,chaturbate") All brands available to your token
page number No Page number (must be >= 1) 1
size number No Items per page (1-100, values >100 capped at 100) 1
sorting string No Sort method: score, relevance, mostRecent, alphabetical, topRated, random score
gender string No Gender filter: f (female), m (male), c (couple), t (trans) f
live boolean No Filter for live performers only false
tags string No Comma-separated tags (e.g., "athletic,curvy") -
ethnicities string No Comma-separated ethnicities (e.g., "caucasian,asian") -
ages string No Comma-separated age groups (e.g., "gc1819,gc2029") -
lang string No Language for i18n response: en, es, fr, it, de, pt en
name string No Specific performer's clean name (e.g., misshornymiss) -

Available Ethnicity Values:

  • caucasian, ebony, hispanic, asian, indian, arab, native american

Available Age Group Values:

  • gc1819, gc2029, gc3039, gc4049, gc50plus

Response Format

Success Response (200 OK):

{
    "count": 213,
    "performers": [
        {
            "nameClean": "misshornymiss",
            "characteristic": {
                "bodyTypes": ["Slender"],
                "country": "CA",
                "gender": "f",
                "languages": ["English", "French"],
                "bustSize": "DD/E",
                "ethnicities": ["White"],
                "genderCode": "f",
                "eyeColor": "Green",
                "hairColor": "Red",
                "age": 47,
                "height": "65",
                "weight": "145",
                "measurements": "34-27-36\" (86-69-91cm)",
                "zodiac": "Scorpio",
                "pubicHair": "Hairy",
                "bodyMods": ["Tattoos"],
                "fetishes": ["Feet", "Anal", "Roleplay", "Submissive", "Deepthroat"],
                "bodyHairs": [],
                "sexualPreferences": ["Bisexual"],
                "theme": "Toys,Housewives"
            },
            "score": 5,
            "live": true,
            "iframeFeedURL": "https://hybridclient.naiadsystems.com/purecam?performer=misshornymiss&performerid=88333014&volumelevel=0&widescreen=true",
            "roomUrl": "https://t.crjmpy.com/158626/6358?affsub4=AT0007&model=misshornymiss",
            "i18n": {
                "characteristic": { "country": "Canada", "gender": "Woman" },
                "description": "Self-description text...",
                "expertise": "Specialties text...",
                "turnOns": "Preferences text..."
            },
            "updatedDate": "2025-05-07T18:37:27.019Z",
            "customTags": ["langenglish", "langfrench", "gc4049", "gccanada"],
            "totalVideos": 54,
            "characteristicsTags": ["anal", "bisexual", "caucasian", "deepthroat"],
            "autoTags": ["blowjob", "dirty talk", "feet", "housewife"],
            "stars": 5,
            "systemScore": 0.99631191,
            "systemSource": "streamate",
            "lastConnection": "2025-04-28T19:51:04.000Z",
            "itemId": "streamate88333014",
            "createdDate": "2022-09-03T05:14:07.506Z",
            "name": "misshornymiss",
            "thumbnailUrl": "https://imagetransform.icfcdn.com/avatar/misshornymiss.webp"
        }
    ]
}

Performer Object Reference

Basic Information

Property Type Description In Lite Version
name string Display name Yes
nameClean string System-standardized name Yes
itemId string Unique identifier (platformid) Yes
thumbnailUrl string Profile image URL Yes
roomUrl string Direct streaming room link (with affiliate tracking) Yes

Status & Metrics

Property Type Description In Lite Version
live boolean Currently streaming Yes
score number Provider rating No
stars number Star rating (1-5) Yes
systemScore number Internal system rating (0-1) No
totalVideos number Available videos count No
systemSource string Platform identifier (e.g., streamate) Yes

Timestamps

Property Type Description In Lite Version
createdDate string Profile creation date (ISO 8601) Yes
updatedDate string Last profile update (ISO 8601) No
lastConnection string Last activity (ISO 8601) No

Streaming

Property Type Description In Lite Version
iframeFeedURL string Stream embed URL for iframe Yes

Characteristics Object

Property Type Description In Lite Version
age number Performer's age Yes
height string Height in inches No
weight string Weight in pounds No
measurements string Body measurements No
bustSize string Bra size Yes
hairColor string Hair color Yes
eyeColor string Eye color Yes
pubicHair string Pubic hair style No
gender / genderCode string Gender identifier Yes
country string Two-letter country code Yes
languages string[] Spoken languages Yes
ethnicities string[] Ethnic backgrounds Yes
bodyTypes string[] Body type descriptors Yes
bodyMods string[] Body modifications No
bodyHairs string[] Body hair characteristics No
zodiac string Astrological sign No
sexualPreferences string[] Sexual orientations No
fetishes string[] Fetish interests No
theme string Comma-separated themes No

Tags

Property Type Description In Lite Version
customTags string[] System-generated tags Yes
characteristicsTags string[] Characteristic-derived tags Yes
autoTags string[] Auto-generated content tags Yes

i18n (Internationalization)

Property Type Description In Lite Version
characteristic object Translated characteristics (same structure as main) Yes
description string Self-description No
expertise string Specialties No
turnOns string Preferences No
Note: Lite version is enabled by default for better performance (lower latency, smaller payload). Contact your CrakRevenue affiliate manager to enable the full version.

Error Responses

Status Code Response Cause
403 Forbidden {"message": "Forbidden"} Missing or invalid API key
403 Forbidden HTML error page Missing User-Agent header
401 Unauthorized {"message": "Unauthorized: brands not allowed"} Requesting brands not authorized for your token
401 Unauthorized {"message": "Unauthorized: No token provided"} Missing token query parameter
401 Unauthorized {"message": "Unauthorized: Failed to retrieve token data"} Invalid token
400 Bad Request {"error": "string"} Service-level error
500 Internal Server Error {"message": "Internal Server Error"} Server-side failure

Supported Brands

Brand Platform
streamate Streamate
mfc MyFreeCams
chaturbate Chaturbate
bongacash BongaCams
awempire LiveJasmin
stripchat Stripchat
imlive ImLive
Warning: You can only fetch performers from the brands authorized for your token. Requesting unauthorized brands returns a 401 error.

Pagination & Performance

Tip: Use a maximum of 12 performers per page for best performance. The more performers requested, the longer the response time.

Pagination Parameters:

Parameter Type Default Description
page number 1 Page number
size number 1 Performers per page (max 100)

Example - First page of 6 performers:

https://performersext-api.pcvdaa.com/performers-ext?token=<YOURTOKEN>&gender=f&live=true&lang=en&page=1&size=6

Example - Next page:

https://performersext-api.pcvdaa.com/performers-ext?token=<YOURTOKEN>&gender=f&live=true&lang=en&page=2&size=6

Caching: Performer data is cached server-side for 30 seconds.

Tags Reference

Available tag values for the tags query parameter:

anal, athletic, bbw, curvy, dancing, beautiful, black hair, blowjob, bdsm,
bondage, deepthroat, dirty talk, big ass, big tits, blond hair, brown hair,
dominant, findom, femdom, feet, housewife, kinky, milf, muscular, hairy,
masturbation, petite, red hair, skinny, sex toy, squirt, striptease,
submissive, tattoos

Fallback Strategy

The API can return empty results (count: 0, empty performers array). Implement a fallback:

  1. Send request with all desired filters (e.g., live=true&ethnicities=caucasian&tags=anal,athletic,bbw)
  2. If empty result, retry with fewer filters (e.g., live=true&ethnicities=caucasian)
  3. If still empty, retry with minimal filters (e.g., live=true)

 

Tip: The fallback implementation is client-side. Progressively remove the most restrictive filters first (tags, then ethnicities, then age groups).

 

Embedding Live Streams

To embed a live performer's stream feed in an iframe:

  1. Fetch a live performer from the API
  2. Use iframeFeedURL for the iframe src
  3. Use roomUrl for the click-through link
<a id="testLink" href="PERFORMEROBJECT.roomUrl" target="blank">
    <iframe
        id="testIframe"
        src="PERFORMEROBJECT.iframeFeedURL"
        frameborder="0"
        allow="autoplay; encrypted-media"
        sandbox="allow-scripts allow-same-origin allow-forms allow-popups allow-popups-to-escape-sandbox"
        style="pointer-events: none; width: 100%; height: 100%; border: none;"
    ></iframe>
</a>

 

Warning: The iframe must have pointer-events: none so clicks pass through to the wrapping <a> tag, which opens the performer's room in a new tab with affiliate tracking.

 

Tracking URLs

Each performer's roomUrl contains affiliate tracking parameters. The URL format is:

https://{domain}/{affiliateid}/{path}?{trackingparams}&model={performerName}

Example with affiliate ID 1:

https://t.crjmpy.com/1/3?affsub1=documentation&model=misshornymiss

 

Error: Your affiliate ID must be included in the roomUrl for successful commission tracking. Missing affiliate IDs mean lost revenue.

 

ComusThumbz Integration: All external performer links are routed through click.php for skim tracking:

$clickurl = sprintf('click.php?url=%s&type=camperformer&id=%d',
    urlencode($performer['chatroomurl']), $performer['performerid']);

CURL Request Examples

Fetch 10 female caucasian performers:

curl --location 'https://performersext-api.pcvdaa.com/performers-ext/?token=<YOURTOKEN>&gender=f&ethnicities=caucasian&page=1&size=10' \
--header 'x-api-key: <YOURAPIKEY>'

Fetch one live female performer:

curl --location 'https://performersext-api.pcvdaa.com/performers-ext/?gender=f&live=true&token=<YOURTOKEN>&size=1&page=1' \
--header 'x-api-key: <YOURAPIKEY>'

Fetch a specific performer (requires name AND brand):

curl --location 'https://performersext-api.pcvdaa.com/performers-ext/?name=misshornymiss&brands=streamate&token=<YOURTOKEN>&size=1&page=1' \
--header 'x-api-key: <YOURAPIKEY>'

Fetch performers by age group:

curl --location 'https://performersext-api.pcvdaa.com/performers-ext/?token=<YOURTOKEN>&ages=gc2029&size=6&page=1' \
--header 'x-api-key: <YOURAPIKEY>'

Internal API Endpoints

The internal ComusThumbz REST API normalizes external performer data and serves it to the frontend.

Base URL: https://{domain}/ct/api/v1

Controller: ct/api/v1/controllers/WebcamController.php
Model: ct/api/v1/models/WebcamModel.php

GET /cams

List all performers with filtering.

Parameter Type Default Description
page int 1 Page number
perpage int 20 Items per page (max 100)
isonline int - 0 or 1 - filter by online status
site int - Site ID (1-11)
gender string - f, m, c, t
race string - Ethnicity filter
hair string - Hair color filter
bust string - Bust size filter
figure string - Figure type filter
hd int - HD stream filter (0 or 1)
minage int - Minimum age
maxage int - Maximum age
minviewers int - Minimum viewer count
search string - Search by username
sortby string - Sort field

Example:

GET /ct/api/v1/cams?page=1&perpage=20&gender=f&isonline=1&sortby=viewers

GET /cams/online

Get only online performers. This is the primary endpoint used by camperformers.php.

Parameter Type Default Description
page int 1 Page number
perpage int 20 Items per page (max 100)
site int - Site ID filter
gender string - Gender filter
minviewers int - Minimum viewers
race string - Ethnicity filter
hair string - Hair color filter
bust string - Bust size filter
figure string - Figure type filter
country string - Country filter
tags string - Tags filter
language string - Language filter
location string - Location filter
isnew int - New performer filter
hd int - HD filter
excludeid int - Exclude specific performer
sortby string - Sort: viewers, followers, newest, newmodels, favorited, experienced, ageasc, agedesc, hdfirst, alphabetical
fast int - Set to 1 to skip COUNT query (returns "unknown" total)

Example:

GET /ct/api/v1/cams/online?page=1&perpage=24&gender=f&sortby=viewers&fast=1

Get top/featured performers.

Parameter Type Default Description
limit int 10 Number of performers
criteria string - viewers, new, or popular

GET /cams/stats

Get global webcam statistics (no parameters). Returns counts from tblCamsPerformersStatsCache.

Response includes: total performers, online count, offline count, per-site counts, per-gender counts, HD count, etc.

GET /cams/sites

List all enabled cam sites from tblCamsSites. No parameters.

GET /cams/filters

Get all available filter options (races, hair colors, bust sizes, figures, etc.). No parameters. Used to populate filter dropdowns on the frontend.

GET /cams/races

Get all available race/ethnicity values. No parameters.

GET /cams/{id}

Get a performer by their performerid (primary key lookup).

GET /cams/{site}/{username}

Get a performer by site ID and username (composite index lookup).

GET /cams/{site}/{username}/status

Check if a specific performer is currently online. Returns {online: true/false}.

GET /cams/{id}/schedule

Get a performer's schedule/heatmap data showing when they're typically online.

Comments & Ratings

Method Endpoint Description
GET /cams/{site}/{performer}/comments Get comments on a performer
POST /cams/{site}/{performer}/comments Add comment (requires auth)
POST /cams/{site}/{performer}/rate Rate performer (requires auth)

Favorites

Method Endpoint Description
GET /favorites/cams Get user's cam favorites
POST /favorites Add favorite (body: {"contenttype":"camperformer","contentid":"123"})

Internal Response Format:

{
    "success": true,
    "data": {
        "performers": [
            {
                "performerid": 12345,
                "site": 1,
                "username": "performername",
                "gender": "f",
                "age": 25,
                "race": "asian",
                "numusers": 150,
                "status": 1,
                "hd": 1,
                "imageurl": "https://cdn.example.com/...",
                "chatroomurl": "https://example.com/performer"
            }
        ]
    },
    "pagination": {
        "page": 1,
        "perpage": 20,
        "total": 45000,
        "totalpages": 2250,
        "hasmore": true
    },
    "message": "Performers retrieved successfully"
}

 

Admin Configuration

Cam Sites Settings

Navigate to Admin Panel -> Cam Settings (ct/admin/camssettings.php)

Features:

  • Enable/disable individual cam sites
  • Set API credentials (API key and token) per site
  • Configure sync frequency
  • View sync logs
  • Toggle site availability on the frontend

Config Variables

Relevant settings in ct/dat/config.inc.php:

$domain = 'comusthumbzdemo.com';
$apibaseurl = "https://{$domain}/ct/api/v1";

Cam API credentials are stored per-site in tblCamsSites:

  • apiData field stores the x-api-key value
  • parameters field stores the token value

 


Cron Jobs

 

Configuration Required:
The following cron jobs must be running for the cam system to function. Without them, performer data becomes stale and online status is incorrect.

 

Cron Job File Frequency Purpose
Cam Data Sync ct/admin/cronupdatecams.php Every 5-10 minutes Fetch performers from all enabled external APIs
Stats Cache Update ct/admin/cron/updatecamperformerstats.php Every 1-5 minutes Update tblCamsPerformersStatsCache with fresh counts
Cam Maintenance ct/admin/cron/maintenancecamperformers.php Daily Cleanup deleted performers, fix missing fields

Crontab Example:

/5     php /path/to/ct/admin/cronupdatecams.php
/2     php /path/to/ct/admin/cron/updatecamperformerstats.php
0 3    php /path/to/ct/admin/cron/maintenancecamperformers.php

Frontend Pages

camperformers.php - Browse Page

The main cam browsing page with infinite pagination and advanced filtering.

URL: https://{domain}/camperformers.php

Features:

Grid display of performer cards (24 or 48 per page)Advanced filters: gender, race, hair, bust, figure, site, HD, ageSort options: viewers, followers, newest, new models, favorited, experienced, age, HD first, alphabetical

  • Search by username/displayname/tags
  • Favorites support (logged-in users)
  • Performance debug panel (?debug=1)
  • Feature guard: requires featurelivecams to be enabled

 

JavaScript API calls:

  • GET /ct/api/v1/cams/online - Main content load
  • GET /ct/api/v1/cams/sites - Populate site filter dropdown
  • GET /ct/api/v1/favorites (checkMultipleFavorites) - Batch load favorite states
  • POST /ct/api/v1/favorites/{type}/{id} - Toggle favorites

 

camperformer.php - Detail Page

Individual performer profile page.

URL: https://{domain}/camperformer.php?id={performerid}

Features:

  • Server-side SEO data loading (meta tags, Open Graph)
  • Performer profile: image, bio, stats
  • Online/offline status badge with viewer count
  • HD badge when available
  • External chat link (routed through click.php)
  • Related performers (same tags/gender)
  • Schedule/heatmap display
  • Comments and ratings

 

camfilter.php - Filter Results

Filter-specific results page.

URL: https://{domain}/camfilter.php?type={filtertype}&value={filtervalue}

Supported filter types: tag, gender, race, hair, bust, figure, language, site, country, location, pubicarea, isnew, hd, model


Data Flow

External API to Database

1. Cron: cronupdatecams.php runs every 5-10 minutes
  1. For each enabled site in tblCamsSites:
   a. Load site-specific handler (ct/admin/apis/cams{site}api.php)
   b. For external API sites: PerformersExtApiClient calls performersext-api.pcvdaa.com
   c. Parse response, normalize to standard format
   d. INSERT/UPDATE tblCamsPerformers
   e. Set status=1 for online performers, status=0 for offline
  1. Cron: updatecamperformerstats.php updates tblCamsPerformersStatsCache

Database to Frontend

1. User visits camperformers.php
  1. JavaScript calls GET /ct/api/v1/cams/online with filter params
  2. WebcamController receives request
  3. WebcamModel checks APCu cache (30s TTL)
 
  • Cache hit: return cached data
  • Cache miss: query tblCamsPerformers with filters
 

For pagination totals: use tblCamsPerformersStatsCache (or skip with fast=1)Return JSON responseJavaScript renders performer cards

  1. User clicks performer -> click.php -> external chat room

Site-Specific API Handlers

Located in ct/admin/apis/:

File Platform
camschaturbateapi.php Chaturbate
camsstripchatapi.php Stripchat
camsbongacamsapi.php BongaCams
camscam4api.php Cam4
camscambuilderapi.php CamBuilder
camscamsodaapi.php CamSoda
camscherrytvapi.php CherryTV
camsflirt4freeapi.php Flirt4Free
camsxloveapi.php XLove
camsimliveapi.php ImLive
camslivejasminapi.php LiveJasmin
camsmfcapi.php MyFreeCams
PerformersExtApiClient.php Unified external API client

Performance & Caching

Three-Layer Caching Strategy

  1. APCu In-Memory Cache (30-second TTL)
  • Used by WebcamModel::getOnlinePerformers()
  • Cache key: MD5 hash of page + perPage + filters + fastMode
  • Fastest layer - serves repeated identical requests instantly
  1. Database Stats Cache (tblCamsPerformersStatsCache)
  • Updated by cron every 1-5 minutes
  • Avoids expensive COUNT() queries on 400K+ rows
  • Estimates per-site and per-gender counts
  1. Fast Mode (?fast=1)

Skips COUNT() entirelyReturns "unknown" as total count

  • Frontend detects end-of-results when page returns fewer items than perpage
  • Used for initial page loads

Query Optimization

-- Optimized online query (uses indexes, no COUNT)
SELECT performerid, username, imageurl, numusers, site, status
FROM tblCamsPerformers
WHERE status = 1
  AND deleted = 0
  AND enabled = 1
  AND gender = 'f'
ORDER BY numusers DESC
LIMIT 24 OFFSET 0;

 

Tip: The external API recommends a maximum of 12 performers per page. The internal API allows up to 100 but 24-48 is optimal for frontend performance.

 


Testing with API Tester

The built-in API Tester (ct/admin/apitester.php) can be used to test cam endpoints:

Navigate to Admin Panel -> API TesterSet the method to GET

  1. Enter endpoint: /cams/online?page=1&perpage=5&gender=f
  2. Click Send Request
  3. View the JSON response with performer data

Useful test endpoints:

Endpoint What it Tests
/cams/stats Verify cron jobs are running (check counts)
/cams/sites Verify site configuration
/cams/online?perpage=1&fast=1 Quick test of online performers
/cams/filters Verify available filter options
/cams/123 Test single performer lookup

Troubleshooting

 

Error:
No performers appearing on the frontend

 

  1. Check cron jobs are running: php ct/admin/cronupdatecams.php
  2. Verify API credentials in Admin -> Cam Settings
  3. Check tblCamsSites for enabled sites
  4. Verify featurelivecams is enabled in feature toggles
  5. Check logs: ct/logs/cron-update.log

 

Error:
All performers showing as offline

 

  1. Run the cron update: php ct/admin/cronupdatecams.php
  2. Check if external API is responding (test with CURL)
  3. Verify API token hasn't expired
  4. Check tblCamsPerformers for status values: SELECT COUNT(*) FROM tblCamsPerformers WHERE status=1

 

Error:
External API returning 403 Forbidden

 

  1. Verify x-api-key is set correctly in tblCamsSites.apiData
  2. Ensure User-Agent header is being sent
  3. Check if API key has been revoked by CrakRevenue

 

Error:
External API returning 401 Unauthorized

 

  1. Verify token is set correctly in tblCamsSites.parameters
  2. Check if requesting unauthorized brands
  3. Token may be domain-bound - verify it's for your domain

 

Error:
Slow page load for cam performers

 

Enable fast mode: ensure frontend uses ?fast=1Check APCu is installed and enabled: php -m | grep apcuVerify stats cache cron is running
  1. Reduce perpage to 24 or less
  2. Use debug mode (?debug=1) to identify bottleneck

 

Error:
Clicks not being tracked / affiliate revenue missing

All external performer links MUST go through click.php:

$clickurl = sprintf('click.php?url=%s&type=camperformer&id=%d',

    urlencode($externalurl), $performerid);

Direct links bypass tracking and result in 100% skim penalty.

AdminModeration

GET /api/v1/adminmoderation

Bulk approve POST /api/v1/admin/moderation/bulk/approve

  • Auth Required: PUBLIC

DELETE /api/v1/adminmoderation

Delete content (DMCA takedown) DELETE /api/v1/admin/moderation/{type}/{id}

  • Auth Required: PUBLIC

AdminUsers

GET /api/v1/adminusers

Get user activity log GET /api/v1/admin/users/{id}/activity

  • Auth Required: PUBLIC

PUT /api/v1/adminusers

Update user PUT /api/v1/admin/users/{id}

  • Auth Required: PUBLIC

Ads

GET /api/v1/ads

Get ad statistics (Admin) GET /api/v1/admin/ads/{id}/stats

  • Auth Required: PUBLIC

Analytics

GET /api/v1/analytics

Get traffic analytics GET /api/v1/analytics/traffic

  • Auth Required: PUBLIC

Auth

GET /api/v1/auth

Disable 2FA DELETE /api/v1/auth/2fa

  • Auth Required: PUBLIC

Banners

GET /api/v1/banners

Get banner statistics GET /api/v1/banners/{id}/stats

  • Auth Required: PUBLIC
  • Parameters:
  • bannerId (int): Banner ID

Categories

GET /api/v1/categories

Get galleries in category GET /api/v1/categories/{id}/galleries

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Category ID

POST /api/v1/categories

Create new category (admin only) POST /api/v1/categories

  • Auth Required: PUBLIC

PUT /api/v1/categories

Update category (admin only) PUT /api/v1/categories/{id}

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Category ID

DELETE /api/v1/categories

Delete category (admin only) DELETE /api/v1/categories/{id}

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Category ID

ClickTracking

GET /api/v1/clicktracking

GET /api/v1/stats/clicks/user/{userId} Get user's click history (User must be authenticated)

  • Auth Required: PUBLIC

Comments

GET /api/v1/comments

GET /api/v1/comments/flagged Get all flagged comments (admin only)

  • Auth Required: PUBLIC

POST /api/v1/comments

POST /api/v1/cams/{site}/{performer}/comments Add a comment to a webcam performer

  • Auth Required: PUBLIC

PUT /api/v1/comments

PUT /api/v1/comments/{id}/status Update comment status (admin only)

  • Auth Required: PUBLIC

DELETE /api/v1/comments

DELETE /api/v1/comments/{id}/like Remove like/dislike from a comment

  • Auth Required: PUBLIC

CreatorEarnings

GET /api/v1/creatorearnings

GET /creator/earnings/platform-settings - Get platform fee settings Returns global platform fee and creator's custom fee if applicable This endpoint is PUBLIC (no auth required) for display purposes

  • Auth Required: PUBLIC

CreatorProfiles

GET /api/v1/creatorprofiles

CreatorProfilesController - Creator profile management

  • Auth Required: PUBLIC

POST /api/v1/creatorprofiles

POST /creator/profile - Create new creator profile

  • Auth Required: PUBLIC

PUT /api/v1/creatorprofiles

PATCH /creator/profile/me - Update authenticated creator's profile

  • Auth Required: PUBLIC

Creators

GET /api/v1/creators

POST /api/v1/creators/me/cover Upload creator cover image

  • Auth Required: PUBLIC

PUT /api/v1/creators

PUT /api/v1/creators/me Update creator profile settings

  • Auth Required: PUBLIC

CreatorSubscriptions

GET /api/v1/creatorsubscriptions

DELETE /creators/{id}/packages/{packageid} - Creator disables a package

  • Auth Required: PUBLIC

Earnings

GET /api/v1/earnings

GET /api/v1/creator/earnings/by-source Get earnings breakdown by source (tips, subscriptions, PPV) Includes counts and totals

  • Auth Required: PUBLIC

Favorites

GET /api/v1/favorites

GET /favorites/counts Get user's favorites counts by type

  • Auth Required: PUBLIC

POST /api/v1/favorites

POST /favorites Add item to favorites Body: { "contenttype": "video|gallery|camperformer|model", "contentid": "123", "notes": "optional" }

  • Auth Required: PUBLIC

DELETE /api/v1/favorites

DELETE /favorites/{type}/{id} Remove from favorites

  • Auth Required: PUBLIC

Features

GET /api/v1/features

Get enabled cam sites GET /api/v1/features/cams

  • Auth Required: PUBLIC

Feed

GET /api/v1/feed

Get trending content GET /api/v1/feed/trending

  • Auth Required: PUBLIC

Friends

GET /api/v1/friends

Reject friend request PUT /api/v1/friends/{id}/reject

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Friendship ID

POST /api/v1/friends

Send friend request POST /api/v1/friends

  • Auth Required: PUBLIC

DELETE /api/v1/friends

Remove friend DELETE /api/v1/friends/{id}

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Friendship ID

Galleries

GET /api/v1/galleries

GET /galleries/{id}/related - Get related galleries

  • Auth Required: PUBLIC

POST /api/v1/galleries

POST /galleries - Create gallery (admin only)

  • Auth Required: PUBLIC

PUT /api/v1/galleries

PATCH /galleries/{id}/status - Update gallery status (admin only)

  • Auth Required: PUBLIC

DELETE /api/v1/galleries

DELETE /galleries/{id} - Delete gallery (admin only)

  • Auth Required: PUBLIC

ImpressionTracking

GET /api/v1/impressiontracking

GET /api/v1/impressions/trends/{type} Get performance trends over time

  • Auth Required: PUBLIC

LiveStream

GET /api/v1/livestream

GET /api/v1/live/{id}/per-minute/status Get current per-minute session status

  • Auth Required: PUBLIC

Media

GET /api/v1/media

Get storage URL for a specific video file

  • Auth Required: PUBLIC
  • Parameters:
  • videoId (int): Video ID
  • fileType (string): File type (thumbnail, preview, poster, video, hls, etc.)
  • Returns: void - (returns download URL or error)

Messages

GET /api/v1/messages

Get list of blocked users GET /api/v1/messages/blocked

  • Auth Required: PUBLIC

DELETE /api/v1/messages

Delete a message DELETE /api/v1/messages/{id}

  • Auth Required: PUBLIC

Models

GET /api/v1/models

GET /api/v1/models/{id}/details Get unified model details Query params: - type: regular|cammodel (required)

  • Auth Required: PUBLIC

POST /api/v1/models

POST /api/v1/models Create new model (admin only)

  • Auth Required: PUBLIC

PUT /api/v1/models

PUT /api/v1/modelclasses/{id}/status Update model status (admin only)

  • Auth Required: PUBLIC

DELETE /api/v1/models

DELETE /api/v1/modelclasses/{id} Delete model (admin only)

  • Auth Required: PUBLIC

Notifications

GET /api/v1/notifications

Get notification preferences GET /api/v1/notifications/preferences

  • Auth Required: PUBLIC

PUT /api/v1/notifications

Update notification preferences PUT /api/v1/notifications/preferences

  • Auth Required: PUBLIC

DELETE /api/v1/notifications

Delete notification (soft delete) DELETE /api/v1/notifications/{id}

  • Auth Required: PUBLIC

Player

GET /api/v1/player

Player Controller Handles video player configuration and settings

  • Auth Required: PUBLIC

Playlists

GET /api/v1/playlists

PUT /playlists/{id}/items/reorder Reorder playlist items (owner only) Body: { "items": [ { "itemid": 1, "sortorder": 0 }, { "itemid": 2, "sortorder": 1 } ] }

  • Auth Required: PUBLIC

POST /api/v1/playlists

POST /playlists/{id}/items Add video to playlist (owner only) Body: { "videoid": 123, "sortorder": 1 }

  • Auth Required: PUBLIC

PUT /api/v1/playlists

PUT /playlists/{id} Update playlist (owner only)

  • Auth Required: PUBLIC

DELETE /api/v1/playlists

DELETE /playlists/{id}/items/{itemId} Remove video from playlist (owner only)

  • Auth Required: PUBLIC

Posts

GET /api/v1/posts

GET /api/v1/posts/{id}/poll Get poll data for a post

  • Auth Required: PUBLIC
  • Parameters:
  • postId (int): Post ID

POST /api/v1/posts

POST /api/v1/posts/with-product Create a post with product attachment Handles multipart/form-data with files

  • Auth Required: PUBLIC

PUT /api/v1/posts

PUT /api/v1/posts/{id}/poll Update poll data for a post

  • Auth Required: PUBLIC
  • Parameters:
  • postId (int): Post ID

DELETE /api/v1/posts

DELETE /comments/{id} Delete a comment (soft delete)

  • Auth Required: PUBLIC

Products

GET /api/v1/products

Refund a merchandise purchase (Option 2: Proportional Loss) - User gets full refund (100%) - Creator loses their portion (80%) - Platform absorbs their portion (20%)

  • Auth Required: PUBLIC

POST /api/v1/products

Products Controller Handles creator merchandise/product operations

  • Auth Required: AUTH

PUT /api/v1/products

Update order shipping status and tracking number

  • Auth Required: PUBLIC

Ratings

GET /api/v1/ratings

GET /api/v1/models/{id}/rating Get rating stats for a model

  • Auth Required: PUBLIC

DELETE /search/history - Clear user's search history

  • Auth Required: PUBLIC

SecurityQuestions

GET /api/v1/securityquestions

Reset password using security question token POST /api/v1/auth/reset-password-with-token

  • Auth Required: PUBLIC

Settings

GET /api/v1/settings

Get video player settings GET /api/v1/settings/player

  • Auth Required: PUBLIC

PUT /api/v1/settings

Get all public settings (cached) This is the main method that builds the settings array / private function getPublicSettings(): array { global $conn;

  • Auth Required: PUBLIC

Sponsors

GET /api/v1/sponsors

Track sponsor click POST /api/v1/sponsors/{id}/click

  • Auth Required: PUBLIC

Styles

GET /api/v1/styles

Bulk save multiple styles at once POST /api/v1/styles/bulk

  • Auth Required: PUBLIC

DELETE /api/v1/styles

Delete a specific style override DELETE /api/v1/styles/{id}

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Style ID

Subscriptions

GET /api/v1/subscriptions

Upgrade subscription POST /api/v1/subscriptions/upgrade

  • Auth Required: PUBLIC

Tags

GET /api/v1/tags

Parse tag string and return tag IDs (creates tags if they don't exist) POST /api/v1/tags/parse

  • Auth Required: PUBLIC

POST /api/v1/tags

Create new tag (admin only) POST /api/v1/tags

  • Auth Required: PUBLIC

PUT /api/v1/tags

Update tag (admin only) PUT /api/v1/tags/{id}

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Tag ID

DELETE /api/v1/tags

Delete tag (admin only) DELETE /api/v1/tags/{id}

  • Auth Required: PUBLIC
  • Parameters:
  • id (int): Tag ID

Tips

GET /api/v1/tips

POST /api/v1/tips/{tipid}/refund Refund a tip (creator only) - Option 2: Proportional Loss User gets 100% back, creator loses their portion (80%), platform absorbs their portion (20%)

  • Auth Required: PUBLIC

UserPreferences

GET /api/v1/userpreferences

GET /user/preferences Get all user preferences (privacy, stream, email)

  • Auth Required: PUBLIC

PUT /api/v1/userpreferences

PUT /user/preferences/email Update user's email preferences

  • Auth Required: PUBLIC

Users

GET /api/v1/users

Get trusted devices for current user GET /api/v1/user/trusted-devices

  • Auth Required: PUBLIC

PUT /api/v1/users

Update profile privacy settings PUT /api/v1/users/me/privacy

  • Auth Required: PUBLIC

DELETE /api/v1/users

Remove a trusted device DELETE /api/v1/user/trusted-devices/{id}

  • Auth Required: PUBLIC

UserVerification

GET /api/v1/userverification

GET /admin/verification/stats Get verification statistics (admin only)

  • Auth Required: PUBLIC

PUT /api/v1/userverification

PUT /admin/verification/{userId}/status Update verification status (admin only)

  • Auth Required: PUBLIC

DELETE /api/v1/userverification

DELETE /user/verification/documents/{documentId} Delete a verification document

  • Auth Required: PUBLIC

VideoReports

GET /api/v1/videoreports

GET /video-reports/reasons - Get list of valid report reasons

  • Auth Required: PUBLIC

Videos

GET /api/v1/videos

Generate URL-friendly slug from title

  • Auth Required: PUBLIC
  • Parameters:
  • title (string):
  • Returns: string -

POST /api/v1/videos

POST /videos/{id}/tags - Add tag to video

  • Auth Required: PUBLIC

PUT /api/v1/videos

PATCH /videos/{id}/status - Update video status (admin only)

  • Auth Required: PUBLIC

DELETE /api/v1/videos

DELETE /videos/{id} - Delete video (owner or admin)

  • Auth Required: PUBLIC

WatchHistory

GET /api/v1/watchhistory

POST /content/{type}/{id}/track Track viewing of any content type (camperformer, gallery, model) Body: optional { "watchedduration": 1, "totalduration": 1 }

  • Auth Required: PUBLIC

PUT /api/v1/watchhistory

POST /videos/{id}/progress Update video watch progress Body: { "watchedduration": 120, "totalduration": 600, "lastposition": 120 }

  • Auth Required: PUBLIC

DELETE /api/v1/watchhistory

DELETE /history/{id} Remove specific history entry

  • Auth Required: PUBLIC

Webcam

GET /api/v1/webcam

GET /cams/{id}/schedule - Get performer's schedule/heatmap data

  • Auth Required: PUBLIC
  • Parameters:
  • performerId (int): Performer ID from tblCamsPerformers
  • Returns: array - Schedule data with metadata

Webhooks

GET /api/v1/webhooks

GET /api/v1/webhooks/status Get cloud encoding status (requires admin auth)

  • Auth Required: PUBLIC

Withdrawals

GET /api/v1/withdrawals

GET /api/v1/creator/withdrawals/my-requests Get withdrawal history for current user

  • Auth Required: PUBLIC


External API Change Log

Version Date Description
1.6 2025-10-01 Lite version enabled by default
1.5 2025-08-13 Added iframeFeedUrl usage example
1.4 2025-08-06 Added legal & compliance requirements
1.3 2025-07-22 Added ages parameter, error codes, fallback info
1.2 2025-07-14 Updated name filter
1.1 2025-07-01 Performance optimization, available value listing
1.0 2025-05-23 First deployment