Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.heymilo.ai/llms.txt

Use this file to discover all available pages before exploring further.

Guide: Resume (Optional) to Voice Agent (Sales Representative)

Use case: Sales hiring where you want to screen resumes when available, but don’t want to block candidates who don’t have a polished resume. Many great salespeople come from non-traditional backgrounds — this workflow lets them skip straight to the voice interview if they prefer, while still giving you resume insights when provided.

What You’ll Build

A two-stage hiring pipeline with an optional first stage:
  1. Resume Screening (Optional) — AI analyzes the candidate’s resume if provided. Unlike a required resume screen, candidates who skip this step still advance to the voice interview. You get bonus signal when a resume is available, but no one is blocked.
  2. Voice Interview (Video) — Every candidate completes a video interview focused on sales skills, deal execution, and motivation. The AI scores communication, persuasion, and role fit.

Step 1: Create the Agent

Create a posting with a two-step workflow. The key difference from the Software Engineer guide is setting "optional": true on the resume step so candidates are not required to upload a resume.
curl -X POST "https://api.heymilo.network/api/v4/postings" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Sales Representative - Mid Market",
    "description": "We are hiring Mid Market Sales Representatives to drive new business. 2+ years of B2B sales experience preferred but not required — we value hustle and coachability over pedigree. You will own the full sales cycle from prospecting to close for accounts in the $50K-$500K ARR range. OTE $120K-$180K with uncapped commissions.",
    "interviewer_name": "Rachel",
    "language": "en",
    "company_overview": "CloudMetrics is a fast-growing analytics platform helping mid-market companies make data-driven decisions. 200+ customers, $40M ARR, and growing 100% YoY.",
    "job_overview": "Own the full sales cycle for mid-market accounts. Prospect, demo, negotiate, and close deals in the $50K-$500K ARR range.",
    "workflow": [
      {
        "type": "resume",
        "config": {
          "optional": true
        },
        "questions": [
          {
            "modality": "resume_eligibility",
            "text": "Has B2B sales experience (any duration)"
          },
          {
            "modality": "resume_scoring",
            "text": "Track record of meeting or exceeding sales quota",
            "weight": 3.0
          },
          {
            "modality": "resume_scoring",
            "text": "Experience selling SaaS or technology products",
            "weight": 2.0
          },
          {
            "modality": "resume_scoring",
            "text": "Experience with mid-market or enterprise sales cycles",
            "weight": 2.0
          },
          {
            "modality": "resume_scoring",
            "text": "Familiarity with CRM tools (Salesforce, HubSpot, etc.)",
            "weight": 1.0
          }
        ]
      },
      {
        "type": "web_interview",
        "config": {
          "video": true,
          "num_questions": 5
        },
        "questions": [
          {
            "modality": "voice",
            "text": "Walk me through a deal you closed that you are most proud of. What was the deal size, who was involved, and what made it successful?",
            "evaluation_criteria": "Assess deal execution skills, ability to navigate complex sales cycles, and results orientation. Look for specifics: deal size, timeline, stakeholders, and the candidate's exact contribution.",
            "score_of_1": "Cannot describe a specific deal or gives vague generalities about selling.",
            "score_of_5": "Provides a detailed, compelling deal narrative with clear metrics, multi-threading across stakeholders, and a creative approach to overcoming objections.",
            "question_type": "open-ended",
            "score_weight": 3.0,
            "min_follow_ups": 1,
            "max_follow_ups": 2
          },
          {
            "modality": "voice",
            "text": "Imagine I am a VP of Analytics at a 500-person company. Give me your 60-second pitch on why I should consider CloudMetrics.",
            "evaluation_criteria": "Evaluate the candidate's ability to pitch on the spot. Look for a value-driven (not feature-driven) pitch that addresses business outcomes, competitive differentiation, and a clear call to action.",
            "score_of_1": "Rambling, feature-focused, or unable to articulate value. No structure.",
            "score_of_5": "Crisp, confident pitch that leads with business value, includes a relevant proof point, and ends with a clear next step.",
            "question_type": "open-ended",
            "score_weight": 3.0,
            "min_follow_ups": 1,
            "max_follow_ups": 2
          },
          {
            "modality": "voice",
            "text": "Tell me about a time you lost a deal. What happened, and what did you learn from it?",
            "evaluation_criteria": "Assess self-awareness, resilience, and ability to learn from failure. Strong candidates own the loss rather than blaming external factors.",
            "score_of_1": "Blames the loss entirely on external factors or cannot recall a specific example.",
            "score_of_5": "Owns the loss, provides honest self-reflection, and describes concrete changes made to their process as a result.",
            "question_type": "open-ended",
            "score_weight": 2.0,
            "min_follow_ups": 1,
            "max_follow_ups": 1
          },
          {
            "modality": "voice",
            "text": "How do you build pipeline? Walk me through your typical prospecting workflow in a given week.",
            "evaluation_criteria": "Evaluate prospecting methodology and discipline. Look for a structured approach that includes multiple channels (cold call, email, social, referrals) and clear activity metrics.",
            "score_of_1": "No clear process, relies solely on inbound leads, or cannot articulate prospecting habits.",
            "score_of_5": "Describes a disciplined, multi-channel prospecting system with specific daily/weekly activity targets and creative outreach strategies.",
            "question_type": "open-ended",
            "score_weight": 2.5,
            "min_follow_ups": 1,
            "max_follow_ups": 1
          },
          {
            "modality": "voice",
            "text": "Why are you interested in selling an analytics product? What excites you about this space?",
            "evaluation_criteria": "Assess genuine interest in the product space and company fit. Look for curiosity about data/analytics and understanding of why it matters to businesses.",
            "score_of_1": "Generic answer that could apply to any company. No interest in the analytics space.",
            "score_of_5": "Shows genuine curiosity about analytics, articulates why data-driven companies win, and connects it to their own career goals.",
            "question_type": "open-ended",
            "score_weight": 1.5,
            "min_follow_ups": 0,
            "max_follow_ups": 1
          }
        ]
      }
    ]
  }'
