---
title: "Bulk Send Live Screen Invite"
method: POST
path: "/api/candidates/bulk/send-live-screen-invite"
tags: ["Candidate Meetings", "candidate-meetings"]
---

# Bulk Send Live Screen Invite

`POST /api/candidates/bulk/send-live-screen-invite`

## 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/bulk/send-live-screen-invite`
- Auth: HTTP bearer

Send live-screen invites to many candidates in one call.

Each candidate is processed independently:
  - Eligibility checked per-candidate (same rules as single endpoint)
  - INSERT + email send per-candidate
  - Per-item failures DO NOT abort the batch — they show up under
    `skipped` with a reason

Cap is 50 ids per call (enforced by the Pydantic schema). Processing
runs sequentially because SQLAlchemy AsyncSession is single-threaded.

## Request body

- BulkSendLiveScreenInviteRequest: POST /api/candidates/bulk/send-live-screen-invite payload. Capped at 50 ids per call. Per-candidate failures are isolated — one bad id does not abort the batch (each is reported under `skipped`).
  - `candidate_ids` string[], required

## Response `200`

Successful Response

- BulkSendLiveScreenInviteResponse
  - `sent` integer, required
  - `skipped_count` integer, required
  - `skipped` BulkSkippedItem[], required
    - `candidate_id` string, uuid, required
    - `reason` 'not_found' | 'no_email' | 'already_invited' | 'interview_not_passed' | 'send_failed', required
    - `detail` string, nullable
  - `results` BulkSentItem[], required
    - `candidate_id` string, uuid, required
    - `meeting_id` string, uuid, required

## 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)
