millionways API
Behavioral intelligence for high-stakes decisions
millionways delivers behavioral insight to support critical decisions across finance and leadership. Built on Thorsten 4, our proprietary Large Psychology Model, grounded in over a decade of behavioral research.
Behavioral intelligence is the missing AI layer. Generative models predict what comes next. Thorsten 4 analyzes behavioral patterns that shape how decisions are formed, even when outputs appear similar.
Thorsten 4 can operate independently or alongside generative models to surface decision-relevant behavioral signals where traditional AI falls short. Designed for environments where uncertainty, pressure, and consequence matter, emphasizing interpretability and behavioral insight to support human judgment, not opaque automation.
Core Endpoints
| Endpoint | Description |
|---|---|
POST /v1/analyze |
Analyze text to extract personality profile |
POST /v1/chat |
Chat with personality context and prompt injection |
POST /v1/match |
Calculate compatibility between profiles |
Quickstart
1. Get your API key
Contact mail@millionways.ai to get your API key.
2. Analyze text
Extract a personality profile from any text:
curl https://api.millionways.org/v1/analyze \
-H "Authorization: Bearer $MILLIONWAYS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "I thrive in competitive environments and always push myself to exceed targets. Building strong relationships with my team is important, but I believe results speak louder than words."
}'
3. Use the profile in chat
Inject the profile into a chat context with your custom prompt:
curl https://api.millionways.org/v1/chat \
-H "Authorization: Bearer $MILLIONWAYS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "How should I approach this customer about pricing?"}
],
"profile": {
"motives": {"power": 65, "achievement": 80, "contact": 40}
},
"system_prompt": "This profile is from a customer discovery call. Help the sales rep close this deal."
}'
Authentication
The API uses Bearer token authentication. Include your API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Store your API key in an environment variable and never commit it to source control.
Analyze
Analyze real-world material — text or audio from earnings calls, interviews, meetings, or integrated systems via our API. Thorsten 4 identifies decision-relevant behavioral patterns across language, interaction, and context, surfacing interpretable behavioral insight that adds behavioral context alongside existing data and qualitative inputs.
Request body
| Parameter | Type | Description |
|---|---|---|
contentrequired |
string | Text to analyze (max 50,000 characters) |
languageoptional |
string | Language code. Defaults to "en". Non-English is auto-translated. |
Response
{
"id": "analysis_a1b2c3d4e5f6",
"object": "analysis",
"created": 1706140800,
"profile": {
"motives": {
"power": 65,
"achievement": 80,
"contact": 40
},
"emotions": {
"approach": 72,
"avoidance": 28
},
"preferences": {
"external": 60,
"internal": 40,
"detail": 45,
"realization": 55,
"analytical": 50,
"holistic": 50,
"path": 35,
"goal": 65
}
},
"levels": {
"level1": 5,
"level2": 15,
"level3": 30,
"level4": 40,
"level5": 10
},
"insights": {
"summary": "High achievement drive with strong focus on results...",
"strengths": ["Goal-oriented", "Competitive drive"],
"development_areas": ["Relationship building"]
},
"usage": {
"characters": 847
}
}
Chat
Chat with personality context. Inject a millionways profile and a custom system prompt to build human-intelligence LLM products.
Request body
| Parameter | Type | Description |
|---|---|---|
messagesrequired |
array | Array of message objects with role and content |
profilerequired |
object | Personality profile from /v1/analyze |
system_promptoptional |
string | Custom prompt for context injection (see Prompt Injection) |
contextoptional |
string | Preset context: empathy, hr, sales, support, health |
levelsoptional |
object | Developmental levels from /v1/analyze |
streamoptional |
boolean | Enable streaming. Defaults to false. |
max_tokensoptional |
integer | Max response tokens. Defaults to 500. |
Example: Custom prompt injection
curl https://api.millionways.org/v1/chat \
-H "Authorization: Bearer $MILLIONWAYS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "user", "content": "What questions should I ask in the second interview?"}
],
"profile": {
"motives": {"power": 30, "achievement": 85, "contact": 60}
},
"system_prompt": "This profile is from a job candidate resume. Help the hiring manager prepare for a second interview. Focus on validating the high achievement drive and assessing team collaboration skills."
}'
Response
{
"id": "chat_x1y2z3",
"object": "chat.completion",
"created": 1706140900,
"content": "Based on this candidate's profile, I recommend focusing on...",
"usage": {
"prompt_tokens": 245,
"completion_tokens": 312,
"total_tokens": 557
}
}
Match
Calculate compatibility between two personality profiles. Useful for team composition, candidate-role fit, and relationship insights.
Request body
| Parameter | Type | Description |
|---|---|---|
profile_arequired |
object | First personality profile |
profile_brequired |
object | Second personality profile |
contextoptional |
string | Context for matching (e.g., "team", "hiring") |
Response
{
"id": "match_m1n2o3",
"object": "match",
"created": 1706141000,
"score": 72,
"compatibility": {
"overall": 72,
"motives": 68,
"emotions": 75,
"preferences": 74
},
"insights": {
"strengths": [
"Aligned achievement orientation",
"Compatible social and connection needs"
],
"challenges": [
"Different levels of desire for control"
],
"recommendations": [
"Establish clear decision-making boundaries early"
]
}
}
Profiles
A profile is the structured output from the /v1/analyze endpoint. It contains three main components:
Motives
Core psychological drivers (0-100 scale):
- power — Drive for influence, control, and impact
- achievement — Drive for success, excellence, and mastery
- contact — Drive for connection, belonging, and relationships
Emotions
Emotional regulation patterns:
- approach — Tendency toward positive engagement and opportunity-seeking
- avoidance — Tendency toward risk avoidance and threat-sensitivity
Preferences
Cognitive and behavioral styles:
- external/internal — Focus on outer world vs inner reflection
- detail/realization — Attention to specifics vs implementation
- analytical/holistic — Systematic vs intuitive thinking
- path/goal — Process-oriented vs outcome-oriented
Prompt Injection
The system_prompt parameter lets you inject custom context into the chat. This is how you tell the AI how to interpret the profile and what to do with it.
Example prompts
Sales Intelligence
"This profile is from a customer discovery call transcript. Help the sales rep understand how to position our product and anticipate objections based on the customer's communication style."
Hiring
"This profile is from a job candidate's cover letter and writing sample. Help the hiring manager assess fit for a senior engineering role that requires both technical leadership and cross-functional collaboration."
Customer Support
"This profile is from a customer's support ticket history. Help the support agent de-escalate this frustrated customer by adapting their communication approach."
Healthcare
"This profile is from a patient intake form. Help the clinician understand how to communicate treatment options in a way that resonates with this patient's decision-making style."
Preset Contexts
Instead of writing a custom system_prompt, you can use preset contexts:
| Context | Description |
|---|---|
empathy |
Empathetic support — validating, understanding, non-judgmental |
hr |
HR intelligence — candidate evaluation, team fit, hiring insights |
sales |
Sales intelligence — customer insights, objection handling, closing strategies |
support |
Support optimization — de-escalation, personalized resolution |
health |
Healthcare communication — patient communication, adherence support |
If you provide both system_prompt and context, the custom system_prompt takes precedence.
Errors
The API uses standard HTTP status codes and returns errors in a consistent format:
{
"error": {
"type": "invalid_request_error",
"message": "content is required",
"param": "content"
}
}
| Status | Type | Description |
|---|---|---|
| 400 | invalid_request_error | Invalid parameters or request body |
| 401 | authentication_error | Invalid or missing API key |
| 403 | permission_error | Access denied |
| 429 | rate_limit_error | Too many requests |
| 500 | api_error | Internal server error |
Rate Limits
| Plan | Requests/day | Max content length |
|---|---|---|
| Standard | 500 | 50,000 characters |
| Unlimited | Unlimited | 50,000 characters |
Rate limits reset at midnight UTC.