API documentation
REST API for quiz metadata, questions, and your key's usage. Stable contract under the /api/v1/ prefix.
Authentication
Pass your API key as a Bearer token, or in the X-API-Key header. Create a key from your developer dashboard.
Authorization: Bearer my_xxxxxxxxxxxxxxxx # or X-API-Key: my_xxxxxxxxxxxxxxxx
Rate limits
- Per-minute window: 1,000 requests (default key)
- Daily quota: 10,000 requests (default key)
- A blocked request returns
429with aRetry-Afterheader. Check/api/v1/usagefor live counts.
Endpoints
GET /api/v1/quizzes
List all published quizzes
Example response
{ "quizzes": [ { "slug": "big-five-ocean", "category": "personality", "title": "Big Five Personality Test", "description": "...", "estimated_minutes": 10, "is_pro_only": false }, ... ] }GET /api/v1/quizzes/{slug}
Full quiz: dimensions, questions, answer options
Example response
{ "slug": "big-five-ocean", "title": "Big Five Personality Test", "dimensions": [ {"key": "openness", "label": "Openness", "description": "...", "sort_order": 0}, ... ], "questions": [ {"text": "I have a vivid imagination.", "dimension": "openness", "sort_order": 0, "is_reverse_scored": false}, ... ], "options": [ {"label": "Strongly Disagree", "value": 1}, {"label": "Disagree", "value": 2}, ... ] }GET /api/v1/usage
Your key's current rate-limit and daily-quota usage
Example response
{ "rate_limit_per_minute": 1000, "rate_limit_used": 12, "daily_quota": 10000, "daily_used": 248, "as_of": "2026-05-28T18:23:01+00:00" }
Code samples
Python
import os
import requests
API_KEY = os.environ["MY_API_KEY"]
BASE = "https://api-staging.mytraits.me/api/v1"
def list_quizzes():
r = requests.get(
f"{BASE}/quizzes",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=10,
)
r.raise_for_status()
return r.json()["quizzes"]
if __name__ == "__main__":
for q in list_quizzes():
print(f"{q['slug']:30s} {q['title']}")
JavaScript
const API_KEY = process.env.MY_API_KEY;
const BASE = "https://api-staging.mytraits.me/api/v1";
async function listQuizzes() {
const res = await fetch(`${BASE}/quizzes`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
return data.quizzes;
}
listQuizzes().then((quizzes) => {
for (const q of quizzes) console.log(q.slug, q.title);
});
cURL
curl -H "Authorization: Bearer $MY_API_KEY" \ https://api-staging.mytraits.me/api/v1/quizzes
OpenAPI 3.1 spec
The live machine-readable spec is generated from FastAPI at https://api-staging.mytraits.me/openapi.json. Import it into Postman, Insomnia, or your favorite codegen tool.