Skip to Content
APIOverview

AI Censorship Monitoring API

The GPTfake API is a REST interface for GPTfake’s independent AI censorship data: refusal rates, bias scores, policy-change timelines, and research datasets across ChatGPT, Claude, Gemini, Mistral, and Qwen, all measured against a fixed 500-prompt set. Every response carries a last_updated timestamp and a sample size. Built for researchers, data journalists, and developers who need machine-readable evidence, not marketing claims.

Unlike a provider’s own moderation endpoint (e.g. the OpenAI moderation API), GPTfake is an independent cross-check: our data measures how each model actually behaves against a standardized prompt battery, scored by a transparent methodology we publish in full — not by the lab being measured.

Base URL

https://api.gptfake.com/v1

Quick start

Every request requires an API key passed as a bearer token. Get one from your dashboard, then call any endpoint:

curl https://api.gptfake.com/v1/monitoring/chatgpt/metrics \ -H "Authorization: Bearer YOUR_API_KEY"

Response:

{ "model": "chatgpt", "version": "gpt-4o", "metrics": { "overall_refusal_rate": 18.7, "political_refusal_rate": 34.2, "safety_refusal_rate": 67.8, "bias_score": -12 }, "trend": "rising", "last_updated": "2024-11-25T00:00:00Z" }

Sample numbers above are illustrative. Live values are returned by the API and refreshed on the cadence described in our monitoring methodology. Every figure carries a last_updated timestamp and a sample size.

Authentication

All requests are authenticated with an API key sent as a bearer token in the Authorization header. Keys are scoped to a plan tier and can be rotated at any time. OAuth 2.0 is available for applications acting on behalf of other users.

curl -H "Authorization: Bearer YOUR_API_KEY" \ https://api.gptfake.com/v1/monitoring/chatgpt/metrics

See Authentication overview, API keys, and OAuth 2.0.

Endpoints

The API is organized into two products: the Monitoring API (live and historical censorship/bias data) and the Research API (studies, publications, and downloadable datasets).

Monitoring data

GET /monitoring/{model}/metrics

Models: chatgpt, claude, gemini, mistral, qwen

curl https://api.gptfake.com/v1/monitoring/chatgpt/metrics \ -H "Authorization: Bearer YOUR_API_KEY"
GET /monitoring/{model}/history?period=30d
  • period: 7d, 30d, 90d, 1y
  • category: political, safety, social, all

Model comparison

GET /monitoring/compare?models=chatgpt,claude,gemini

Bias analysis

GET /bias/{model}?topics=political,social,economic

Research

GET /research/publications?year=2024 GET /research/datasets GET /research/datasets/{dataset_id}/download

Webhooks

Subscribe to significant changes — policy shifts and censorship spikes — without polling:

POST /webhooks { "url": "https://your-app.com/webhook", "events": ["policy_change", "censorship_spike"], "models": ["chatgpt", "claude"] }

Full reference: Monitoring API · Research API.

Rate limits

TierRequests/Hour
Free100
Researcher1,000
Pro10,000
EnterpriseCustom

Error handling

{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded", "retry_after": 3600 } }
StatusMeaning
400Bad Request
401Unauthorized — missing or invalid key
403Forbidden — key lacks scope for this resource
404Model / resource not found
429Rate limit exceeded

SDKs (Python & JavaScript)

Official SDKs wrap authentication, retries, and pagination so you can pull data in a few lines.

Python

pip install gptfake-sdk
from gptfake import GPTfakeClient client = GPTfakeClient('YOUR_API_KEY') metrics = client.get_metrics('chatgpt') print(f"Refusal rate: {metrics.overall_refusal_rate}%") history = client.get_history('chatgpt', period='30d')

Full guide: Python SDK.

JavaScript

npm install @gptfake/sdk
import { GPTfakeClient } from '@gptfake/sdk'; const client = new GPTfakeClient('YOUR_API_KEY'); const metrics = await client.getMetrics('chatgpt'); console.log(`Refusal rate: ${metrics.overallRefusalRate}%`);

Full guide: JavaScript SDK.

Support

Next steps