Stripchat’s API fails silently: three requests that return zero

Stripchat logo on an admission ticket, stub reading API

The Stripchat model feed and the Stripcash stats API have one habit in common: when you ask the wrong way, they don’t return an error. They return zero, with a happy HTTP 200. A feed with zero models looks like a quiet day. A revenue report at zero looks like a bad day. Both can run for months before anyone notices.

Our verdict

Audit your calls

EffortAn hour per integration
First resultsNext sync
We still use itA check in every cron

The short version

  • The modelsCountry filter of the Stripchat models API expects an ISO 3166-1 alpha-2 code: gb for the United Kingdom. An unknown code such as uk returns HTTP 200 with count: 0 and no error.
  • The tag filter of the Stripchat models API takes a category path such as girls/milfs; a single word like milfs is ignored.
  • Several tags separated by commas in one Stripchat API call returned zero models in our tests: make one call per tag and merge the results.
  • The Stripcash statistics API computes new date ranges asynchronously: the first response can contain no totals, and reading it as zero is a bug. Re-poll until the data is present.

Why does the country filter return zero models?

Because modelsCountry only understands ISO 3166-1 alpha-2 codes, and anything else silently matches nothing. The United Kingdom is gb, not uk. Send uk and you get a valid response with count: 0. We found this on one of our sites whose Stripchat side had been empty for months, with no alert, because an empty list is a legitimate answer.

GET /api/models?userId=YOUR_ID&modelsCountry=uk
HTTP/1.1 200 OK
{ "count": 0, ... }          ← no error, just nothing

GET /api/models?userId=YOUR_ID&modelsCountry=gb
HTTP/1.1 200 OK
{ "count": 180, ... }        ← the models were there all along

Responses simplified, count given as an example. The point is the status code: both answers are a success.

CountryCorrect codeCommon mistake
United Kingdomgbuk, en
Germanydeger
Spainessp
Japanjpja (that is the language)
South Koreakrko (the language)
Country codes are not language codes.

A related trap: never detect a country by searching a free-text location field. “Ukraine” contains “uk”, “New South Wales” contains “Wales”, “Kentucky” contains “Kent”, “British Columbia” contains “British”. Use the platform’s ISO country field and nothing else.

How do you filter Stripchat models by niche?

Filter in the request with strict=1 and one category path per call, because the response contains neither tags nor age. If you build a niche site (mature, couples, a language), you can’t filter on your side. Three rules we learned the hard way:

RequestResult
strict=1&tag=girls/milfsFiltered list
tag=milfs (no category)Tag ignored, generic list
strict=1&tag=girls/milfs,girls/matureZero models
strict=0&tag=girls/milfsTagged models first, not filtered
Stripchat models API, tested summer 2026.
  • The tag is the full category path as it appears in the platform’s tag pages (girls/milfs), not a single word.
  • Several tags separated by commas behave like AND, and usually return nothing. Make one call per tag, then merge and deduplicate by username.
  • strict=1 filters; strict=0 only reorders. A tag prefixed with a minus sign is excluded.
async function modelsForTags(tags, base) {        // base: your feed URL with userId
  const seen = new Map();
  for (const tag of tags) {                         // one call per category path
    const u = new URL(base);
    u.searchParams.set('strict', '1');
    u.searchParams.set('tag', tag);
    const { models = [] } = await (await fetch(u)).json(); // check the list key in your own response
    models.forEach(m => seen.set(m.username, m));  // dedupe by username
  }
  return [...seen.values()];
}
// modelsForTags(['girls/milfs', 'girls/mature'], FEED_URL)

If your own code later filters models by tag, remember that the response doesn’t carry tags: add your niche label yourself after the call, or your filter will reject everything the API just returned.

Why does the Stripcash stats API return zero earnings?

Because the first answer for a date range it hasn’t computed yet contains a statistics ID but no totals. When you request earnings for a new range, the Stripcash stats API queues the calculation and returns that placeholder with HTTP 200. Code that reads the totals directly gets nothing and reports zero. Ask again a few seconds later and the real figures are there. Ranges that were already requested answer instantly, which makes the bug intermittent and hard to catch.

1st call  → 200 OK  { "statistics": { "id": "…" } }                    ← queued, no totals
2nd call  → 200 OK  { "statistics": { "id": "…", "data": { "totals": { … } } } }   ← computed

Shape simplified. What matters: the first answer has an ID and no figures, and it is still a 200.

  • Re-poll the same request until the data block is present: we allow up to ten tries, four seconds apart.
  • Send your requests one at a time. Several date ranges requested in parallel pile up in the queue and a short retry loop gives up too early.
  • If the data never arrives, raise an error (“pending”), don’t write zero. A zero that means “not computed yet” will end up in a dashboard as a real crash.
async function stripcashStats(url, tries = 10) {
  for (let i = 0; i < tries; i++) {
    const body = await (await fetch(url, { headers: AUTH })).json();
    if (body?.statistics?.data) return body.statistics.data;   // computed
    await new Promise(r => setTimeout(r, 4000));             // queued: wait, ask again
  }
  throw new Error('stripcash_pending');                        // never return 0 here
}

The exact field names can differ between endpoints: check the structure of a computed response once, then test for its presence rather than for a value.

How to guard every integration against zero

All three bugs share the same cure: treat zero as suspicious. The checks we now run on every sync:

  • When you set up a new site, check once that each feed returns more than zero with the exact parameters you will use.
  • Alert when a platform has imported nothing for 24 hours.
  • Compare platforms: if Chaturbate returns hundreds of models for a country and Stripchat returns none, the problem is your request, not the country.
  • For money, a zero on a non-trivial date range is never data until proven otherwise.

Frequently asked questions

What country code does the Stripchat API use for the UK?

gb. The modelsCountry parameter expects ISO 3166-1 alpha-2 codes, and uk is not one. A request with uk returns HTTP 200 with zero models and no error message.

How do I filter Stripchat models by several tags?

Make one API call per tag with strict=1, then merge the lists and remove duplicates by username. In our tests, several comma-separated tags in one call behaved like AND and returned zero models.

Why is the tag filter ignored by the Stripchat API?

The tag must be a full category path such as girls/milfs, as shown on the platform’s tag pages. A single word like milfs is ignored and the generic list comes back. strict=0 also doesn’t filter: it only puts tagged models first.

Why does the Stripcash statistics API show zero revenue?

The range was probably not computed yet. The first response for a new date range contains no totals while the calculation runs. Request it again every few seconds until the data appears, and never store that first response as zero.

How can I detect a silent failure in a cam feed?

Check that each feed returns more than zero items when you set it up, alert when nothing has been imported for 24 hours, and compare platforms against each other for the same country or niche.

An API that fails loudly costs you an evening. One that fails silently costs you months, so make every zero prove it is real.