ComusThumbz Documentation
Admin Login

API REST di ComusThumbz

Guida all'integrazione API esterna

Versione: 1.0.0
Creato: 2026-02-03


Panoramica

Il sistema ComusThumbz Webcam Performer aggrega esecutori di cam in diretta da fino a 11 piattaforme esterne in un'esperienza di navigazione unificata. Gli artisti vengono sincronizzati tramite lavori di cron, memorizzati in tblCamsPerformers (~400K+ record), e servito attraverso l'API REST interna a /ct/api/v1/cams.

Il sistema ha due strati:

  1. API esterne - CrakRevenue Performers Ext API (performersext-api.pcvdaa.com) fornisce dati performer da piattaforme come Streamate, Chaturbate, Stripchat, ecc.
  2. API interna - L'API REST di ComusThumbz/ct/api/v1/cams/) serve dati performer normalizzati al frontend con caching e filtraggio.
Nota: L'API esterna richiede credenziali (chiave API + token) fornite dal team di supporto di CrakRevenue. Questi sono configurati per-sito nel pannello di amministrazione.

Architettura del sistema

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

API esterna: Performers Ext

L'API di CrakRevenue Performers Ext è la fonte primaria di dati per i dati di cam performer.

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

Metodo: GET /performers-ext

Autenticazione

Per ogni richiesta sono necessari tre elementi di autenticazione:

CredenzialiTipoDesignazione
x-api-keyIntestazione HTTPChiave API fornita dal supporto CrakRevenue
tokenParametro di queryToken di autenticazione fornito dal supporto CrakRevenue
User-AgentIntestazione HTTPDeve essere presente (le richieste senza User-Agent ricevono 403)
Attenzione: Sia la chiave API che il token sono di dominio-bound. Sono emessi solo per specifici siti autorizzati. I gettoni non possono essere riutilizzati o trasferiti ad altri siti web senza previa autorizzazione scritta di CrakRevenue.

Richiesta di esempio:

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

Parametri di query

ParametroTipoObbligoDesignazionePredefinito
tokenstringaSì.Token di autenticità- No.
brandsstringaNo.Elenco dei marchi separati (ad es., "streamate,chaturbate")Tutte le marche disponibili per il tuo token
pagenumeroNo.Numero di pagina (deve essere >= 1)1
sizenumeroNo.Articoli per pagina (1-100, valori >100 a 100)1
sortingstringaNo.Metodo di selezione: scorerelevancemostRecentalphabeticaltopRatedrandomscore
genderstringaNo.Filtro di genere: f (femmina) m (maschio) c (coppia) t (trans)f
livebooleanNo.Filtro per esecutori dal vivo solofalse
tagsstringaNo.Etichette separate (ad es., "athletic,curvy")- No.
ethnicitiesstringaNo.Etnie separate dalla comma (ad esempio, "caucasian,asian")- No.
agesstringaNo.Gruppi di età separati (ad esempio, "gc1819,gc2029")- No.
langstringaNo.Lingua per risposta i18n: enesfritdepten
namestringaNo.Il nome specifico dell'esecutore (ad esempio, misshornymiss)- No.

Valori di etnia disponibili:

  • caucasianebonyhispanicasianindianarabnative american

Valori del gruppo di età disponibili:

  • gc1819gc2029gc3039gc4049gc50plus

Formato di risposta