Response:
{
  "object": "posting",
  "data": {
    "object": "posting",
    "id": "D9E0F1A2",
    "status": "active",
    "urls": {
      "candidate_url": "https://candidates.heymilo.io/cloudmetrics/sales-representative",
      "ingestion_url_key": "qS4tU6vW8xY0zA2bC4dE6fG8hI0jK2lM4nO6pQ",
      "review_url": "https://admin.heymilo.ai/w/WORKSPACE_ID/lab2/D9E0F1A2/1-details"
    },
    "created_at": 1739612400.0,
    "posting": { ... }
  }
}
Optional vs. required resume screening: When "optional": true is set on the resume step, candidates who skip the resume upload proceed directly to the voice interview. You’ll still see resume results for candidates who do upload one, giving you bonus signal without creating friction for candidates who don’t have a polished resume handy.

Step 2: Manage Questions After Creation

List all voice interview questions

curl -X GET "https://api.heymilo.network/api/v4/postings/D9E0F1A2/questions?modality=voice" \
  -H "X-API-KEY: your_api_key_here"

List resume scoring criteria

curl -X GET "https://api.heymilo.network/api/v4/postings/D9E0F1A2/questions?modality=resume_scoring" \
  -H "X-API-KEY: your_api_key_here"

Add a new interview question

Maybe after a few interviews, you realize you want to ask about objection handling:
curl -X POST "https://api.heymilo.network/api/v4/postings/D9E0F1A2/questions" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "modality": "voice",
    "text": "What is the toughest objection you regularly face in sales, and how do you handle it?",
    "evaluation_criteria": "Assess objection handling skills. Look for a repeatable framework, not just a one-off example.",
    "score_of_1": "No clear approach to handling objections.",
    "score_of_5": "Describes a structured objection handling framework with a specific, compelling example.",
    "question_type": "open-ended",
    "score_weight": 2.0,
    "min_follow_ups": 1,
    "max_follow_ups": 1
  }'

Update the pitch question to mention a competitor

curl -X PATCH "https://api.heymilo.network/api/v4/postings/D9E0F1A2/questions/{question_id}" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Imagine I am a VP of Analytics currently using Tableau. Give me your 60-second pitch on why I should switch to CloudMetrics."
  }'

Reorder voice questions

Put the pitch question first so candidates lead with energy:
curl -X POST "https://api.heymilo.network/api/v4/postings/D9E0F1A2/questions/reorder" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "modality": "voice",
    "question_ids": ["Q002", "Q001", "Q004", "Q003", "Q005"]
  }'

Step 3: Ingest Candidates

Single candidate (with resume)

curl -X POST "https://api.heymilo.network/api/v4/postings/D9E0F1A2/candidates" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Marcus Johnson",
    "email": "marcus.j@email.com",
    "phone_number": "+12125559876",
    "metadata": {
      "source": "linkedin",
      "current_company": "Salesforce",
      "current_title": "Account Executive"
    }
  }'

