> For the complete documentation index, see [llms.txt](https://docs.stellic.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stellic.com/stellic-partner-api/student/detach-all-tags-from-a-student.md).

# Detach all tags from a student

Use this endpoint to remove **every** tag from a student in one call, for example before you re-attach the current set from your system of record. It takes no body and can't remove only some tags. The tags themselves aren't deleted, so other students keep them. `state.tags` in the response is always empty.

## DELETE /student/{student\_username}/bulk/tags

>

```json
{"openapi":"3.0.0","info":{"title":"Stellic for Developers","version":"1.0"},"tags":[{"name":"Student"}],"servers":[{"url":"https://{institution}.stellic.com/partnerapi/v1","variables":{"institution":{"default":"{institution}","description":"Your institution's Stellic subdomain: the part before `.stellic.com` in the URL you use to sign in. It becomes the host in every request, as in `https://{institution}.stellic.com/partnerapi/v1/...`. Replace the `{institution}` placeholder with your subdomain before sending."}}}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token issued by your Stellic integration partner. Send it as `Authorization: Bearer <token>` on every request. One token per institution; do not share across environments."}}},"paths":{"/student/{student_username}/bulk/tags":{"delete":{"tags":["Student"],"parameters":[{"name":"student_username","in":"path","required":true,"description":"Student's platform username. Send it exactly as stored, including case; this path does not lowercase it. The lookup excludes archived students (returns `Student with username {student_username} is archived`) and test accounts (returns the same `No student exists with username: {student_username}` as a missing user).","schema":{"type":"string"}}],"responses":{"200":{"description":"Every tag link on the student was removed, or the student had none (idempotent). `state.tags` is the student's remaining tag list, which is always empty after this call.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"state":{"type":"object","properties":{"username":{"type":"string"},"tags":{"type":"array","description":"Always empty after this call.","items":{"type":"string"}}}}}}}}},"400":{"description":"Student lookup failure. Envelope is `{\"status\": \"failure\", \"identifiers\": {\"student_username\": \"...\"}, \"message\": \"...\"}` (single string, no `errors` array). Having no tags is not an error; that returns `200`.\n\nCommon causes:\n- Student not found or test account - returns `No student exists with username: {student_username}`\n- Student archived - returns `Student with username {student_username} is archived`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"identifiers":{"type":"object","properties":{"student_username":{"type":"string"}}},"message":{"type":"string"}}}}}},"401":{"description":"Missing or invalid Bearer token."},"403":{"description":"Your IP address isn't on the allowlist for this endpoint. Contact Stellic to add it; the response includes the `client_ip` Stellic saw.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"client_ip":{"type":"string"}}}}}},"500":{"description":"Unhandled error while removing the tags. The call is safe to retry: it removes whatever tags remain. Envelope is `{\"identifiers\": {\"student_username\": \"...\"}, \"errors\": [{\"message\": \"Stellic couldn't process your request\"}]}` with no `status` key, different from the 400 shape.","content":{"application/json":{"schema":{"type":"object","properties":{"identifiers":{"type":"object","properties":{"student_username":{"type":"string"}}},"errors":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}}}}}}}}}}}}}}
```

#### What happens after the call

* All of the student's tags are removed right away, including ones transfer credit processing attached.
* The student's audit is recalculated on its next read, and student sets, advisor access, and search are updated in a background task after the tag removal is saved. General requirements and pathways are recalculated if any tag was removed. After general requirements are refreshed, the audit may be recalculated again on a later read, even if it was read just after the call.
* A student with no tags gets a 200 and nothing else happens.

#### Notes

* **Programs keep their audit version.** Unlike [removing one tag](/stellic-partner-api/student/detach-a-tag-from-a-student.md), this call doesn't move programs to the audit version that matches the student's remaining tags. If a tag decides which audit version applies, remove it on its own.
* **Your data sync can put tags back.** If your data sync sends student tags, the ones it still lists are attached again on the next run.

#### Related APIs

* [`DELETE /student/{student_username}/tags/{tag_sis_id}`](/stellic-partner-api/student/detach-a-tag-from-a-student.md) to remove one tag.
* [`POST /student/{student_username}/tags/{tag_sis_id}`](/stellic-partner-api/student/attach-a-tag-to-a-student.md) to re-attach tags.
