Approve queued auto-invite candidates
Invites the candidates of up to 20 queued items, exactly as POST /v1/interviews/batch does: the same price and limits, the same skip reasons, and each candidate is emailed their interview link. A candidate who cannot be invited any more (an interview exists, no email on file, the job closed) is skipped and never charged. If the credit balance or the monthly limit runs out part-way, the interviews already created stay, the one that hit the limit is failed and the rest are not_attempted, and they stay queued. Send maxCredits to cap the total and an Idempotency-Key so a retry returns the same results instead of inviting again. Approving an item that was already invited returns it as invited. An item that was dismissed or did not match is auto_invite_not_pending. Because approving spends credits it needs interviews:write as well as auto_invite:read.
Required scope: interviews:write.
Errors
- 400:
invalid_content_type,invalid_idempotency_key,invalid_json,request_body_too_large,unknown_field - 401:
authentication_required,invalid_api_key - 402:
insufficient_credits,price_exceeds_max,quota_exceeded - 403:
api_access_disabled,insufficient_scope - 404:
auto_invite_evaluation_not_found,job_not_found - 409:
auto_invite_not_pending,idempotency_key_reused,idempotency_request_in_progress - 422:
invalid_parameter - 429:
rate_limit_exceeded - 500:
api_error - 503:
maintenance_mode,service_unavailable
ApiKeyAuthorizationBearer <probb_live_<id>_<secret>>id*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
evaluationIds*array<>The evaluations to approve, from GET /v1/jobs/{id}/auto-invite/evaluations, at most 20.
1 <= items <= 20maxCredits?numberThe most credits you allow the whole approval to cost: the price of every candidate who would be invited. If the current total is higher the request fails with price_exceeds_max and nothing is charged. Read the price from GET /v1/organization.
0 < value <= 1000000Success.
application/json- response
object*stringinvitedCount*integer-9007199254740991 <= value <= 9007199254740991skippedCount*integer-9007199254740991 <= value <= 9007199254740991failedCount*integer-9007199254740991 <= value <= 9007199254740991notAttemptedCount*integer-9007199254740991 <= value <= 9007199254740991results*array<>One result for every item you sent.
# 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/ID_VALUE/auto-invite/evaluations/approve" \ -H "Authorization: Bearer $PROBB_API_KEY" \ -H "Idempotency-Key: $REQUEST_KEY" \ -H 'Content-Type: application/json' \ --data-binary '{ "evaluationIds": [ "aie_example_1", "aie_example_2" ], "maxCredits": 20}'{ "object": "auto_invite_approval", "invitedCount": -9007199254740991, "skippedCount": -9007199254740991, "failedCount": -9007199254740991, "notAttemptedCount": -9007199254740991, "results": [ { "evaluationId": "string", "reportId": "string", "status": "invited", "interviewId": "string", "code": "string", "message": "string" } ]}