PercelX API Reference
The PercelX API is a REST API that returns JSON. It provides access to behavioral assessments, domain analysis, Uri intelligence queries, MIT transformation plans, and developer account management.
https://api.percelx.org · All endpoints require an API key passed in the Authorization header.
All responses follow a consistent envelope:
{
"success": true,
"data": { /* endpoint-specific payload */ },
"meta": { "requestId": "req_7xk2...", "timestamp": "2026-03-20T..." }
}
Authentication
All API requests must include your API key in the Authorization HTTP header as a Bearer token.
Authorization: Bearer pxk_live_a3f7e9b2...
Key types
| Prefix | Type | Description |
|---|---|---|
| pxk_test_... | Test | Free forever. Returns sandbox responses. Never counts against production limits. |
| pxk_live_... | Live | Returns real behavioral data. Requires an active subscription plan. |
Code examples
curl -X POST https://api.percelx.org/api/v1/assess \ -H "Authorization: Bearer pxk_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"userId":"usr_abc","domain":"athletic","variables":{"fear_of_failure":8}}'
// Node.js / browser fetch const res = await fetch('https://api.percelx.org/api/v1/assess', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.PERCELX_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ userId: 'usr_abc', domain: 'athletic', variables: { fear_of_failure: 8 } }), }); const data = await res.json();
import requests, os headers = { "Authorization": f"Bearer {os.environ['PERCELX_API_KEY']}", "Content-Type": "application/json", } payload = {"userId": "usr_abc", "domain": "athletic", "variables": {"fear_of_failure": 8}} r = requests.post("https://api.percelx.org/api/v1/assess", json=payload, headers=headers) data = r.json()
Rate Limits
Rate limits are enforced per API key. Limits reset on a rolling 24-hour window (daily) and a rolling 60-second window (per-minute). Exceeding either limit returns 429 Too Many Requests.
Rate limit response headers
Every response includes these headers so you can monitor usage:
X-RateLimit-Limit-Day: 1000 X-RateLimit-Remaining-Day: 847 X-RateLimit-Limit-Min: 20 X-RateLimit-Remaining-Min: 19 X-RateLimit-Reset: 2026-03-20T08:00:00.000Z
Exceeded limit response
{
"error": "RATE_LIMIT_EXCEEDED",
"message": "Daily limit of 1000 requests exceeded",
"retryAfter": 3600 // seconds until reset
}
Errors
The API uses standard HTTP status codes. Error responses always include a machine-readable error field and a human-readable message.
| HTTP | Error Code | Cause |
|---|---|---|
| 400 | BAD_REQUEST | Missing or invalid parameters in request body. |
| 401 | UNAUTHORIZED | Missing, invalid, or inactive API key. |
| 403 | FORBIDDEN | Valid key but insufficient tier for this endpoint. |
| 404 | NOT_FOUND | Resource (user, key, plan) does not exist. |
| 409 | CONFLICT | Duplicate resource (e.g., email already registered). |
| 429 | RATE_LIMIT_EXCEEDED | Daily or per-minute request limit reached. |
| 500 | INTERNAL_ERROR | Unexpected server error. Contact support if recurring. |
| 503 | SERVICE_UNAVAILABLE | Temporary downtime or maintenance window. |
SDKs & Libraries
curl, JavaScript fetch, and Python requests.Community libraries and helper packages will be listed here as they are published.
Assessment API
Submit behavioral variable scores for a user and domain. Returns sphere score, tier classification, top limitations, MIT transformation plan, and 90-day roadmap.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Your unique identifier for the user. Opaque to PercelX. |
| domain | string | required | One of: athletic, professional, dating, total |
| variables | object | required | Map of variable names → integer scores (1–10). See Variable Reference. |
| includeRoadmap | boolean | optional | Include 90-day roadmap in response. Default: false |
curl -X POST https://api.percelx.org/api/v1/assess \ -H "Authorization: Bearer pxk_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "userId": "usr_abc123", "domain": "athletic", "variables": { "fear_of_failure": 8, "self_discipline": 5, "identity_clarity": 6, "coachability": 7, "resilience": 4 }, "includeRoadmap": true }'
const res = await fetch('https://api.percelx.org/api/v1/assess', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ userId: 'usr_abc123', domain: 'athletic', variables: { fear_of_failure: 8, self_discipline: 5, identity_clarity: 6 }, }), }); const { profile, topLimitations, mitPlan } = await res.json();
r = requests.post(
"https://api.percelx.org/api/v1/assess",
json={
"userId": "usr_abc123",
"domain": "athletic",
"variables": {"fear_of_failure": 8, "self_discipline": 5},
},
headers=headers
)
data = r.json()
Response
{
"success": true,
"profile": {
"sphereScore": 68,
"tier": "Growth Zone",
"domain": "athletic"
},
"topLimitations": ["fear_of_failure", "resilience"],
"mitPlan": {
"phase1": "Identity Rebuild",
"duration": "21 days",
"actions": [{ "day": 1, "task": "Journal fear triggers" }, ...]
},
"roadmap": { /* present if includeRoadmap: true */ },
"requestId": "req_7xk2a9d3"
}
Given a set of behavioral variables, returns a ranked diagnosis of root-cause patterns — identifying primary blockers across all life spheres without requiring a domain specification.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | Your user identifier. |
| variables | object | required | Variable name → score (1–10) map. Cross-domain variables accepted. |
Given a sphere score and top limitations, generates a full MIT (Micro-Intervention Trajectory) plan with phases, daily actions, and milestones.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | |
| domain | string | required | athletic | professional | dating | total |
| sphereScore | number | required | Score 0–100 from a previous /assess call. |
| limitations | string[] | required | Top limitation variable names from /assess. |
Returns a list of all behavioral domains supported by the API with their metadata.
{
"domains": [
{ "id": "athletic", "label": "Athletic Performance", "variables": 28 },
{ "id": "professional", "label": "Professional Growth", "variables": 31 },
{ "id": "dating", "label": "Relationships & Dating", "variables": 24 },
{ "id": "total", "label": "Total Life Rhythm", "variables": 120 }
]
}
Returns the full catalog of behavioral variables with descriptions, domain mappings, and scoring guides.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| domain | string | optional | Filter to a specific domain. |
| search | string | optional | Full-text search on variable names and descriptions. |
Submit up to 50 user assessment payloads in a single request. Responses are returned in the same order as the input array.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| assessments | array | required | Array of assessment objects. Each has the same shape as a single /assess request body. Max 50 items. |
Uri API
Submit a free-text behavioral query and receive sphere impact analysis, root-cause pattern identification, and LLM-driven transformation narrative grounded in PercelX's behavioral library.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| query | string | required | Natural language description of the behavioral challenge. Max 500 chars. |
| domain | string | optional | Constrains analysis to a specific domain. |
| userId | string | optional | Attach query to a user for history tracking. |
{
"success": true,
"insight": {
"rootPattern": "fear_of_failure",
"confidence": 0.87,
"sphereImpact": { "mental": -32, "athletic": -28, "identity": -19 },
"narrative": "The freeze response is a protection mechanism..."
},
"transformation": { "phase1": "Reframe identity under pressure", ... },
"followUpQuestions": ["How long has this pattern been active?", ...]
}
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| sessionId | string | required | Session ID from a previous /uri/search response. |
| followUp | string | required | The follow-up question or context. Max 500 chars. |
| userId | string | optional |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | required | |
| limit | number | optional | Max results. Default 20, max 100. |
| offset | number | optional | Pagination offset. Default 0. |
Returns the current status of the Uri intelligence service. Useful for health checks and monitoring.
Keys & Account
Returns complete developer account state: billing plan, active API keys, usage summary, and call history.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | required | Human-readable name for this key. |
| environment | string | required | test or live. Live keys require an active subscription. |
| description | string | optional | |
| allowedDomains | string[] | optional | Restrict key to specific domains. Empty = all allowed. |
Permanently deactivates an API key. All requests using this key will immediately begin returning 401 UNAUTHORIZED. This action cannot be undone.
{
"success": true,
"plan": "STARTER",
"status": "active",
"currentPeriodEnd": "2026-04-20T00:00:00.000Z",
"active": true
}
Behavioral Domains
| ID | Label | Variables | Description |
|---|---|---|---|
| athletic | Athletic Performance | 28 | Coaches, athletes, and sports orgs. Covers mental toughness, coachability, identity, pressure performance. |
| professional | Professional Growth | 31 | Career, leadership, business. Covers execution, influence, identity, and strategic thinking. |
| dating | Relationships & Dating | 24 | Attachment, communication, self-worth, emotional availability, and pattern awareness. |
| total | Total Life Rhythm | 120+ | Cross-domain full-life assessment. Covers all spheres: mental, physical, financial, social, spiritual. |
Webhook Events
| Event | Trigger |
|---|---|
| developer.subscribed | A developer completes a Stripe checkout and activates a plan. |
| developer.upgraded | Plan changes from a lower tier to a higher one. |
| developer.cancelled | Subscription cancelled. Access continues until period end. |
| developer.key_created | A new API key is issued for the developer account. |
| developer.key_revoked | An API key is permanently deactivated. |
| developer.rate_limit_exceeded | A key hits its daily or per-minute limit. |
Changelog
March 2026
v1.0 — Developer Platform Launch
- Developer registration & API key management
- Assessment, diagnose, plan, and variables endpoints
- Uri search & followup endpoints
- Stripe-powered subscription billing (STARTER / GROWTH / PROFESSIONAL)
- Rate limiting middleware on all
pxk_keys - Per-key usage tracking & call history in dashboard