API reference
Preview merging duplicate jobs
POST
Shows exactly what POST /v1/jobs/{id}/merge would do with the same body, and changes nothing: what moves to the kept job (reports, interviews, hiring decisions, talent history), the fields it gains or keeps, two reports for the same candidate (every report is kept), clashing decisions (the more recent stays), and blockers that would stop a merge right now.
Required scope: jobs:read (jobs:write also works).
Errors
- 400:
invalid_content_type,invalid_json,request_body_too_large,unknown_field - 401:
authentication_required,invalid_api_key - 403:
api_access_disabled,insufficient_scope - 404:
job_not_found - 422:
invalid_parameter - 429:
rate_limit_exceeded - 500:
api_error - 503:
maintenance_mode,service_unavailable
ApiKeyheader
AuthorizationBearer <probb_live_<id>_<secret>>id*stringThe job's ID.
Length
1 <= length <= 200application/json- body
mergeIds*array<>The duplicate jobs to fold into this one, at most 10. List each once, and not the one you keep.
Items
1 <= items <= 10Success.
application/json- response
object*stringkeeperId*stringThe record that stays.
keeperName*stringmergeable*booleanFalse while blockers is not empty: a merge now answers merge_work_in_progress or merge_not_ready.
blockers*array<>sources*array<>totals*irreversible*booleanA merge deletes the merged records and cannot be undone. Nothing is refunded.
# Set PROBB_URL and PROBB_API_KEY. Replace any *_VALUE placeholder and any example ID (such as job_example) with a real one.curl --fail-with-body -X POST "$PROBB_URL/api/v1/jobs/ID_VALUE/merge-preview" \ -H "Authorization: Bearer $PROBB_API_KEY" \ -H 'Content-Type: application/json' \ --data-binary '{ "mergeIds": [ "job_duplicate_1" ]}'Example Response
{ "object": "job_merge_preview", "keeperId": "string", "keeperName": "string", "mergeable": true, "blockers": [ { "id": "string", "name": "string", "reason": "active_work", "message": "string" } ], "sources": [ { "id": "string", "name": "string", "fieldChanges": [ { "field": "string", "kept": "string", "dropped": "string" } ], "inheritsExternalId": true, "reports": -9007199254740991, "interviews": -9007199254740991, "decisions": -9007199254740991, "decisionConflicts": [ { "counterpart": "string", "kept": "string", "merged": "string", "winner": "kept" } ], "duplicateReportsFor": [ "string" ], "matchAssessments": -9007199254740991, "talentSearches": -9007199254740991 } ], "totals": { "reports": -9007199254740991, "interviews": -9007199254740991, "decisions": -9007199254740991 }, "irreversible": true}