Download OpenAPI specification:
AI / ML microservice — coach matching, growth areas, IDP, tool reports, comparative analytics, chat support
Generates AI-suggested next actions based on user goals + recent activity. Backed by GPT-4 via the OpenAI service module. If the goal value is UNKNOWN or empty, fallback action generation is used (no goal context).
| action | string Free-form text input for the AI prompt (current/anchor action) |
| goal | string User goal text (set to |
{- "action": "Run weekly 1:1 with my manager",
- "goal": "Improve communication with stakeholders"
}{- "data": {
- "actions": [
- "Schedule a stakeholder feedback round",
- "Draft a weekly status digest"
]
}, - "message": "Generated",
- "success": true
}Generates AI-suggested next actions based on user goals + recent activity. Backed by GPT-4 via the OpenAI service module. Returns a list of behavioural skills/competencies inferred from the supplied action description.
| action | string Free-form text input for the AI prompt (the action to extract skills from) |
{- "action": "Lead a cross-functional retrospective"
}{- "data": {
- "skills": [
- "Facilitation",
- "Active Listening",
- "Conflict Resolution"
]
}, - "message": "Generated",
- "success": true
}Infers user growth areas from assessment + interaction history. Used by the coach to populate the discovery flow. Accepts a learner/tool data payload (assessment scores, low-rated competencies, prior feedback) and returns ranked growth areas with rationale.
| assessmentData | object Free-form text input for the AI prompt (scores, behaviours, free-text) |
| learnerId | integer Internal user ID |
| toolId | integer Tool ID (assessment instrument) |
{- "assessmentData": {
- "lowestRatedSkills": [
- "Strategic Thinking",
- "Delegation"
]
}, - "learnerId": 12345,
- "toolId": 678
}{- "data": {
- "growthAreas": [
- {
- "area": "Strategic Thinking",
- "rationale": "Lowest-scored competency in tool results"
}
]
}, - "message": "Generated",
- "success": true
}AI-powered coach recommendation. Ranks coaches by match score against the learner's profile. Step 1 takes the learner's high-level goal and returns an initial candidate pool plus suggested follow-up questions for step 2.
| goal | string User prompt text - free-form goal statement |
{- "goal": "Become a better people manager"
}{- "data": {
- "candidates": [
- {
- "coachId": 42,
- "matchScore": 0.81
}
], - "followUpQuestion": "What does success look like in 6 months?"
}, - "message": "Generated",
- "success": true
}AI-powered coach recommendation. Ranks coaches by match score against the learner's profile. Step 2 narrows the candidate set using the learner's current work context (role, team, challenges).
| goal | string User prompt text - free-form goal statement (carried from step 1) |
| work | string Free-form text input for the AI prompt (current role / work context) |
{- "goal": "Become a better people manager",
- "work": "Engineering manager leading a team of 8 across two timezones"
}{- "data": {
- "candidates": [
- {
- "coachId": 42,
- "matchScore": 0.86
}
]
}, - "message": "Generated",
- "success": true
}AI-powered coach recommendation. Ranks coaches by match score against the learner's profile. Step 3 finalises the recommendation by incorporating the learner's achievements / strengths.
| achievements | string Free-form text input for the AI prompt (notable accomplishments / strengths) |
| goal | string User prompt text - free-form goal statement (carried forward) |
| work | string Free-form text input for the AI prompt (current role / work context) |
{- "achievements": "Shipped a major platform migration; mentored 3 senior engineers",
- "goal": "Become a better people manager",
- "work": "Engineering manager leading a team of 8"
}{- "data": {
- "recommendedCoaches": [
- {
- "coachId": 42,
- "matchScore": 0.91,
- "rationale": "..."
}
]
}, - "message": "Generated",
- "success": true
}AI-powered coach recommendation. Ranks coaches by match score against the learner's profile. This endpoint maps the learner's free-form statements (typically three discovery-flow answers) to canonical behavioural skill competencies used downstream by the matcher.
| statements | Array of strings Free-form text input for the AI prompt - the three coachee statements from discovery |
{- "statements": [
- "I want to give clearer feedback in 1:1s",
- "I struggle to prioritise across competing projects",
- "I need to delegate more confidently"
]
}{- "data": {
- "behavioural_skills": [
- "Feedback",
- "Prioritisation",
- "Delegation"
]
}, - "message": "Generated",
- "success": true
}Cross-cohort analytics comparing tool/program performance against benchmarks. Supports two auth modes: (1) JWT bearer token (standard in-app calls); (2) encrypted token field in body (for emailed report links — JWT is skipped). When token is supplied, the handler auto-detects PDF tokens (multiple tool IDs) vs single-tool tokens.
| HighGainAreas | Array of objects List of high-gain area objects to surface in the report |
| learnerId | integer Internal user ID |
| requestedBy | integer Internal user ID of the requester (defaults to learnerId) |
| token | string One-time access token (used when no JWT, e.g., emailed report links). Encrypted regular or PDF token. If present, JWT auth is skipped. |
| toolId | integer Tool ID (assessment instrument being compared) |
{- "HighGainAreas": [
- {
- "deltaScore": 1.4,
- "skill": "Strategic Thinking"
}
], - "learnerId": 12345,
- "requestedBy": 12345,
- "toolId": 678
}{- "data": {
- "insights": [
- "..."
], - "summary": "Pre/post improvement across 3 competencies"
}, - "message": "Generated",
- "success": true
}AI-generated personalized email content for outreach or follow-up. This endpoint dispatches a support email (to support@uexcelerate.com) with the supplied subject + body + optional attachments.
| attaches | Array of strings Optional list of attachment URLs / paths |
| description | string Free-form text input for the AI prompt - email body / message content |
| subject | string Email subject line |
{- "description": "I noticed my pre-assessment score didn't update after submission.",
- "subject": "Issue with assessment scoring"
}{- "data": {
- "messageId": "ses-0001"
}, - "message": "Email sent",
- "success": true
}Growth partner (peer) matching algorithm. Returns ranked candidate peers (growth partners) for the requesting learner, filtered by seniority level, industry, and function/department.
| functions | Array of strings List of target functions / departments |
| industry | string Target industry filter |
| level | string Target seniority / leadership level for the partner |
{- "functions": [
- "Engineering",
- "Product"
], - "industry": "Software & Technology",
- "level": "Manager"
}{- "data": {
- "partners": [
- {
- "matchScore": 0.78,
- "userId": 9911
}
]
}, - "message": "Generated",
- "success": true
}Google Gemini chat backend for in-app coaching conversations. Returns the complete persisted chat history (prior conversation messages, array of {role, content}) for the given user/role pair.
| user_id | string Internal user ID (stringified) |
| user_role | string User role (e.g. coach, coachee, admin) |
{- "user_id": "12345",
- "user_role": "coachee"
}{- "history": [
- {
- "content": "Hello",
- "role": "user"
}, - {
- "content": "Hi! How can I help?",
- "role": "assistant"
}
], - "status": "success"
}Google Gemini chat backend for in-app coaching conversations. Submits the user's prompt (with role + persisted conversation context) and returns the assistant's reply.
| prompt | string User prompt text |
| user_id | string Internal user ID (stringified) |
| user_role | string User role (e.g. coach, coachee, admin) |
{- "prompt": "How do I prepare for my first 1:1?",
- "user_id": "12345",
- "user_role": "coachee"
}{- "response": "Start by reviewing the team member's recent goals...",
- "status": "success"
}Google Gemini chat backend for in-app coaching conversations. Returns a condensed summary of the user's recent conversation - used to seed context on the chat resume screen.
| user_id | string Internal user ID (stringified) |
| user_role | string User role (e.g. coach, coachee, admin) |
{- "user_id": "12345",
- "user_role": "coachee"
}{- "recent": "Discussed strategies for delegating to senior team members.",
- "status": "success"
}Goal suggestion and tracking AI. Expands a partial goal stem into a full, well-formed SMART-style goal sentence - powers the goal-completion suggestion in the goal editor UI.
| goals | string Free-form text input for the AI prompt - partial goal text |
{- "goals": "Improve communication with"
}{- "response": "Improve communication with stakeholders by running weekly status updates."
}Goal suggestion and tracking AI. Generates a ranked list of SMART goal candidates for a learner, given a seed goal/skill set and the learner's leadership level.
| goals | string Free-form text input for the AI prompt - existing goal text or skills list |
| level | string Target leadership level (defaults to "Individual Contributor, Manager, Team Lead") |
{- "goals": "Strategic Thinking, Decision Making",
- "level": "Manager"
}{- "data": {
- "goals": [
- "Run a quarterly strategy review with team leads",
- "Document and apply a decision-making framework"
]
}, - "message": "Generated",
- "success": true
}Goal suggestion and tracking AI. Returns a SMART-criteria evaluation (specific/measurable/achievable/relevant/time-bound) for the supplied goal text. Endpoint is currently not wired into the UI - retained for future use.
| goals | string Free-form text input for the AI prompt - the goal sentence to evaluate |
{- "goals": "I want to improve my leadership"
}{- "data": {
- "isSmart": false,
- "missing": [
- "Measurable",
- "Time-bound"
]
}, - "message": "Evaluated",
- "success": true
}Goal suggestion and tracking AI. Single-word autocomplete helper for the goal entry field. Endpoint is currently not wired into the UI - superseded by /complete-goal.
| goals | string Free-form text input for the AI prompt - partial goal text |
{- "goals": "Imp"
}{- "response": "Improve"
}Goal suggestion and tracking AI. Returns a list of behavioural skills / competencies relevant to the supplied goal. Endpoint is currently not wired into the UI - retained for future use.
| goal | string Free-form text input for the AI prompt - the goal to derive skills for |
{- "goal": "Run a quarterly strategy review with team leads"
}{- "response": {
- "skills": [
- "Strategic Thinking",
- "Facilitation",
- "Stakeholder Management"
]
}
}Goal suggestion and tracking AI. Token-level next-word predictor used inline as the learner types - lighter weight than /complete-goal, called per keystroke at typing pauses.
| word | string Free-form text input for the AI prompt - current word/stem |
{- "word": "Develop"
}{- "response": "leadership"
}OpenAI GPT chat backend (parallel to Gemini for A/B/redundancy). Submits a single user prompt to the assistant (continuing the user's persisted thread) and returns the assistant reply.
| prompt | string User prompt text |
| user_id | string Internal user ID (stringified) |
| user_role | string User role (e.g. coach, coachee, admin) |
{- "prompt": "Suggest 3 strategies to delegate without micromanaging.",
- "user_id": "12345",
- "user_role": "coachee"
}{- "response": "1) Clarify decision rights..."
}OpenAI GPT chat backend (parallel to Gemini for A/B/redundancy). Fetches the active conversation record (thread + metadata) for the given user/role pair - distinct from /chat_history which returns only the message list.
| user_id | string Internal user ID (stringified) |
| user_role | string User role (e.g. coach, coachee, admin) |
{- "user_id": "12345",
- "user_role": "coachee"
}{- "conversation": {
- "messages": [
- {
- "content": "Hello",
- "role": "user"
}
], - "threadId": "thread_abc123"
}
}OpenAI GPT chat backend (parallel to Gemini for A/B/redundancy). Provisions a new conversation thread for the given user/role and returns its thread ID, which is then used by /chat.
| user_id | string Internal user ID (stringified) |
| user_role | string User role (e.g. coach, coachee, admin) |
{- "user_id": "12345",
- "user_role": "coachee"
}{- "thread_id": "thread_abc123"
}Individual Development Plan generation. Generates narrative blind-spot insights and a structured development plan, given the learner's identified blind-spot competencies plus the subset they scored lowest on.
| blindSpots | Array of strings All blind-spot competencies identified for the learner |
| lowestRatedBlindSpots | Array of strings Subset of blind-spots with the lowest assessment scores |
{- "blindSpots": [
- "Strategic Thinking",
- "Resilience",
- "Fostering Innovation"
], - "lowestRatedBlindSpots": [
- "Resilience",
- "Fostering Innovation"
]
}{- "data": {
- "developmentPlan": [
- {
- "actions": [
- "..."
], - "skill": "Resilience"
}
], - "insights": [
- "..."
]
}, - "message": "Generated",
- "success": true
}AI summarization of free-form coaching notes. Accepts raw notes text and returns a structured summary (key themes, action items, follow-ups).
| notes | string Free-form text input for the AI prompt - the notes content to summarise |
{- "notes": "Discussed Q3 priorities. Coachee struggling with delegation."
}{- "response": {
- "actionItems": [
- "Identify 2 tasks to delegate this week"
], - "summary": "Coachee needs support with delegation in Q3."
}
}AI summarization of free-form coaching notes. Auto-detects the file type from the URL's extension and routes to the matching extract+summarise pipeline. Supported extensions: .pdf, .doc, .docx, .txt, .ppt, .pptx.
| url | string <uri> File URL (.pdf, .doc, .docx, .txt, .ppt, .pptx) |
{- "response": {
- "summary": "Session covered Q3 goals and delegation strategies."
}
}AI summarization of free-form coaching notes. Performs OCR + summary on a handwritten / scanned note image (e.g. whiteboard photo) and returns the structured summary.
| url | string <uri> Publicly accessible image URL (S3 presigned or CDN link) |
{
}{- "response": {
- "summary": "Whiteboard captured 3 quarterly objectives."
}
}Tool report insight generation - interprets numeric scores into qualitative narrative. Generates coaching reflections (themes, hypotheses, conversation starters) for a learner's tool report, given the tool, learner, and requester IDs.
| learnerId | integer Internal user ID |
| requestedBy | integer Internal user ID of the requester (defaults to learnerId) |
| toolId | integer Tool ID (assessment instrument) |
{- "learnerId": 12345,
- "requestedBy": 12345,
- "toolId": 678
}{- "data": {
- "reflections": [
- "..."
]
}, - "message": "Generated",
- "success": true
}Tool report insight generation - interprets numeric scores into qualitative narrative. Token-authenticated variant for emailed report links; no JWT required. The encrypted token carries toolId, learnerId, and requestedBy.
| token | string One-time access token (used when no JWT, e.g., emailed report links). Encrypted token containing toolId / learnerId / requestedBy. |
{- "token": "enc::eyJhbGciOi..."
}{- "data": {
- "reflections": [
- "..."
]
}, - "message": "Generated",
- "success": true
}AI tool generation (custom assessment / reflection tool builder). Composes a complete assessment instrument (questions + scale) given a target leadership level, competency set, tool category, and response style (defaults to Likert).
| level | string Target leadership level for the tool |
| skills | Array of strings Competencies / skills the tool should assess |
| toolCategory | string Tool category (e.g. self-assessment, 360, reflection) |
| toolType | string Default: "likert" Response scale style for the tool (defaults to "likert") |
{- "level": "Manager",
- "skills": [
- "Strategic Thinking",
- "Delegation"
], - "toolCategory": "self-assessment",
- "toolType": "likert"
}{- "response": {
- "items": [
- {
- "prompt": "I delegate tasks to my team based on their strengths.",
- "scale": "1-5 (Strongly Disagree to Strongly Agree)"
}
], - "title": "Manager Self-Assessment"
}
}