Docs
API reference

Approve queued auto-invite candidates

POST
/api/v1/jobs/{id}/auto-invite/evaluations/approve

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

Authorization

ApiKey
headerAuthorizationBearer <probb_live_<id>_<secret>>

Path Parameters

id*string

The job's ID.

Length1 <= length <= 200

Header Parameters

Idempotency-Key?string

Makes 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.

Length1 <= length <= 255

Request Body

application/json
  1. body
evaluationIds*array<>

The evaluations to approve, from GET /v1/jobs/{id}/auto-invite/evaluations, at most 20.

Items1 <= items <= 20
maxCredits?number

The 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.

Range0 < value <= 1000000

Response Body

Success.

application/json
  1. response
object*string
invitedCount*integer
Range-9007199254740991 <= value <= 9007199254740991
skippedCount*integer
Range-9007199254740991 <= value <= 9007199254740991
failedCount*integer
Range-9007199254740991 <= value <= 9007199254740991
notAttemptedCount*integer
Range-9007199254740991 <= value <= 9007199254740991
results*array<>

One result for every item you sent.

Example Request
# 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}'
Example Response
{  "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"    }  ]}