Pricing Dashboard →

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.

Base URL: https://api.percelx.org  ·  All endpoints require an API key passed in the Authorization header.

All responses follow a consistent envelope:

Standard success response
{
  "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.

Required header — every request
Authorization: Bearer pxk_live_a3f7e9b2...

Key types

PrefixTypeDescription
pxk_test_...TestFree forever. Returns sandbox responses. Never counts against production limits.
pxk_live_...LiveReturns real behavioral data. Requires an active subscription plan.
Security: Never expose your live API key client-side. All production calls should be made server-side. Your test key is safe to use in development environments.

Code examples

curl
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}}'
JavaScript (fetch)
// 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();
Python (requests)
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.

Free (test key)
100 / day
10 req/min
Starter
1,000 / day
20 req/min
Growth
5,000 / day
100 req/min
Professional
10,000 / day
100 req/min
Enterprise
Unlimited
500 req/min

Rate limit response headers

Every response includes these headers so you can monitor usage:

Response headers
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

429 Too Many Requests
{
  "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.

HTTPError CodeCause
400BAD_REQUESTMissing or invalid parameters in request body.
401UNAUTHORIZEDMissing, invalid, or inactive API key.
403FORBIDDENValid key but insufficient tier for this endpoint.
404NOT_FOUNDResource (user, key, plan) does not exist.
409CONFLICTDuplicate resource (e.g., email already registered).
429RATE_LIMIT_EXCEEDEDDaily or per-minute request limit reached.
500INTERNAL_ERRORUnexpected server error. Contact support if recurring.
503SERVICE_UNAVAILABLETemporary downtime or maintenance window.

SDKs & Libraries

Official SDKs are in development. In the meantime, use the REST API directly — it works with any HTTP client. The examples throughout this reference use curl, JavaScript fetch, and Python requests.

Community libraries and helper packages will be listed here as they are published.

Assessment API

POST /api/v1/assess Submit behavioral variables, receive full profile

Submit behavioral variable scores for a user and domain. Returns sphere score, tier classification, top limitations, MIT transformation plan, and 90-day roadmap.

STARTER Available on all plans including free test key.

Request body

ParameterTypeRequiredDescription
userIdstringrequiredYour unique identifier for the user. Opaque to PercelX.
domainstringrequiredOne of: athletic, professional, dating, total
variablesobjectrequiredMap of variable names → integer scores (1–10). See Variable Reference.
includeRoadmapbooleanoptionalInclude 90-day roadmap in response. Default: false
Request
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
  }'
JavaScript
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();
Python
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

200 OK
{
  "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"
}
POST /api/v1/diagnose Deep root-cause diagnosis from variable set

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.

STARTER

Request body

ParameterTypeRequiredDescription
userIdstringrequiredYour user identifier.
variablesobjectrequiredVariable name → score (1–10) map. Cross-domain variables accepted.
POST /api/v1/plan Generate MIT transformation plan from a profile

Given a sphere score and top limitations, generates a full MIT (Micro-Intervention Trajectory) plan with phases, daily actions, and milestones.

STARTER

Request body

ParameterTypeRequiredDescription
userIdstringrequired
domainstringrequiredathletic | professional | dating | total
sphereScorenumberrequiredScore 0–100 from a previous /assess call.
limitationsstring[]requiredTop limitation variable names from /assess.
GET /api/v1/plan/domains List all available behavioral domains

Returns a list of all behavioral domains supported by the API with their metadata.

STARTER
200 OK
{
  "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 }
  ]
}
GET /api/v1/variables List all behavioral variable definitions

Returns the full catalog of behavioral variables with descriptions, domain mappings, and scoring guides.

STARTER

Query parameters

ParameterTypeRequiredDescription
domainstringoptionalFilter to a specific domain.
searchstringoptionalFull-text search on variable names and descriptions.
POST /api/v1/assess/batch Batch-assess up to 50 users in one call Enterprise
PROFESSIONAL+ Requires Professional or Enterprise plan.

Submit up to 50 user assessment payloads in a single request. Responses are returned in the same order as the input array.

Request body

ParameterTypeRequiredDescription
assessmentsarrayrequiredArray of assessment objects. Each has the same shape as a single /assess request body. Max 50 items.

Uri API

POST /api/uri/search Natural-language behavioral intelligence query

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.

STARTER

Request body

ParameterTypeRequiredDescription
querystringrequiredNatural language description of the behavioral challenge. Max 500 chars.
domainstringoptionalConstrains analysis to a specific domain.
userIdstringoptionalAttach query to a user for history tracking.
200 OK
{
  "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?", ...]
}
POST /api/uri/followup Follow-up on a previous Uri query Growth+
GROWTH+ Requires Growth or higher plan.

Request body

ParameterTypeRequiredDescription
sessionIdstringrequiredSession ID from a previous /uri/search response.
followUpstringrequiredThe follow-up question or context. Max 500 chars.
userIdstringoptional
GET /api/uri/history Retrieve query history for a user Growth+
GROWTH+

Query parameters

ParameterTypeRequiredDescription
userIdstringrequired
limitnumberoptionalMax results. Default 20, max 100.
offsetnumberoptionalPagination offset. Default 0.
GET /api/uri/health Check Uri service availability

Returns the current status of the Uri intelligence service. Useful for health checks and monitoring.

Keys & Account

GET /api/v1/dev/dashboard Developer account summary, keys, and usage
Requires JWT authentication (your developer account token), not an API key.

Returns complete developer account state: billing plan, active API keys, usage summary, and call history.

POST /api/v1/dev/keys Create a new API key
Requires JWT auth.

Request body

ParameterTypeRequiredDescription
namestringrequiredHuman-readable name for this key.
environmentstringrequiredtest or live. Live keys require an active subscription.
descriptionstringoptional
allowedDomainsstring[]optionalRestrict key to specific domains. Empty = all allowed.
One-time reveal: The raw API key is returned only in this response. Store it immediately — it cannot be retrieved again.
DEL /api/v1/dev/keys/:id Revoke an API key permanently
Requires JWT auth.

Permanently deactivates an API key. All requests using this key will immediately begin returning 401 UNAUTHORIZED. This action cannot be undone.

GET /api/billing/dev/status Current subscription plan and status
Requires JWT auth.
200 OK
{
  "success":          true,
  "plan":             "STARTER",
  "status":           "active",
  "currentPeriodEnd": "2026-04-20T00:00:00.000Z",
  "active":           true
}

Behavioral Domains

IDLabelVariablesDescription
athleticAthletic Performance28Coaches, athletes, and sports orgs. Covers mental toughness, coachability, identity, pressure performance.
professionalProfessional Growth31Career, leadership, business. Covers execution, influence, identity, and strategic thinking.
datingRelationships & Dating24Attachment, communication, self-worth, emotional availability, and pattern awareness.
totalTotal Life Rhythm120+Cross-domain full-life assessment. Covers all spheres: mental, physical, financial, social, spiritual.

Webhook Events

Webhooks let your server receive real-time notifications for subscription changes, key events, and billing updates. Configure your endpoint in the developer dashboard.
EventTrigger
developer.subscribedA developer completes a Stripe checkout and activates a plan.
developer.upgradedPlan changes from a lower tier to a higher one.
developer.cancelledSubscription cancelled. Access continues until period end.
developer.key_createdA new API key is issued for the developer account.
developer.key_revokedAn API key is permanently deactivated.
developer.rate_limit_exceededA 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