Single candidate (no resume expected)

For candidates from a job fair or cold outreach who may not have a resume ready:
curl -X POST "https://api.heymilo.network/api/v4/postings/D9E0F1A2/candidates" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Aisha Williams",
    "email": "aisha.w@email.com",
    "phone_number": "+13105557654",
    "metadata": {
      "source": "job_fair",
      "notes": "Great energy, bartending background, looking to break into tech sales"
    }
  }'
Both candidates receive the same interview link. Marcus may upload his resume for bonus points; Aisha can skip straight to the voice interview with Rachel. Response (same for both):
{
  "object": "candidate",
  "data": {
    "object": "candidate",
    "interview_id": "A1B2C3D4E5F6A7B8",
    "interview_url": "https://candidates.heymilo.io/cloudmetrics/i/A1B2C3D4E5F6A7B8",
    "posting_id": "D9E0F1A2"
  }
}

Bulk ingest

curl -X POST "https://api.heymilo.network/api/v4/postings/D9E0F1A2/candidates/bulk" \
  -H "X-API-KEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "data": [
      {"name": "David Kim", "email": "d.kim@email.com", "phone_number": "+14155551111", "metadata": {"source": "greenhouse"}},
      {"name": "Emma Rodriguez", "email": "e.rod@email.com", "phone_number": "+14155552222", "metadata": {"source": "referral"}},
      {"name": "Chris Taylor", "email": "c.taylor@email.com", "phone_number": "+14155553333", "metadata": {"source": "indeed"}}
    ]
  }'

Step 4: See Results

List all candidates

curl -X GET "https://api.heymilo.network/api/v4/postings/D9E0F1A2/candidates" \
  -H "X-API-KEY: your_api_key_here"

Full results — candidate WITH resume

curl -X GET "https://api.heymilo.network/api/v4/interviews/A1B2C3D4E5F6A7B8/data" \
  -H "X-API-KEY: your_api_key_here"
Response (Marcus — uploaded resume + completed interview):
{
  "object": "interview_data",
  "data": {
    "object": "interview_data",
    "interview_id": "A1B2C3D4E5F6A7B8",
    "posting_id": "D9E0F1A2",
    "name": "Marcus Johnson",
    "email": "marcus.j@email.com",
    "score": 88.0,
    "status": "completed",
    "workflow": {
      "steps": [
        {"id": "resume", "order": 1, "status": "complete", "started": true, "completed": true},
        {"id": "web_interview", "order": 2, "status": "complete", "started": true, "completed": true}
      ],
      "all_complete": true
    },
    "resume": {
      "object": "resume_result",
      "interview_id": "A1B2C3D4E5F6A7B8",
      "overall_score": 4.5,
      "is_eligible": true,
      "eligibility_criteria": [
        {
          "criteria_id": "rec_001",
          "criteria_text": "Has B2B sales experience (any duration)",
          "passed": true,
          "confidence": 0.97,
          "reasons": ["4 years as Account Executive at Salesforce selling to enterprise accounts"]
        }
      ],
      "score_criteria": [
        {
          "criteria_id": "rsc_001",
          "criteria_text": "Track record of meeting or exceeding sales quota",
          "score": 4.8,
          "confidence": 0.92,
          "reasons": ["Resume states 140% quota attainment in 2025, President's Club winner"]
        },
        {
          "criteria_id": "rsc_002",
          "criteria_text": "Experience selling SaaS or technology products",
          "score": 5.0,
          "confidence": 0.98,
          "reasons": ["4 years selling Salesforce CRM to mid-market and enterprise"]
        },
        {
          "criteria_id": "rsc_003",
          "criteria_text": "Experience with mid-market or enterprise sales cycles",
          "score": 4.2,
          "confidence": 0.90,
          "reasons": ["Managed deals in the $100K-$500K range with 3-6 month sales cycles"]
        },
        {
          "criteria_id": "rsc_004",
          "criteria_text": "Familiarity with CRM tools",
          "score": 5.0,
          "confidence": 0.99,
          "reasons": ["Salesforce power user, also experienced with Outreach and Gong"]
        }
      ],
      "resume_url": "https://cdn.heymilo.io/resumes/A1B2C3D4.pdf"
    },
    "web_interview": {
      "object": "web_interview_result",
      "interview_id": "A1B2C3D4E5F6A7B8",
      "match_score": 88,
      "highlights": [
        "Exceptional pitch delivery — confident, value-driven, with a strong close",
        "Strong deal narrative with specific metrics and multi-threading strategy"
      ],
      "lowlights": [
        "Prospecting workflow relies heavily on SDR-generated pipeline"
      ],
      "speech_score": 92.0,
      "scorecard": [
        {
          "question_id": "Q001",
          "question": "Walk me through a deal you closed that you are most proud of...",
          "evaluation_score": 5,
          "evaluation_summary": "Described a $350K deal with a Fortune 500 company. Navigated 6 stakeholders, overcame a last-minute competitor threat by arranging an executive alignment call. Closed in 4 months.",
          "score_weight": 3.0,
          "rank": 1
        },
        {
          "question_id": "Q002",
          "question": "Give me your 60-second pitch on CloudMetrics...",
          "evaluation_score": 5,
          "evaluation_summary": "Led with a pain point (data silos costing the business), positioned CloudMetrics as the unified solution, referenced a customer proof point, and closed with a clear next step.",
          "score_weight": 3.0,
          "rank": 2
        }
      ],
      "video_recording_url": "https://cdn.heymilo.io/recordings/A1B2C3D4.mp4",
      "audio_recording_url": "https://cdn.heymilo.io/recordings/A1B2C3D4.mp3",
      "tags": ["strong-closer", "enterprise-experience", "polished-communicator"]
    }
  }
}

