POST /v1/people/offboard on the Manage Vanta API — deactivating unmonitored accounts, recording an acknowledger, and marking each person’s offboarding tasks complete. The build prompt below generates a daily job that drains the offboarding queue: it classifies every FORMER employee as already-complete, blocked, or eligible, then offboards the eligible ones in batches of up to 1000.
Before you begin
This guide is for Vanta admins managing data inside their own Vanta account. You’ll need:- A Manage Vanta API token.
- The token must have scopes
vanta-api.all:readandvanta-api.all:write. - For each person you’re offboarding, all of the following must already be true:
- Their employment
statusisFORMER. - All monitored accounts are deactivated (this is automatic when an integration reports the deactivation).
- All custom offboarding tasks are complete.
- Their employment
POST /v1/people/offboard will mark unmonitored accounts deactivated and complete the offboarding for you. It will not auto-complete custom offboarding tasks — those have to be done in the Vanta UI before this call will succeed.
Wiring this into your HRIS? Run a daily job: query
GET /v1/people?employmentStatusMatchesAny=FORMER, filter to people whose tasksSummary.status is not yet OFFBOARDING_COMPLETE, and call Step 3 in batches.1
Find people eligible for offboarding
Your terminal — call Response (truncated)Copy the
GET /v1/people and filter to FORMER employees so you only see candidates. Inspect each person’s tasksSummary.status — anyone whose status is already OFFBOARDING_COMPLETE is done; anyone else with status: FORMER is a candidate.Terminal
id of each candidate — you’ll send them in Step 3.Got a 401?
Got a 401?
Token is expired (one-hour lifetime), missing, or lacks
vanta-api.all:read. Mint a fresh one — see Authentication → Token expiration.tasksSummary.status is OFFBOARDING_COMPLETE?
tasksSummary.status is OFFBOARDING_COMPLETE?
That person is already offboarded. Skip them — calling
offboard on them is a no-op.Person still has custom offboarding tasks open?
Person still has custom offboarding tasks open?
POST /v1/people/offboard will fail until those are completed. Finish them on the Personnel page (or via your HRIS workflow) before calling Step 3.2
Pick an acknowledger
Your terminal — every offboarding event records who acknowledged it (typically a security or HR admin). The Copy the user
acknowledgerId is not a Person id — it’s the Vanta User Account ID of a CURRENT employee. Get it from either:GET /v1/users, or- the
userIdfield on a person returned fromGET /v1/people.
Terminal
id of the acknowledger you’ll record on every entry. Most teams hard-code this to a specific compliance lead’s user ID.Acknowledger must be CURRENT?
Acknowledger must be CURRENT?
Yes. Offboarding fails if the
acknowledgerId belongs to a FORMER employee.Why isn't this the Person id?
Why isn't this the Person id?
acknowledgerId refers to the Vanta User Account ID, not the Person ID. Pull it from GET /v1/users or from the userId field on the corresponding person record.3
Offboard the people
Your terminal — Expected response (
POST /v1/people/offboard with an updates array. Each entry needs the person id and the acknowledgerId you picked.200) — a per-person result so you can see which offboardings succeeded:Got an ERROR saying tasks are incomplete?
Got an ERROR saying tasks are incomplete?
The person still has open custom offboarding tasks or monitored accounts that haven’t deactivated. Resolve those (typically by waiting for the next sync from your IDP/MDM) and retry just that
id.Got a 403?
Got a 403?
Your token has
vanta-api.all:read but not vanta-api.all:write. Mint a token with both scopes.Need to confirm a single person was offboarded?
Need to confirm a single person was offboarded?
Re-call
GET /v1/people/{personId}. The tasksSummary.status flips to OFFBOARDING_COMPLETE when the offboarding is recorded.Reassigning their controls first? Run Assign a control owner for everything they own before this call so nothing ends up orphaned to a
FORMER user.Congratulations
You’ve completed the offboarding workflow for one or more ex-employees. Their unmonitored accounts are now marked deactivated, an acknowledger is recorded for the audit log, and theirtasksSummary.status is OFFBOARDING_COMPLETE.