Send candidate feedback to several candidates
Emails the drafted feedback of up to 25 of the job's candidates, each as a single release with channel: email would (same sender, subject and 90-day link), and answers with one outcome per report and the totals. A bulk send only ever emails: it never copies a link and never returns one. A candidate is skipped, with a reason, when there is no draft (no_draft), the link was revoked (revoked), there is no usable email address (no_email), the same feedback was already emailed (already_sent), every section is off or every item removed (nothing_to_send), or its wording has a warning and you did not set acknowledgeWarnings (needs_review; show a person the warnings from GET /v1/reports/{id}/candidate-kit first). A report that is not part of the job is skipped as report_not_found. A send that was tried and did not work is failed (rate_limited after five emails a day for one feedback, send_failed). Skipped candidates never stop the others. Releasing is allowed before a hiring decision is recorded. Send an Idempotency-Key: a retry returns the first result and emails nothing twice. The key's owner must be a member or admin and the job must be open. Answers candidate_feedback_disabled while an admin has turned candidate feedback off in the organization settings.
Required scope: candidate_feedback:write.
Errors
- 400:
invalid_content_type,invalid_idempotency_key,invalid_json,invalid_request,request_body_too_large,unknown_field - 401:
authentication_required,invalid_api_key - 403:
api_access_disabled,candidate_feedback_disabled,insufficient_scope,permission_denied - 404:
job_not_found - 409:
idempotency_key_reused,idempotency_request_in_progress,job_closed - 422:
invalid_parameter - 429:
rate_limit_exceeded - 500:
api_error - 503:
maintenance_mode,service_unavailable
ApiKeyAuthorizationBearer <probb_live_<id>_<secret>>jobId*stringThe job's ID.
1 <= length <= 200Idempotency-Key?stringMakes retries safe. Repeating a request with the same key and body within 24 hours returns the original response with Idempotent-Replayed: true. The same key with a different body, or from a different API key, returns idempotency_key_reused.
1 <= length <= 255application/json- body
reportIds*array<>The job's reports to email feedback to, at most 25. A report sent twice counts once. A report that is not part of the job is skipped, never revealed.
1 <= items <= 25acknowledgeWarnings?booleanSet to true once a person has seen the wording warnings and wants to send anyway. Without it, a candidate whose wording has a warning is skipped as needs_review.
Success.
application/json- response
object*stringjobId*stringThe job.
totals*outcomes*array<>One outcome per report, in the order requested.
# Set PROBB_URL and PROBB_API_KEY. Replace any *_VALUE placeholder and any example ID (such as job_example) with a real one.# Idempotency-Key is optional. Reuse the same key and body when retrying one logical write.curl --fail-with-body -X POST "$PROBB_URL/api/v1/jobs/JOB_ID_VALUE/candidate-kits/release" \ -H "Authorization: Bearer $PROBB_API_KEY" \ -H "Idempotency-Key: $REQUEST_KEY" \ -H 'Content-Type: application/json' \ --data-binary '{ "reportIds": [ "rep_example_1", "rep_example_2", "rep_example_3" ], "acknowledgeWarnings": false}'{ "object": "candidate_kit_bulk_release", "jobId": "string", "totals": { "sent": -9007199254740991, "skipped": -9007199254740991, "failed": -9007199254740991 }, "outcomes": [ { "reportId": "string", "candidateName": "string", "status": "sent", "reason": "no_draft", "message": "string", "delivery": "not_requested" } ]}