Skip to main content
Rep intelligence layers run across multiple analyses to surface patterns no single call can show. Three async jobs:
  • persona_assign — which of 5 sales archetypes does this rep most resemble?
  • methodology_assign — what primary + secondary methodology do they use?
  • synthesis — coaching summary with strengths, gaps, action plan, score trends
Each job is async (returns 202 + job_id), polls a single /intel-jobs/:job_id endpoint until complete, and writes a result that’s queryable via dedicated GET endpoints (/persona, /methodology, /synthesis/latest).

When to run each

The analysis_ids vs recording_urls decision

Both async jobs accept either an explicit list of analysis UUIDs or a list of recording URLs. Pick based on what you have:
  • analysis_ids — much faster (~15–30s). The analyses are already complete; the job only does the meta-step. Use this when the rep has historical analyses already.
  • recording_urls — slower (potentially several minutes). Each URL is run through the analysis pipeline first (with 30-day URL caching), then the meta-step runs. Use this for fresh onboarding when no analyses exist yet.
You can pass at most one — they’re mutually exclusive.

Example: assign a persona from existing analyses

You get back a 202 with { job_id, status: "queued", created_at }.

Polling the job

When status === "completed", result contains the assignment:

Reading the assignment later

/persona/assign writes to persona_assignments. To read the latest at any time:
History (every prior assignment, AI or manual) is at /persona/history.

Manual override

If a manager knows the rep better than the model:
This appends to history with source: "manual". The previous AI assignment is preserved in history but no longer the “current” one.

Methodology — same shape, different output

Replace /persona/ with /methodology/ and the response shape becomes { primary, secondary }:
secondary may be null.

Synthesis — the coaching report

Synthesis takes either lookback_count (newest N analyses) or analysis_ids:
Result shape:
Read the latest at /synthesis/latest. History at /synthesis.

Webhooks for these jobs

Subscribe to:
  • persona.assigned — when persona_assign completes
  • methodology.assigned — when methodology_assign completes
  • profile.synthesized — when synthesis completes
Each carries { org_id, rep_id, job_id, result }. See the webhooks guide.

Doing this from MCP

The model calls assign_rep_persona, polls, then generate_rep_synthesis, polls, and renders both for you.

Cost + latency reference