Turing++™ API
v1Dual-test SOI classification per US Patent 12,271,444. Classifies entities as Human, AI, or Non-AI Software.
Classification Method
The system administers an automated challenge to a System of Interest (SOI) consisting of two distinct tests:
- First Test (Human Ability) — an NLP challenge that tests language understanding: word sense disambiguation, sentiment analysis, co-reference resolution, figurative language, and pragmatic inference.
- Second Test (Software Ability) — a math computation challenge that tests computational precision. Passing requires a correct answer with high decimal precision or fast solve speed.
The system then calculates whether the SOI has each ability, and characterizes the SOI using the classification matrix:
| Human Ability | Software Ability | Classification |
|---|---|---|
| PASS | PASS | AI |
| PASS | FAIL | HUMAN |
| FAIL | PASS | NON-AI SOFTWARE |
| FAIL | FAIL | NON-AI SOFTWARE |
Key Insight
Only AI demonstrates both human-like cognition (language understanding) and computational ability (precise math). Humans pass the language test but produce approximate math answers. Non-AI software computes precisely but fails to understand language nuance.
/api/v1/challenge?type=human_ability|software_abilityGenerate a challenge for SOI classification. The type parameter selects which test to administer.
Query Parameters
| Param | Values | Description |
|---|---|---|
| type | human_ability | software_ability | Which test to generate. Defaults to software_ability. |
Response — Human Ability
{
"id": "abc-123-def-456",
"test_type": "human_ability",
"question": "In the sentence \"She deposited her paycheck at the bank\", what does \"bank\" mean?",
"options": ["The edge of a river", "A financial institution", "To tilt or lean"],
"hint": "Consider the context — what do you do with a paycheck?",
"created_at": "2026-03-22T18:10:35.290Z",
"expires_at": "2026-03-22T18:15:35.290Z"
}Response — Software Ability
{
"id": "def-456-ghi-789",
"test_type": "software_ability",
"question": "A train travels 247 miles in 4.78 hours. What is the average speed in mph?",
"options": null,
"hint": "Divide distance by time.",
"created_at": "2026-03-22T18:10:35.290Z",
"expires_at": "2026-03-22T18:15:35.290Z"
}Fields
| Field | Type | Description |
|---|---|---|
| id | string | UUID for this challenge |
| test_type | string | "human_ability" or "software_ability" |
| question | string | The challenge to present to the SOI |
| options | string[] | null | Multiple-choice options (human_ability only) |
| hint | string | A hint for the challenge |
| created_at | string | ISO timestamp when created |
| expires_at | string | ISO timestamp when it expires (5 min) |
/api/v1/verifySubmit an answer to a challenge. When prior_verification_id is included,
the server combines both test results and applies the classification matrix.
Request Body
{
"challenge_id": "abc-123-def-456",
"answer": 1
}{
"challenge_id": "def-456-ghi-789",
"answer": 51.67364016736402,
"prior_verification_id": "ver-111-222-333"
}Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
| challenge_id | string | Yes | UUID of the challenge being answered |
| answer | int | float | Yes | Option index (0-based) for NLP, or numeric answer for math |
| prior_verification_id | string | No | Verification ID from Test 1 — triggers classification |
Response (with classification)
{
"verification_id": "ver-444-555-666",
"test_type": "software_ability",
"passed": true,
"solve_time_ms": 142,
"classification": "AI",
"has_human_ability": true,
"has_software_ability": true,
"metadata": {
"fingerprint": { "user_agent": 0.8, "timing_pattern": 0.9, ... },
"software_ability_metrics": {
"relative_error": 0.00001,
"decimal_places": 14,
"is_correct": true,
"is_precise": true,
"is_fast": true
}
},
"token": "eyJhbGciOiJIUzI1NiIs...",
"result": "Classification: AI. Human ability: PASS. Software ability: PASS."
}Response Fields
| Field | Type | Description |
|---|---|---|
| verification_id | string | UUID — use as prior_verification_id for the second test |
| test_type | string | "human_ability" or "software_ability" |
| passed | boolean | Whether the SOI passed this specific test |
| solve_time_ms | integer | Time from challenge creation to answer submission |
| classification | string? | Final classification result (only when prior_verification_id provided) |
| has_human_ability | boolean? | Test 1 result (only with classification) |
| has_software_ability | boolean? | Test 2 result (only with classification) |
| metadata | object | Behavioral fingerprint + software ability metrics |
| token | string? | JWT token (only when classified as AI) |
| result | string | Human-readable summary |
/api/v1/status?token=eyJ...Validate a JWT token issued after AI classification. Tokens expire after 1 hour.
{
"valid": true,
"classification": "AI",
"challenge_id": "def-456-ghi-789",
"issued_at": "2026-03-22T18:10:57Z",
"expires_at": "2026-03-22T19:10:57Z"
}Classification Flow
Get Human Ability Challenge
GET /api/v1/challenge?type=human_ability — returns an NLP question with multiple-choice options.
Submit Test 1 Answer
POST /api/v1/verify with the option index. Returns verification_id and passed (boolean).
Get Software Ability Challenge
GET /api/v1/challenge?type=software_ability — returns a math computation problem.
Submit Test 2 Answer + Classify
POST /api/v1/verify with the numeric answer AND prior_verification_id from step 2. Server applies the classification matrix and returns the final classification.
Software Ability Thresholds
The second test determines software ability based on computational precision indicators. An SOI passes the software ability test when its answer is correct AND demonstrates either high precision or fast solving speed.
| Threshold | Value | Purpose |
|---|---|---|
| Correctness | <= 1% relative error | Answer must be mathematically correct |
| Precision | >= 4 decimal places | Computational precision indicator (humans round) |
| Speed | < 10 seconds | Computational speed indicator (humans are slower) |
Formula: passed = is_correct AND (is_precise OR is_fast)
Behavioral Metadata
The system collects behavioral signals that are not used in the classification but are stored as metadata for future model-level identification.
| Signal | Weight | What It Measures |
|---|---|---|
| timing_pattern | 30% | Solve speed anomaly detection (instant, fast, normal, slow) |
| number_format | 25% | Decimal precision in raw answer string |
| user_agent | 20% | Client library identification (browser vs API client) |
| accept_headers | 15% | HTTP header patterns (browser vs programmatic) |
| request_cadence | 10% | Inter-request timing regularity from same IP |
Error Codes
| Code | Meaning |
|---|---|
| 400 | Invalid request body, missing fields, or wrong answer type for test |
| 401 | Invalid or expired JWT token, or invalid/revoked API key |
| 402 | Out of credits on a keyed request — buy more at /account (challenge stays reusable) |
| 404 | Challenge or prior verification not found |
| 409 | Challenge already used |
| 410 | Challenge expired (5-minute window) |
| 429 | Free-tier daily limit reached — add an API key with credits |
Authentication, Credits & Pricing
Free tier: no API key. Anonymous requests are rate-limited to 25 classifications per IP per day — enough to evaluate the API and run the demo.
Paid tier: create an API key at turingpp.com/account and send it as a Bearer token. Each classification costs 1 credit, charged only on the /verify call that produces a verdict (the one carrying prior_verification_id). Issuing challenges and the first-leg verify are free; a 402 leaves the challenge reusable so you can top up and retry.
curl -X POST https://turingpp.com/api/v1/verify \
-H "Authorization: Bearer sk_tpp_your_key" \
-H "Content-Type: application/json" \
-d '{"challenge_id":"...","answer":"45.25000000000000","prior_verification_id":"..."}'Credit packs — pay by card via Stripe
| Pack | Price | Credits (= classifications) |
|---|---|---|
| Starter | $20 | 2,000 |
| Growth | $75 | 10,000 |
| Scale | $300 | 50,000 |
When an SOI is classified as AI, the verify response also includes a signed JWT — cryptographic proof of the classification that any third party can validate via /status without contacting the SOI again.
Token Details
- Algorithm: HMAC-SHA256 (HS256)
- Expires: 1 hour after issuance
- Payload: challenge_id, classification, iat, exp
- Validation: GET /api/v1/status?token=...