Score 16 archetypes from 12 questionnaire answers and optional derived face metrics. Returns the compatibility matrix — synergy, resonance and tension.
Send your key in either header:
Authorization: Bearer tk_...
X-API-Key: tk_...
Keys are issued by request. Each key carries a daily quota (100 requests per UTC day by default). Calls without a key reach the public website flow and are limited per IP.
| Method | Path | Returns |
|---|---|---|
| POST | /api/reading | archetype, scores, confidence, narrative, compatibility |
| GET | /api/archetypes | all 16 archetypes with names and metadata |
| GET | /api/health | service status |
curl -s -X POST https://triangula.app/api/reading \
-H "Authorization: Bearer tk_..." \
-H "Content-Type: application/json" \
-d '{"face": null, "answers": [5,4,5,1,2,1,5,3,1,4,2,1]}'
answers — exactly 12 numbers in the 1..5 range. face — optional derived
face metrics or null.
{
"ok": true,
"archetype": { "code": "AA-bc", "name": "Pure Leader" },
"scores": { ... },
"confidence": 0.72,
"compatibility": {
"synergy": [ { "code": "CC-ab", "name": "Pure Analyst" } ],
"resonance": [ ... ],
"tension": [ ... ]
},
"disclaimer": "For entertainment and self-reflection only.",
"timestamp": "2026-10-20T12:00:00.000Z"
}
npm install triangula
import { Triangula } from 'triangula';
const client = new Triangula({ apiKey: process.env.TRIANGULA_API_KEY });
const reading = await client.reading({ answers: [5,4,5,1,2,1,5,3,1,4,2,1] });
pip install triangula-sdk
from triangula import Triangula
client = Triangula(api_key="tk_...")
reading = client.reading(answers=[5,4,5,1,2,1,5,3,1,4,2,1])
| Status | code | Meaning |
|---|---|---|
| 400 | invalid_payload | answers is not 12 numbers in 1..5 |
| 401 | invalid_api_key | key unknown or disabled |
| 429 | quota_exceeded / rate_limited | daily limit reached, resets at UTC midnight |
Responses include X-RateLimit-Limit, X-RateLimit-Remaining and
X-RateLimit-Reset.
Photos are processed in the user's browser and never sent to the server. The API accepts only derived face metrics and questionnaire answers — never images.