---
title: "Deactivate a creator your platform funds"
method: POST
path: "/api/v1/solo-accounts/{accountId}/deactivate"
tags: ["Solo Accounts"]
---

# Deactivate a creator your platform funds

`POST /api/v1/solo-accounts/{accountId}/deactivate`

## Request

- Base URL: `https://easy2257.com`
- URL: `https://easy2257.com/api/v1/solo-accounts/{accountId}/deactivate`
- Auth: HTTP bearer

Takes a creator your platform pays for off your roster. They come off your next invoice (a platform is invoiced for the creators in custody at the moment its billing period closes), their records stay in custody for the seven-year retention window, and `POST .../reactivate` brings them back with no new verification. Fires `solo_account.suspended` with `reason: partner_deactivated`; revoke upload access on it as you would for any suspension. Idempotent: deactivating a creator you already deactivated returns `200` with `{ "deactivated": false }`. Only for creators your platform funds. A creator who pays Easy2257 directly is not on your invoice and returns `409 CREATOR_PAYS_OWN_SUBSCRIPTION`. Never relabels a suspension you did not make: a lapse clears when the fee is paid and an Easy2257 suspension clears when Easy2257 lifts it (`409 SUSPENDED_FOR_OTHER_REASON`).

## Path parameters

- `accountId` string, required

## Response `200`

Deactivated, or already deactivated by you.

- DeactivateSoloAccountResponse
  - `deactivated` boolean, required: true if this call deactivated the creator. false if you had already deactivated them, which is a successful no-op, not an error.
  - `accountId` string, required
  - `externalUserId` string, required
  - `status` 'suspended', required
  - `suspendedAt` string, date-time
  - `suspendReason` 'partner_deactivated', required: Always `partner_deactivated` on this response. It is the only reason your platform writes, and the only one `POST .../reactivate` clears.

## Other responses

- `400`: Invalid request: a required field is missing or malformed.
- `401`: No `Authorization: Bearer` header, or a key that is unknown, revoked, or expired. The body carries only `error`, never a `code`.
- `403`: Rejected before the handler: a test-mode key (`TEST_MODE_UNAVAILABLE`) or a partner account that is not ACTIVE. Never used for cross-partner access, which returns 404.
- `404`: No such account, or it belongs to another partner. The two cases are indistinguishable on purpose, so the API cannot be used to enumerate accounts.
- `409`: Nothing changed. Three codes: `NOT_IN_CUSTODY`: the creator has not finished onboarding, so there is no coverage to end and no invoice line to stop (`status` carries their current value). `CREATOR_PAYS_OWN_SUBSCRIPTION`: the creator holds their own Easy2257 subscription; your platform is not paying for them. `SUSPENDED_FOR_OTHER_REASON`: already suspended for a reason your platform does not control (`suspendReason` says which); deactivate them once they are back.
- `429`: Rate limit exceeded: 300 requests per 60 seconds per API key, shared across all `/api/v1` endpoints (requests without a `Bearer` key fall back to 60 per 60 seconds per client IP, and a per-address flood ceiling of 1200 per 60 seconds also applies). Honor `Retry-After`.
- `500`: Server error. Retry with exponential backoff.

---

[API](https://skmtc.dev/easy2257/apis/easy2257-partner-api.md) · [All operations](https://skmtc.dev/easy2257/apis/easy2257-partner-api/llms.txt) · [OpenAPI document](https://skmtc.dev/easy2257/apis/easy2257-partner-api/revisions/f880026c1f04?raw)
