---
title: "Send Coding Assessment"
method: POST
path: "/api/candidates/{candidate_id}/send-coding-assessment"
tags: ["coding-assessment"]
---

# Send Coding Assessment

`POST /api/candidates/{candidate_id}/send-coding-assessment`

## Request

- Base URL: `https://api.ruzora.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ruzora.com/api/candidates/{candidate_id}/send-coding-assessment`
- Auth: HTTP bearer

Mint a magic link and email the candidate. Rolls back the row on email
send failure so we don't leak a sent-but-undelivered ghost row.

## Path parameters

- `candidate_id` string, uuid, required

## Request body

- AppModelsCodingChallengeSendAssessmentRequest: POST /api/candidates/{id}/send-coding-assessment payload. Provide exactly one of: package_slug (recommended — bundles a coding challenge + N questions) challenge_slug (legacy single-challenge mode, kept for back-compat) If neither is provided, the API tries to resolve the candidate's project pipeline → projects.default_package_slug. Talent-pool candidates with no project association will get a 400 with guidance.
  - `package_slug` string, nullable
  - `challenge_slug` string, nullable
  - `project_id` string, uuid, nullable: Optional context — if set, server resolves project's default_package_slug when both slug fields are empty.
  - `expires_in_days` integer

## Response `201`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/ruzora/apis/ruzora-candidate-crm-api.md) · [All operations](https://skmtc.dev/ruzora/apis/ruzora-candidate-crm-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ruzora/apis/ruzora-candidate-crm-api/revisions/f9b8223f3ac4?raw)