Full results — candidate WITHOUT resume

Response (Aisha — skipped resume, completed interview):
{
  "object": "interview_data",
  "data": {
    "object": "interview_data",
    "interview_id": "B2C3D4E5F6A7B8C9",
    "posting_id": "D9E0F1A2",
    "name": "Aisha Williams",
    "email": "aisha.w@email.com",
    "score": 76.0,
    "status": "completed",
    "workflow": {
      "steps": [
        {"id": "resume", "order": 1, "status": "skipped", "started": false, "completed": false},
        {"id": "web_interview", "order": 2, "status": "complete", "started": true, "completed": true}
      ],
      "all_complete": true
    },
    "resume": null,
    "web_interview": {
      "object": "web_interview_result",
      "interview_id": "B2C3D4E5F6A7B8C9",
      "match_score": 76,
      "highlights": [
        "Natural storyteller with high energy and confidence",
        "Creative prospecting ideas from non-traditional background"
      ],
      "lowlights": [
        "No B2B sales experience — will need SaaS sales training",
        "Unfamiliar with CRM tooling"
      ],
      "speech_score": 90.0,
      "scorecard": [
        {
          "question_id": "Q001",
          "question": "Walk me through a deal you closed...",
          "evaluation_score": 3,
          "evaluation_summary": "No B2B deal experience, but described convincing a high-profile client to book their venue for a corporate event — showed natural selling instincts and persistence.",
          "score_weight": 3.0,
          "rank": 1
        },
        {
          "question_id": "Q002",
          "question": "Give me your 60-second pitch on CloudMetrics...",
          "evaluation_score": 4,
          "evaluation_summary": "Surprisingly strong pitch for someone without SaaS experience. Led with a relatable pain point, showed she researched the product, and had a natural conversational delivery.",
          "score_weight": 3.0,
          "rank": 2
        }
      ],
      "video_recording_url": "https://cdn.heymilo.io/recordings/B2C3D4E5.mp4",
      "audio_recording_url": "https://cdn.heymilo.io/recordings/B2C3D4E5.mp3",
      "tags": ["high-energy", "coachable", "non-traditional-background"]
    }
  }
}
Notice the difference: Marcus has both resume and web_interview results, while Aisha has resume: null because she skipped the optional resume step. Both candidates were evaluated fairly on their voice interview performance. This is exactly why optional resume screening works well for sales roles — you don’t miss out on high-potential candidates like Aisha who have great interpersonal skills but non-traditional backgrounds.

Summary

StepEndpointWhat Happens
Create agentPOST /v4/postingsTwo-stage pipeline: optional resume + video interview
Manage questionsGET/POST/PATCH/DELETE /v4/postings/{id}/questionsEdit criteria and interview questions at any time
Reorder questionsPOST /v4/postings/{id}/questions/reorderChange the interview question sequence
Ingest candidatePOST /v4/postings/{id}/candidatesCandidate gets an interview link
Resume screen(optional, automatic)AI scores resume if uploaded; skips if not
Voice interview(automatic)Rachel interviews every candidate on video
Get resultsGET /v4/interviews/{id}/dataResume analysis (if available) + voice scorecard
WebhookPOST /v4/webhooksReal-time notification when interview completes