---
title: "Revoke a partner grant (partner admins only)"
method: DELETE
path: "/partner/clients/{clientId}/grants/{userId}"
tags: ["Partners"]
---

# Revoke a partner grant (partner admins only)

`DELETE /partner/clients/{clientId}/grants/{userId}`

Core access is removed at once; then the Clerk membership is deleted. A Clerk failure answers 200 with syncState revoking and syncError; the retry route, or this call again, finishes it. 403 IMPERSONATED_SESSION for an impersonated session.

## Path parameters

- `clientId` string, required
- `userId` string, required

## Response `200`

The grant

- PartnerGrantResponse
  - `data` PartnerGrant, required
    - `email` string, required
    - `grantedAt` string, date-time, required
    - `name` string, required
    - `revokedAt` string, date-time
    - `role` 'admin' | 'member' | 'viewer', required
    - `syncError` string
    - `syncState` 'pending' | 'active' | 'failed' | 'revoking' | 'revoked', required
    - `userId` string, required

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found

## Changes

- **2026-10-06** `461a0ebc7731` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/greentally/apis/esgai-api/changes/partner/clients/:clientId/grants/:userId/delete.md)

---

[API](https://skmtc.dev/greentally/apis/esgai-api.md) · [All operations](https://skmtc.dev/greentally/apis/esgai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/greentally/apis/esgai-api/revisions/461a0ebc7731?raw)
