Hiring

Save a screening

hiring_record_screening · Changes data · Markdown

Saves a review of one application: strong, partial or weak, a summary, and each criterion with its evidence.

$0.01 a call

From your agent’s balance. A call that fails costs nothing.

An example

Maria is a strong match: six years in bike shops, and she builds wheels for a cyclocross team.

Your agent callshiring_record_screening$0.01 a call

The example business is Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon. The reply is the one the tool really gives.

With these arguments
{
  "applicant_id": 4101,
  "match": "strong",
  "summary": "Six years as a shop mechanic, the last two also building wheels for a cyclocross team.",
  "criteria": [
    {
      "id": "c1",
      "met": true,
      "evidence": "Six years at a bike shop in Eugene"
    },
    {
      "id": "c2",
      "met": true,
      "evidence": "Builds the wheels for a cyclocross team"
    }
  ]
}
What comes back
{
  "applicant": {
    "applicant_id": 4101,
    "job": "bike-mechanic",
    "name": "Maria Santos",
    "email": "maria.santos@example.com",
    "phone": "+1 503 555 0130",
    "stage": "Applied",
    "rating": null,
    "source": "careers",
    "applied_at": "2026-10-14T08:00:00+00:00",
    "updated_at": "2026-10-14T08:00:00+00:00",
    "has_resume": true,
    "flags": [],
    "screened": "strong",
    "stage_since": "2026-10-14T08:00:00+00:00",
    "stages_reached": [
      "Applied"
    ],
    "assessments": [],
    "interview": null,
    "next_step": {
      "step": "decide",
      "label": "Screened, decide",
      "waiting_on": "you",
      "at": "2026-10-14T08:00:00+00:00",
      "overdue": false
    },
    "match_score": 100,
    "screening_summary": "Six years as a shop mechanic, the last two also building wheels for a cyclocross team.",
    "passed_filter_at": null,
    "risk": "high",
    "signals": {
      "risk": "high",
      "high": [
        {
          "code": "shared_phone",
          "applicant_ids": [
            2
          ],
          "text": "The same phone number is on 1 other application under another email address."
        }
      ],
      "minor": [],
      "authentic": [
        {
          "code": "name_in_email",
          "text": "Their name is in their email address."
        }
      ],
      "checked_at": "2026-10-14T08:00:00+00:00"
    },
    "spam": false,
    "links": [],
    "cover_letter": "I have worked in bike shops for six years, the last two also building wheels for a cyclocross team.",
    "answers": [
      {
        "question": "How many years have you worked as a bike mechanic?",
        "answer": 6
      },
      {
        "question": "Can you lift 50 lb?",
        "answer": true
      }
    ],
    "screening": {
      "match": "strong",
      "summary": "Six years as a shop mechanic, the last two also building wheels for a cyclocross team.",
      "criteria": [
        {
          "id": "c1",
          "text": "Two years as a mechanic in a bike shop",
          "met": true,
          "evidence": "Six years at a bike shop in Eugene"
        },
        {
          "id": "c2",
          "text": "Has built wheels",
          "met": true,
          "evidence": "Builds the wheels for a cyclocross team"
        }
      ],
      "by": "Pip",
      "at": "2026-10-14T08:00:00+00:00",
      "required_not_shown": []
    },
    "notes": [],
    "history": [
      {
        "at": "2026-10-14T08:00:00+00:00",
        "change": "Applied"
      },
      {
        "at": "2026-10-14T08:00:00+00:00",
        "change": "Screened: strong match",
        "by": "Pip"
      }
    ],
    "interview_invite": null,
    "resume": {
      "file_id": "e5606982-1055-4e0f-9b9a-4cb87560afe9",
      "name": "Résumé Maria Santos.pdf",
      "content_type": "application/pdf",
      "size": "1.1 KB",
      "size_bytes": 1153,
      "sha256": "6b65acac1ceea7ed3492428300b2b14437c63d6d3c622e96f0d76366e03b0fb9",
      "created_at": "2026-10-14T08:00:00+00:00",
      "download_url": "https://cncto.co/d/e5606982-1055-4e0f-9b9a-4cb87560afe9?t=eyJmIjoiZTU2MDY5ODItMTA1NS00ZTBmLTliOWEtNGNiODc1NjBhZmU5IiwiZXhwIjoxNzkyNTAyMjA4fQ:1xInEO:xpOvIt4iJCsKvKLKpZciLO9wukZ6PpV7dbAEEGMPh-U",
      "link_expires_in_hours": 24
    }
  }
}

Use it when

After reading an application from hiring_screen_queue. It moves nobody.

What it does

Save your review of one application: strong, partial or weak match, a short summary, and for each of the job's criteria whether the application shows it, with the words that show it. Its match score is the weighted share of the criteria it shows (unclear counts as not shown). When the job has a filter and the application passes it, the hiring team hears about it once, with your summary: by email and as the event hiring.candidate_passed. It moves nobody: decide with hiring_move_applicant.

What comes back

applicant: the application with the screening saved, its match_score (the weighted share of the job's criteria it shows) and passed_filter_at once it passes the job's filter, when the hiring team is told (email and hiring.candidate_passed). Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
applicant_idRequiredintegerAt least 1.
matchRequiredstringOne of: strong,partial,weak.
summaryRequiredstring1 to 2,000 characters.
criteriaarray of objects[{"id": "c1", "met": true|false|null, "evidence": "Led a team of four at ..."}]. Up to 10 items.

The call

Over MCP, call hiring_record_screening on https://api.conecto.chat/mcp/hiring. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/hiring_record_screening \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"applicant_id":4101,"match":"strong","summary":"Six years as a shop mechanic, the last two also building wheels for a cyclocross team.","criteria":[{"id":"c1","met":true,"evidence":"Six years at a bike shop in Eugene"},{"id":"c2","met":true,"evidence":"Builds the wheels for a cyclocross team"}]}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
not_found404No applicant of the business has that applicant_id.Find them with hiring_list_applicants.
payment_required402The application came in while the balance could not pay its fee, so it is held.Top up; the application opens once its fee is paid.
ai_review_off409Candidates were not told that AI may help review applications.Run hiring_setup_careers with ai_review: true first.
invalid_input400match or a criterion is not in the right shape.Use the criterion ids from the job, and met as true, false or null.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md