Risposta di successo (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 Riferimento oggetto

Informazioni di base

ProprietàTipoDesignazioneIn versione Lite
namestringaNome dell'esposizioneSì.
nameCleanstringaNome standardizzato del sistemaSì.
itemIdstringaIdentificatore unico (platformid)Sì.
thumbnailUrlstringaURL immagine profiloSì.
roomUrlstringaCollegamento diretto della stanza di streaming (con il monitoraggio della filiale)Sì.

Stato & Metrics

ProprietàTipoDesignazioneIn versione Lite
livebooleanAttualmente in streamingSì.
scorenumeroValutazione del fornitoreNo.
starsnumeroValutazione della stella (1-5)Sì.
systemScorenumeroValutazione del sistema interno (0-1)No.
totalVideosnumeroConto video disponibileNo.
systemSourcestringaIdentificazione della piattaforma (ad esempio, streamate)Sì.

Lampade

ProprietàTipoDesignazioneIn versione Lite
createdDatestringaData di creazione del profilo (ISO 8601)Sì.
updatedDatestringaUltimo aggiornamento del profilo (ISO 8601)No.
lastConnectionstringaUltima attività (ISO 8601)No.

Streaming

ProprietàTipoDesignazioneIn versione Lite
iframeFeedURLstringaURL embed per iframeSì.

Caratteristiche

ProprietàTipoDesignazioneIn versione Lite
agenumeroEtà del performerSì.
heightstringaAltezza in polliciNo.
weightstringaPeso in sterlineNo.
measurementsstringaMisurazione del corpoNo.
bustSizestringaBra tagliaSì.
hairColorstringaColore dei capelliSì.
eyeColorstringaColore degli occhiSì.
pubicHairstringaPubic hair styleNo.
gender / genderCodestringaIdentificazione di genereSì.
countrystringaCodice paese a due lettereSì.
languagesstringa[]Lingue parlateSì.
ethnicitiesstringa[]Sfondi etniciSì.
bodyTypesstringa[]Descrittori del tipo di corpoSì.
bodyModsstringa[]Modifiche del corpoNo.
bodyHairsstringa[]Caratteristiche del corpoNo.
zodiacstringaSegno astronomicoNo.
sexualPreferencesstringa[]Gli orientamenti sessualiNo.
fetishesstringa[]Interessi penaliNo.
themestringaTemi separatiNo.

Tags

ProprietàTipoDesignazioneIn versione Lite
customTagsstringa[]Tag generate dal sistemaSì.
characteristicsTagsstringa[]Etichette caratterizzanti-derivateSì.
autoTagsstringa[]Tag di contenuti generati automaticamenteSì.

i18n (internazionalizzazione)

ProprietàTipoDesignazioneIn versione Lite
characteristicoggettoTradotto caratteristiche (stessa struttura come principale)Sì.
descriptionstringaAutodescrizioneNo.
expertisestringaSpecialitàNo.
turnOnsstringaPreferenzeNo.
Nota: La versione Lite è abilitata per impostazione predefinita per migliorare le prestazioni (più bassa latenza, più piccola payload). Contatta il tuo manager di affiliazione CrakRevenue per abilitare la versione completa.

Risposte di errore

Codice di statoRispostaCausa
403 Proibita{"message": "Forbidden"}Chiave API mancante o non valida
403 ProibitaPagina di errore HTMLMancato User-Agent intestazione
401 Non autorizzato{"message": "Unauthorized: brands not allowed"}Richiesta di marchi non autorizzati per il tuo token
401 Non autorizzato{"message": "Unauthorized: No token provided"}Mancato token parametro query
401 Non autorizzato{"message": "Unauthorized: Failed to retrieve token data"}Token non valido
400 Bad Richiesta{"error": "string"}Errore di livello di servizio
500 Errore del server interno{"message": "Internal Server Error"}Errore lato server

Marche supportate

MarcaPiattaforma
streamateStreamate
mfcMyFreeCams
chaturbateChaturbate
bongacashBongaCams
awempireLiveJasmin
stripchatPortachiavi
imliveImLive
Attenzione: È possibile ottenere solo esecutori dai marchi autorizzati per il token. Richiedere marchi non autorizzati restituisce un errore 401.

Paginazione e performance

Mancia: Utilizzare un massimo di 12 esecutori per pagina per le migliori prestazioni. Più gli interpreti hanno richiesto, più è il tempo di risposta.

Parametri:

ParametroTipoPredefinitoDesignazione
pagenumero1Numero di pagina
sizenumero1Performer per pagina (max 100)

Esempio - Prima pagina di 6 interpreti:

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